NixOS on ARM/NanoPC-T4: Difference between revisions
imported>Tmountain No edit summary |
imported>Tmountain No edit summary |
||
Line 36: | Line 36: | ||
== Board Specific Installation Notes == | == Board Specific Installation Notes == | ||
=== Installation onto eMMC === | |||
The NanoPC-T4 reserves space for u-boot at the beginning of its eMMC and/or microSD. As a result, successful image installation relies upon a custom partitioning scheme. | The NanoPC-T4 reserves space for u-boot at the beginning of its eMMC and/or microSD. As a result, successful image installation relies upon a custom partitioning scheme. | ||
Line 53: | Line 52: | ||
Command (m for help): w | Command (m for help): w | ||
Make the filesystem and set the disk label (crucially important) | # Make the filesystem and set the disk label (crucially important) | ||
# mkfs.ext4 /dev/mmcblk2p1 | # mkfs.ext4 /dev/mmcblk2p1 | ||
# tune2fs -L NIXOS_SD /dev/mmcblk2p1 | # tune2fs -L NIXOS_SD /dev/mmcblk2p1 | ||
Line 64: | Line 63: | ||
# dd if=uboot.img of=/dev/mmcblk2 seek=16384 conv=notrunc | # dd if=uboot.img of=/dev/mmcblk2 seek=16384 conv=notrunc | ||
# dd if=trust.bin of=/dev/mmcblk2 seek=24576 conv=notrunc | # dd if=trust.bin of=/dev/mmcblk2 seek=24576 conv=notrunc | ||
</syntaxhighlight> | |||
==== boot and rootfs ==== | |||
The latest linux kernel is working with this board. Instead of building the image yourself you can fetch the latest sd-image from hydra and dd the created images onto the separate partitions. | |||
You can find all the successful builds in [https://hydra.nixos.org/job/nixos/release-18.09-aarch64/nixos.sd_image.aarch64-linux hydra @ nixos:release-18.09-aarch64:nixos.sd_image.aarch64-linux] | |||
<syntaxHighlight lang=bash> | |||
# get the latest link directly from hydra | |||
wget https://hydra.nixos.org/build/89033499/download/1/nixos-sd-image-18.09.2227.ea0820818a7-aarch64-linux.img -O sd.img | |||
udisksctl loop-setup -f sd.img -r | |||
# copy the root filesystem to the partition you created earlier | |||
# mkdir eemc imgroot | |||
# mount /dev/mmcblk2p1 emmc | |||
# mount /dev/loop0p2 imgroot | |||
# cd imgroot | |||
# tar cf - . | (cd ../emmc && tar xvf -) | |||
# cd .. && umount eemc imgroot | |||
</syntaxhighlight> | </syntaxhighlight> |
Revision as of 04:12, 15 January 2021
NanoPC-T4 | |
---|---|
Manufacturer | FriendlyElec |
Architecture | AArch64 |
Bootloader | u-boot with ARM trusted boot and Rockchip Miniloader |
Boot order | official: eMMC |
Maintainer | tmountain |
The NanoPC-T4 is a single board computer built around the Rockchip RK3399 SoC.
Status
The board boots NixOS from eMMC and will also load NixOS via its integrated microSD reader.
The official documentation, which is comprehensive, can be found on the FriendlyElec wiki.
U-Boot for this board is not entirely open, incorporating a binary blob for the tertiary program loader (TPL). Compilation instructions are featured in section 15.7 of the FriendlyElec wiki, and a build target is also provided in upstream u-boot (nanopc-t4-rk3399_defconfig).
Pre-built u-boot images are available here.
Board Specific Installation Notes
Installation onto eMMC
The NanoPC-T4 reserves space for u-boot at the beginning of its eMMC and/or microSD. As a result, successful image installation relies upon a custom partitioning scheme.
# dd if=/dev/zero of=/dev/mmcblk2 bs=1M count=32
# fdisk /dev/mmcblk2
Command (m for help): g
Created a new GPT disklabel (GUID: 2E750097-829F-614C-AD9E-271DA3413E3E).
Command (m for help): n
Partition number (1-128, default 1):
First sector (2048-30535646, default 2048): 32768
Last sector, +/-sectors or +/-size{K,M,G,T,P} (32768-30535646, default 30535646):
Created a new partition 1 of type 'Linux filesystem' and of size 14.6 GiB.
Command (m for help): w
# Make the filesystem and set the disk label (crucially important)
# mkfs.ext4 /dev/mmcblk2p1
# tune2fs -L NIXOS_SD /dev/mmcblk2p1
After partitioning, you can write the u-boot images as follows.
# dd if=idbloader.bin of=/dev/mmcblk2 seek=64 conv=notrunc
# dd if=uboot.img of=/dev/mmcblk2 seek=16384 conv=notrunc
# dd if=trust.bin of=/dev/mmcblk2 seek=24576 conv=notrunc
boot and rootfs
The latest linux kernel is working with this board. Instead of building the image yourself you can fetch the latest sd-image from hydra and dd the created images onto the separate partitions. You can find all the successful builds in hydra @ nixos:release-18.09-aarch64:nixos.sd_image.aarch64-linux
# get the latest link directly from hydra
wget https://hydra.nixos.org/build/89033499/download/1/nixos-sd-image-18.09.2227.ea0820818a7-aarch64-linux.img -O sd.img
udisksctl loop-setup -f sd.img -r
# copy the root filesystem to the partition you created earlier
# mkdir eemc imgroot
# mount /dev/mmcblk2p1 emmc
# mount /dev/loop0p2 imgroot
# cd imgroot
# tar cf - . | (cd ../emmc && tar xvf -)
# cd .. && umount eemc imgroot