NixOS on ARM/PINE64 ROCK64: Difference between revisions
imported>Kreyren Updated the build result |
imported>Mirrexagon Add note about memory corruption on some v2 boards. |
||
Line 43: | Line 43: | ||
-r--r--r-- 2 root root 789504 Jan 1 1970 u-boot.itb | -r--r--r-- 2 root root 789504 Jan 1 1970 u-boot.itb | ||
</syntaxHighlight> | </syntaxHighlight> | ||
{{note|There is known memory corruption on some ROCK64 v2 boards using both upstream TPL and Rockchip's 786 MHz proprietary blob. The solution is to use the proprietary 333 or 400 MHz blob instead. See discussion here: https://github.com/NixOS/nixpkgs/pull/145506#issuecomment-974985012}} | |||
== Board-specific installation notes == | == Board-specific installation notes == |
Revision as of 04:50, 27 November 2021
PINE64 ROCK64 | |
---|---|
Manufacturer | PINE64 (Pine Microsystems Inc.) |
Architecture | AArch64 |
Bootloader | Upstream U-Boot |
Boot options | microSD, 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). If your have nix installed you can download the latest version with (This command also works on different architectures since it can be downloaded from the binary cache):
$ nix-build '<nixpkgs>' -A ubootRock64 --argstr system aarch64-linux
$ ls -la result
-r--r--r-- 2 root root 107683 Jan 1 1970 idbloader.img
dr-xr-xr-x 1 root root 40 Jan 1 1970 nix-support
-r--r--r-- 2 root root 789504 Jan 1 1970 u-boot.itb
Board-specific installation notes
U-Boot needs to be copied to specific sectors on the microSD card, eMMC or image with dd
.
You can use nixos-aarch64-images to get an rock64 compatible disk image or running the commands manually.
Download/build U-Boot for the board, and write idbloader.img
and u-boot.itb
.
Replace in the command below /dev/mmcblkX
with the correct device to the sdcard i.e. /dev/mmcblk0
. You can use the lsblk
command to get a list of all devices:
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
This will make the first partition of the installation device unmountable and it can be deleted, but the space needs to be kept to not overwrite the bootloader with another filesystem.
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 | Video works, Sound does not | Works | - |
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).
Mic92 has packaged the mainline kernel in his NUR packages repository:
boot.kernelPackages = pkgs.nur.repos.mic92.linuxPackages_ayufan;
This provides sound over HDMI, which the default kernel does not.
Video decoding
MPV has support for the rockchip hardware decoder, it is used by default when playing a file.
Without this decoder videos will likely stutter during playing.
To use his for example in kodi, add the following configuration in .kodi/userdata/playercorefactory.xml
<playercorefactory>
<players>
<player name="MPV" type="ExternalPlayer" audio="false" video="true">
<filename>mpv</filename>
<args>--fs=yes "{1}"</args>
<hidexbmc>true</hidexbmc>
</player>
</players>
<rules action="prepend">
<rule video="true" player="MPV"/>
</rules>
</playercorefactory>
When using kodi it is also recommend to use kodi-wayland rather than the x11 variant to reduce the CPU usage. Mic92 has an example configuration.