NixOS on ARM/PINE64 ROCK64
PINE64 ROCK64 | |
---|---|
Manufacturer | PINE64 (Pine Microsystems Inc.) |
Architecture | AArch64 |
Bootloader | Downstream (ayufan) U-Boot[1] |
Boot options | SD, eMMC, SPI NOR Flash |
The ROCK64 is a single board computer built around the Rockchip RK3328 SoC.
There are three models of the board, with 1, 2 or 4 GB of RAM. It can boot from an microSD card or an eMMC. It also has a 128 Mbit SPI flash that can be used to store the bootloader.
Status
It is possible to run NixOS on this board using a downstream U-Boot and kernel. This can be done with manual partitioning and nixos-install
or possibly by building an SD image with the correct kernel and bootloader, but the latter has not been tested.
The upstream aarch64 SD image may boot if U-Boot is placed at the correct location as described below, but this has not been tested. There may be issues with ethernet and USB with the mainline kernel.
U-Boot for this board is packaged in nixpkgs, and Hydra builds can be found here: https://hydra.nixos.org/job/nixpkgs/trunk/ubootRock64.aarch64-linux This bootloader is not entirely open, incorporating a blob for the tertiary program loader (TPL).
Board-specific installation notes
U-Boot needs to be copied to sector 64 on the microSD card or eMMC with dd
. Download/build U-Boot for the board, and copy idbloader.img
to the correct location with (replace /dev/mmcblkX
with the correct path to the SD card device):
sudo dd if=idbloader.img of=/dev/mmcblkX bs=512 seek=64
On many kernels, the ethernet driver cannot handle hardware check-summing of large packets, therefore this feature must be disabled for the ethernet to be stable. This can be done with the following NixOS configuration:
networking.localCommands = ''
${pkgs.ethtool}/bin/ethtool -K eth0 rx off tx off
'';
Serial console
The ROCK64 uses a GPIO pinout compatible with the Raspberry Pi 2 and newer. This means that the following pins can be used to connect a serial adapter:
Pi-2 Bus | |
---|---|
Pin | Function |
6 | GND |
8 | UART0_TX |
10 | UART0_RX |
The serial console runs at 1500000 baud in the bootloader.
Compatibility notes
Mainline kernel | |
---|---|
Ethernet |
|
USB |
|
ayufan-rock64/linux-mainline-kernel | |
Ethernet |
|
USB |
|
Downstream kernel
To use all hardware functionality, it is currently necessary to use a downstream kernel:
- ayufan-rock64/linux-kernel 4.4 based on Rockchip BSP
- ayufan-rock64/linux-mainline-kernel mainline based, with potentially fewer hardware features supported. This kernel is not based on a kernel stable branch, so it may have more bugs (unrelated to the hardware).