NixOS on ARM/PINE64 ROCKPro64: Difference between revisions
imported>Samueldr m ramdisk_addr_r is the right name |
imported>Lopsided98 No edit summary |
||
Line 4: | Line 4: | ||
!colspan="2" class="title"|PINE64 ROCKPro64 | !colspan="2" class="title"|PINE64 ROCKPro64 | ||
|- | |- | ||
|colspan="2"|[[File:ROCKPro64.jpg|frameless|256px|A | |colspan="2"|[[File:ROCKPro64.jpg|frameless|256px|A PINE64 ROCKPro64.]] | ||
|- | |- | ||
!Manufacturer | !Manufacturer | ||
Line 16: | Line 16: | ||
|- | |- | ||
!Boot options | !Boot options | ||
| | |microSD, eMMC, SPI NOR Flash | ||
|} | |} | ||
</div> | </div> | ||
Line 29: | Line 29: | ||
U-Boot for this board is packaged in nixpkgs, and Hydra builds can be found here: https://hydra.nixos.org/job/nixpkgs/trunk/ubootRockPro64.aarch64-linux | U-Boot for this board is packaged in nixpkgs, and Hydra builds can be found here: https://hydra.nixos.org/job/nixpkgs/trunk/ubootRockPro64.aarch64-linux | ||
== Board-specific installation notes == | == Board-specific installation notes == | ||
Line 36: | Line 35: | ||
<syntaxhighlight lang="bash">sudo dd if=idbloader.img of=/dev/mmcblkX bs=512 seek=64</syntaxhighlight> | <syntaxhighlight lang="bash">sudo dd if=idbloader.img of=/dev/mmcblkX bs=512 seek=64</syntaxhighlight> | ||
== Serial console== | == Serial console== | ||
Line 75: | Line 67: | ||
* [https://github.com/ayufan-rock64/linux-kernel ayufan-rock64/linux-kernel] 4.4 based on Rockchip BSP | * [https://github.com/ayufan-rock64/linux-kernel ayufan-rock64/linux-kernel] 4.4 based on Rockchip BSP | ||
* [https://github.com/ayufan-rock64/linux-mainline-kernel 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). {{note|The kernel image built from ayufan-rock64/linux-mainline-kernel is too large to fit into the default memory layout defined in the ROCKPro64 u-boot. This means that, when unpacked, the kernel will overwrite the beginning of the initrd in memory, rendering the initrd unusable and causing the boot to fail. This can be fixed by setting the u-boot environment variable, <code>ramdisk_addr_r</code> to a larger value, either by interrupting u-boot, or by patching the ubootRockPro64 sources to change the default.}} | * [https://github.com/ayufan-rock64/linux-mainline-kernel 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). {{note|The kernel image built from ayufan-rock64/linux-mainline-kernel is too large to fit into the default memory layout defined in the ROCKPro64 u-boot. This means that, when unpacked, the kernel will overwrite the beginning of the initrd in memory, rendering the initrd unusable and causing the boot to fail. This can be fixed by setting the u-boot environment variable, <code>ramdisk_addr_r</code> to a larger value, either by interrupting u-boot, or by patching the ubootRockPro64 sources to change the default.}} | ||
== Custom | == Custom NixOS Installer == | ||
It is possible to build a custom nixos installer image with a downstream kernel that will boot as-is on the rockpro64. | It is possible to build a custom nixos installer image with a downstream kernel that will boot as-is on the rockpro64. |
Revision as of 17:07, 6 December 2019
PINE64 ROCKPro64 | |
---|---|
Manufacturer | PINE64 (Pine Microsystems Inc.) |
Architecture | AArch64 |
Bootloader | Downstream (ayufan) U-Boot[1] |
Boot options | microSD, eMMC, SPI NOR Flash |
The ROCKPro64 is a powerful single board computer built around the Rockchip RK3399 SoC.
There are two models of the board, with 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.
U-Boot for this board is packaged in nixpkgs, and Hydra builds can be found here: https://hydra.nixos.org/job/nixpkgs/trunk/ubootRockPro64.aarch64-linux
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
Serial console
The ROCKPro64 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.
Downstream kernel
Although the mainline kernel contains a device tree for the ROCKPro64, it does not seem to boot correctly as of 4.20. Therefore it is 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).
Custom NixOS Installer
It is possible to build a custom nixos installer image with a downstream kernel that will boot as-is on the rockpro64. For a working example see this repo: nixos-installer-rockpro64
Panfrost GPU Driver
The ROCKPro64's GPU is supported by the open source Panfrost driver. The downstream ayufan-rock64/linux-mainline-kernel is known to work. The mainline kernel may also work, but has not been tested. At the time of writing, support has been added to the required userspace libraries, but the changes have not yet been released. It is therefore necessary to build libdrm, mesa, mesa-glu and kmscube from their respective git sources.