NixOS on ARM/Orange Pi One
The Orange Pi One is an Xunlong SoC based on the Allwinner H3. As the board is on the market for quite some time and the device is relatively cheap, the community effort resulted in a better than average mainline support with the current kernel (5.0). Refer to the H3 column in the SunXI Mainline Status Matrix.
Orange Pi One | |
---|---|
Manufacturer | Xunlong / Orange Pi |
Architecture | ARMv7 |
Bootloader | Upstream u-boot |
Maintainer | makefu |
URL | Sunxi Wiki |
Status
@dezgeg's porting efforts to ARMv7 works on the Orange Pi One, using the proper upstream u-boot.
Even though the upstream uboot does support the Orange Pi One, it is not part of nixpkgs. However with the new cross-compiler toolchain added with nixpkgs-18.09 it is straight forward to build the bootloader yourself.
Board-specific installation notes
First follow the generic installation steps to get the installer image on an SD card.
U-Boot needs to be copied to specific sectors on the microSD card with dd
. At first, build the u-boot for the device, then copy it to the correct location with (again, replace /dev/sdX
with the correct path to the SD card device):
nix-build -E 'let plat = ((import <nixpkgs> ){}).pkgsCross.armv7l-hf-multiplatform; in plat.buildUBoot{defconfig = "orangepi_one_defconfig"; extraMeta.platforms = ["armv7l-linux"]; filesToInstall = ["u-boot-sunxi-with-spl.bin"];}'
sudo dd if=result/uboot-orangepi_pc_defconfig-2017.11.nixpkgs.*.u-boot-sunxi-with-spl.bin of=/dev/sdX bs=1024 seek=8
Then, install using the installation and configuration steps.
Serial console
Your configuration.nix will need to add console=ttyS0,115200n8
to the boot.kernelParams
configuration to use the serial console.
/etc/nixos/configuration.nix
{ config, pkgs, lib, ... }:
{
boot.kernelParams = [
"console=ttyS0,115200n8"
];
}
Compatibility notes
- Ethernet works with 4.19 kernel
- HDMI should work since kernel 4.17 (untested)