NixOS on ARM/PINE64 ROCK64: Difference between revisions

From NixOS Wiki
imported>Lopsided98
Update to account for upstream U-Boot
imported>Lopsided98
No edit summary
Line 13: Line 13:
|-
|-
!Bootloader
!Bootloader
|Downstream (ayufan) U-Boot<ref>https://github.com/ayufan-rock64/linux-u-boot</ref>
| Upstream U-Boot
|-
|-
!Boot options
!Boot options

Revision as of 04:48, 6 December 2019

PINE64 ROCK64
A PINE A64-LTS with eMMC.
Manufacturer PINE64 (Pine Microsystems Inc.)
Architecture AArch64
Bootloader Upstream U-Boot
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

This board has upstream U-Boot and kernel support, although the mainline kernel may still be missing some features. NixOS can be installed using manual partitioning and nixos-install or by modifying the aarch64 installation image as described in the next section.

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 binary blob for the tertiary program loader (TPL).

Board-specific installation notes

U-Boot needs to be copied to specific sectors on the microSD card, eMMC or image with dd. Download/build U-Boot for the board, and write idbloader.img and u-boot.itb to the correct locations with (replace /dev/mmcblkX with the correct path to the card or image):

dd if=idbloader.img of=/dev/mmcblkX conv=fsync,notrunc bs=512 seek=64
dd if=u-boot.itb of=/dev/mmcblkX conv=fsync,notrunc bs=512 seek=16384
Note: Prior to NixOS 20.03, a downstream version of U-Boot 2017.09 was packaged, which placed U-Boot in a single idbloader.img file. If that version is used, simply disregard the second command above.

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. When using the standard NixOS aarch64 sd image, set console=ttyS2,115200n8 as kernel option in extlinux/extlinux.conf on the boot partition of the sdimage to get a serial linux console. For debugging, console=uart8250,mmio32,0xff130000 should give you an early UART console, before the full serial console is up.

Compatibility notes

Mainline kernel ayufan-rock64/linux-mainline-kernel
Ethernet Works Works
USB As of 5.4, USB 3.0 does not work Works
HDMI Works Works

Downstream kernel

To use all hardware functionality, it is currently necessary to use a downstream kernel:

Note: The old vendor U-Boot 2017.09 did not leave enough room between the kernel and initrd, causing recent kernels to overwrite the beginning of the initrd. This can be fixed by increasing ramdisk_addr_r in the U-Boot console, or using upstream U-Boot.

Resources