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 PINE A64-LTS with eMMC.]]
|colspan="2"|[[File:ROCKPro64.jpg|frameless|256px|A PINE64 ROCKPro64.]]
|-
|-
!Manufacturer
!Manufacturer
Line 16: Line 16:
|-
|-
!Boot options
!Boot options
|SD, eMMC, SPI NOR Flash
|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
This bootloader is not entirely open, incorporating blobs for the tertiary program loader (TPL) and ARM trusted firmware (ATF).


== 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>
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:
<syntaxhighlight lang="nix">
networking.localCommands = ''
  ${pkgs.ethtool}/bin/ethtool -K eth0 rx off tx off
'';
</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.}}
{{note|Keep in mind that using non-upstream forks of the kernel always incurs some security risk.}}


== Custom Nixos Installer ==
== 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.