Linux desktop arm64 image?


Where to find a good linux distribution for Rock960 ?

I would like an equivalent to FriendlyDesktop 18.04 for RK3399 - FriendlyARM WiKi
(full opengl acceleration, …)

Currently I tested your debian armhf but it is really slow compared to FriendlyDesktop on an similar RK3399 board …


Board based on the Rockchip RK3399 - ARM Cortex-A72 Dual-core up to 1.8GHz + Cortex A53 Quad-core up to 1.4GHz

Hi @allan_cornet,

I installed Ubuntu server image from:

Then I installed Xfce like:

apt-get update
apt-get upgrade
apt-get install apt-utils
apt-get install dialog
apt-get install xfce4 slim

With this image, you may have to resize one of the partitions and then extend file system. Check these two posts:


There are just a few applications installed (really a minimum). This is pretty lightweight and fast.

I hope it helps

1 Like

Hi there,
Here is my ARM64 build of Rock960 board, It should be helpful.
It is ARM64 build for debian stretch incl. LXDE desktop.


Thanks man, I’m using it right now.

U’r Welcome ! :slight_smile:
I strongly recommend to turn off WiFi power save mode for best performance, or use USB WiFi instead built in one - it is really unstable for all.
And some more helpful info: how I build it is here -

Hi @Raph_K,

Can you share the steps to compile your image ?


here as I written just before you asked,

how I build it is here -

1 Like

Thanks for providing this guide, I followed it up to building the kernel and I get this error:

josh@josh-linux-desktop:~/Downloads/rock960dev$ build/ rock960ab
 Building kernel for rock960ab board! 
  CHK     include/config/kernel.release
  CHK     include/generated/uapi/linux/version.h
  CHK     include/generated/utsrelease.h
  CHK     scripts/mod/devicetable-offsets.h
  CHK     include/generated/timeconst.h
  CHK     include/generated/bounds.h
  CHK     include/generated/asm-offsets.h
  CALL    scripts/
make[1]: 'include/generated/vdso-offsets.h' is up to date.
  CHK     include/generated/compile.h
  LD      drivers/built-in.o
aarch64-linux-gnu-ld: drivers/phy/built-in.o: bad reloc symbol index (0x40003a >= 0x2d5) for offset 0x6554d in section `.debug_info'
aarch64-linux-gnu-ld: drivers/phy/built-in.o: bad reloc symbol index (0x40003a >= 0x2d5) for offset 0x6554d in section `.debug_info'
aarch64-linux-gnu-ld: final link failed: Bad value
scripts/ recipe for target 'drivers/built-in.o' failed
make[1]: *** [drivers/built-in.o] Error 1
Makefile:999: recipe for target 'drivers' failed
make: *** [drivers] Error 2

Any ideas?

EDIT: An embarrassingly quick fix - but dumb luck I found it on Google. I had to run dos2unix on everything. find . -type f -print0 | xargs -0 dos2unix. I don’t know why I needed to though?

Can you switch your repo to release 4.4 ?
I didn’t experienced your error ever, but it should be better to move released repo with git commands.
My working desktop install LinuxMint 18.3, x86.64.

Recommended release tag : “96rocks/release-4.4-rock960”.

Thanks, I had another error on my desktop, so I built it inside Docker instead. I had to bodge around python-support since it’s been deprecated since 16.04 and I’ve updated the list of apt dependencies since I had to install several extras that aren’t in 96boards’ instructions.

If anyone else is interested:

Seems to have built fine, I’ll update when it’s flashed and I’ve checked it works!

I’d also like to check it works with a mainline kernel next, which shouldn’t be too difficult now the infrastructure is in place. It looks like the linaro build scripts already do a check to see if the kernel version is > 4.5.

1 Like

Ok so it boots fine, but networking is broken. The only interface I can see is loopback.

I think perhaps I copied the kernel configuration after building the kernel. Oops. I’ve swapped the order, see if that fixes it.

That error may belong to wifi device driver, you can check see dmesg.
Or can try to Wifi device power saving mode to turned off as below if your device came back to alived:

sudo iw dev wlan0 set power_save off

Cheers !

1 Like

Yeah we’re getting there. My build script now adds stuff to the default rockchip config before it’s copied to the root of the kernel folder, that seems to work.

