NixOS on ARM/Banana Pi

From NixOS Wiki

Building U-Boot

$ git clone git://
$ cd u-boot
$ nix-shell -p ubootTools gcc-arm-embedded dtc flex bison swig 'python311.withPackages(ps: with ps; [ setuptools ])' openssl
$ make -j4 ARCH=arm CROSS_COMPILE=arm-none-eabi- Bananapi_defconfig 
$ make -j4 ARCH=arm CROSS_COMPILE=arm-none-eabi-

Board-specific installation notes

First follow the generic installation steps to get the installer image.

U-Boot needs to be copied to specific sectors on the microSD card with dd:

sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/sdX bs=1024 seek=8

Then, install using the installation and configuration steps.

SATA Port multiplier (PMP)

It used to be necessary to make some changes to the kernel source and recompile, but on recent linux versions (including the one shipped with the NixOS arm image) this is no longer necessary. Instead, all that is required is merely to set

boot.kernelParams = ["ahci_sunxi.enable_pmp=1"]

in configuration.nix. Note that this will prevent the use of a hard drive connected to the SATA port directly without a port multiplier in between.

See here for more details.