I’ve also added a post-build script which also sorts out a few things:

  • Runs ssh-keygen -A to install default SSH keys (otherwise you can’t login)
  • Permanently turns off WiFi power saving via a NetworkManager conf
  • Pre-installs Docker

I can then flash the board and use an AmazonBasics USB3 Ethernet adaptor to connect to my router, which works out of the box (good test to make sure the install was successful).

EDIT: Now trying to get Docker to run, think I need some more modules enabled.

Ok so it seems like no modules are being build when I do this in Docker (MODPOST says nothing created, and there’s no /lib/modules on the device.

However, if I build the kernel on the Rock960, it makes about 800 modules and I can run make modules_install. All I did is:

  • Add a gig of swap
  • Clone 96rocks/kernel and checkout release-4.4-rock960
  • Set arch (probably not needed)?
  • make rockchip_linux_defconfig
  • make && make modules_install

Is there something different I need to do during the cross-compilation to get this working?

One strange thing is that in Docker, once I clone the repo, I get kernel 4.4.103, but when I clone on the board (same tag), I get kernel 4.4.154. The last commit for that branch was December, so I don’t see how it’s building a new version… The build process runs:

RUN cd rock960dev && repo start 96rocks/release-4.4-rock960 --all

Does that not do what I think it does? When I manually run git checkout, I get 4.4.154 as expected(?).

1 Like

Further update/progress… some questions:

  • I can’t get certain modules to install properly. It’s possible I’m enabling the wrong things, but the main one is iptables with NAT support. I’ve tried adding them as built-in modules, which I guess works, but Docker seems to look for modules explicitly (or perhaps it falls back to modprobe if it can’t do stuff with built-ins).
  • On the last build HDMI failed. The caps lock light works, so it’s booting fine. And it was working find prior to a reboot. Duff HDMI cable!
  • Using a USB ethernet adaptor, I occasionally get total hangs over SSH. It seems to happen when I’m running apt, but may be autosuspend?
  • Tried logging in over serial, but I can’t enter anything. The prompt seems to get sent, but then a bunch of messages appear afterwards and no input is accepted (or it seems to get ignored). Boot output here:

I’ll try re-flashing and building the modules on the board instead.

Sorry for people, here’s my new URL here.
I bought my own domain now, and changed some configuration.

And here’s new URL, too.

And I’ve been updated my own build kernel for some changes, and will be share to here.

Updates are:

  • Supporting latest Realtek r8152/8153 USB3.0 GbE (Still unstable in powered off)
  • Supporting Cypress GX3 USB3.0 GbE
  • Supporting Microchip LAN7800 USB3.0 GbE
  • Kernel governor tunned for Performance - It means you need good heatsink.

Rockchip seems not work their kernel for being updated, ashamed!.
My some enhanced kernel will coming soon.

– update –
Here’s new kernel patch for Rock960[A/B/C] boards.

just follow my patch in Rockchip-linux repo.

1 Like

You mean aside from the fact that they are pushing support to upstream vanilla kernel 5.x?

I don’t suggest performance governor. The added performance is negligible, while making a lot more heat and consuming a lot more power.

@doitright ,

Sorry, Not kernel 5.x.

And governor - I don’t think so. I believe performance governer may judges faster response time then normal in condition of ready to supply more power and heatsink.
Actually I need more faster timing control for MIPI-CSI2 cameras, so I adjusted governor.

Plus, you mean performance governor not affects faster response ?

Regards, Raph.

They (rockchip) most certainly are pushing support for 5.x upstream. This is a fact.

And governors… It has nothing to do with believing something. It has to do with facts. And facts are that on demand and other scaling cpu governors can be tuned for a wide variety of performance profiles, including extremely aggressive ramping to full speed that can take as little as a few hundred CPU cycles to complete, along with a high tendency to remain there.

If you think that you can detect a lag of a few hundred CPU cycles at 1 GHz+, then you must be a robot.

Now where it really gets fun is when you are working with poorly or passively cooled devices. These devices, like the rock960, throttle the cpu frequency down in order to keep heat in a safe envelope. If your cpu is cooler to begin with, then you can run it at maximum performance for longer before it throttles. As a consequence, governors like ondemand can actually yield SIGNIFICANTLY HIGHER performance than performance governor that keeps it running hot and possibly perpetually throttled.

Performance is intended for servers and desktops with active cooling.