NixOS on ARM
The support level for ARM overall varies depending on the architecture and the specific ecosystems and boards.
The way the ARM integration is built into NixOS is by making generic builds the first-class citizens. This means that as soon as there is upstream support for the board in the kernel and platform firmware, NixOS should work once those are updated.
It is still possible, when needed, to build and use a customized platform firmware and kernel for specific boards[reference needed].
At this moment in time (early 2024) only AArch64 has full support upstream. With that said, neither armv6l or armv7l are being ignored, fixes are worked on and approved as needed. What's missing is support and builds being maintained in binary form. At the time of writing, no publicly available caches for armv6l or armv7l are available.
For images links, including UEFI install, skip to the Installation page.
Supported devices
Table legend:
- SoC - https://en.wikipedia.org/wiki/System_on_a_chip
- ISA - https://en.wikipedia.org/wiki/Instruction_set_architecture
Upstream (NixOS) supported devices
NixOS has support for these boards using AArch64 architecture on the nixpkgs-unstable and stable channel.
Support for those board assumes as much is supported as Mainline Linux supports.
Manufacturer | Board | SoC | ISA | CPU | RAM | Storage |
---|---|---|---|---|---|---|
Raspberry Pi Foundation | Raspberry Pi 3 | Broadcom BCM2837 | AArch64 / ARMv7 | 4× Cortex-A53 @ 1.2 - 1.4 GHz | 1 GB | SD/microSD |
Raspberry Pi Foundation | Raspberry Pi 4 | Broadcom BCM2711 | AArch64 / ARMv7 | 4× Cortex-A72 @ 1.5 - 1.8 GHz | 1-8 GB | microSD, eMMC |
Community supported devices
These boards are not routinely verified as working.
The baseline support level expected is “Just as much as mainline Linux and U-Boot supports them”, except if specified otherwise.
Manufacturer | Board | SoC | ISA | CPU | RAM | Storage |
---|---|---|---|---|---|---|
Apple | Apple Silicon Macs | M1/M1 Pro/M1 Max | AArch64 | — | — | NVMe |
ASUS | Tinker Board | Rockchip RK3288 | ARMv7 | 4× Cortex-A17 | 2 GB | microSD |
Banana Pi | Banana Pi | Allwinner A20 | ARMv7 | 2× Cortex-A7 | 1 GB | SD, SATA |
Banana Pi M64 | Banana Pi M64 | Allwinner A64 | AArch64 | 4× Cortex-A53 | 2 GB | microSD, 8GB eMMc |
Banana Pi BPI-M5 | Banana Pi BPI-M5 | Amlogic S905X3 | AArch64 | 4× Cortex-A55 | 4 GB LPDDR4 | microSD, 16G eMMC |
BeagleBoard.org | BeagleBone Black | TI AM335x (src) | ARMv7 | 1× Cortex-A8 @ 1 GHz | 512 MB | 4 GB eMMC, microSD |
Firefly | AIO-3399C | Rockchip RK3399 | AArch64 | 2× Cortex-A72 @ 2.0 GHz, 4× Cortex-A53 @ 1.5 Ghz | 2/4 GB | 8/16 GB eMMC, microSD |
FriendlyElec | NanoPC-T4 | Rockchip RK3399 | AArch64 | 2× Cortex-A72 @ 2.0 GHz, 4× Cortex-A53 @ 1.5 Ghz | 4 GB | 16 GB eMMC, microSD, NVMe |
FriendlyElec | NanoPi-M4 | Rockchip RK3399 | AArch64 | 2× Cortex-A72 @ 2.0 GHz, 4× Cortex-A53 @ 1.5 Ghz | 4 GB | optional eMMC, microSD |
FriendlyElec | NanoPi-R6C | Rockchip RK3588S | AArch64 | 4× ARM Cortex-A76 @ 2.4 GHz, 4× Cortex-A55 @ 1.8 Ghz | 4 GB / 8 GB | optional eMMC, microSD, NVMe |
Hardkernel | ODROID-HC1 & ODROID-HC2 | Samsung Exynos 5422 | ARMv7 | 4× Cortex-A15 @ 2GHz, 4× Cortex-A7 @ 1.4GHz | 2 GB | microSD |
Hardkernel | ODROID-C2 | Amlogic S905 | AArch64 | 4× Cortex-A53 @ 1.5GHz | 2 GB | eMMC, microSD |
Hardkernel | ODROID-HC4 | Amlogic S905X3 | AArch64 | 4× Cortex-A55 @ 1.8GHz | 4 GB | microSD, SATA |
Kosagi | Kosagi Novena | i.MX6 | ARMv7 | 4× Cortex-A9 @ 1.2 GHz | 4 GB | microSD, SATA |
Libre Computer | ROC-RK3399-PC | Rockchip RK3399 | AArch64 | 2× Cortex-A72 @ 2.0 GHz, 4× Cortex-A53 @ 1.5 Ghz | 4 GB | eMMC, microSD, NVMe |
Libre Computer | ROC-RK3328-CC | Rockchip RK3328 | AArch64 | 4× Cortex-A53 @ 1.4GHz | 4 GB | eMMC, microSD |
Libre Computer | AML-S905X-CC-V2 | Amlogic S905X | AArch64 | 4× Cortex-A53 @ 1.512 GHz | 1/2GB | eMMC, microSD |
Linksprite | pcDuino3 Nano | Allwinner A20 | ARMv7 | 2× Cortex-A7 @ 1 GHz | 1 GB | 4 GB NAND, microSD, SATA |
NVIDIA | Jetson TK1 | Tegra K1/T124 | ARMv7 | 4× Cortex-A15 @ 2.3 GHz | 2 GB | 16 GB eMMC, SD, SATA |
NXP | i.MX 8M Plus EVK | i.MX 8M Plus | AArch64 | 4× Cortex-A53 @ 1.8 Ghz | 6 GB | 32 GB eMMC, microSD |
NXP | i.MX 8M Quad EVK | i.MX 8M Quad | AArch64 | 4× Cortex-A53 @ 1.5 Ghz + 1× Cortex-M4 | 3 GB | 16 GB eMMC, microSD |
OLIMEX | Teres-A64 | AllWinner A64 | AArch64 | 4× Cortex-A53 @ 1.1 GHz | 2GB | 16 GB eMMC, microSD |
Orange Pi | Orange Pi One | Allwinner H3 | ARMv7 | 4× Cortex-A7 @ 1.2 GHz | 512 MB | microSD |
Orange Pi | Orange Pi PC | Allwinner H3 | ARMv7 | 4× Cortex-A7 @ 1.6 GHz | 1 GB | SD/microSD |
Orange Pi | Orange Pi Zero Plus2 (H5) | Allwinner H5 | AArch64 | 4× Cortex-A53 @ 1.2 GHz | 1 GB | SD/microSD + 8GB eMMC |
Orange Pi | Orange Pi Zero2 (H616) | Allwinner H616 | AArch64 | 4× Cortex-A53 @ 1.2 GHz | 1 GB | SD/microSD + 2MB SPI Flash |
Orange Pi | Orange Pi R1 Plus LTS | Rockchip RK3328 | AArch64 | 4× Cortex-A53 @ 1.5 GHz | 1 GB | microSD |
Orange Pi | Orange Pi 5 | Rockchip RK3588s | AArch64 | 4× Cortex-A76 @ 2.4GHz, 4×Cortex-A55 @ 1.8 GHz | 4/8/16 GB | microSD, NVMe |
Orange Pi | Orange Pi 5 Plus | Rockchip RK3588 | AArch64 | 4× Cortex-A76 @ 2.4GHz, 4×Cortex-A55 @ 1.8 GHz | 4/8/16 GB | eMMC, microSD, NVMe |
PINE64 | PINE A64-LTS | Allwinner R18 | AArch64 | 4× Cortex-A53 @ ? GHz | 2 GB | microSD & eMMC |
PINE64 | Pinebook | Allwinner A64 | AArch64 | 4× Cortex-A53 @ ? Ghz | 2 GB | microSD & eMMC |
PINE64 | Pinebook Pro | Rockchip RK3399 | AArch64 | 2× Cortex-A72 @ 2.0 GHz, 4× Cortex-A53 @ 1.5 Ghz | 4 GB | microSD & eMMC |
PINE64 | ROCK64 | Rockchip RK3328 | AArch64 | 4× Cortex-A53 @ 1.5 GHz | 1/2/4 GB | microSD/eMMC |
PINE64 | ROCKPro64 | Rockchip RK3399 | AArch64 | 2× Cortex-A72 @ 2.0 GHz, 4× Cortex-A53 @ 1.5 Ghz | 2/4 GB | microSD/eMMC |
Clockworkpi | uConsole A06 | Rockchip RK3399 | AArch64 | 2× Cortex-A72 @ 2.0 GHz, 4× Cortex-A53 @ 1.5 Ghz | 4 GB | microSD |
Radxa | ROCK 4 | Rockchip RK3399 | AArch64 | 2× Cortex-A72, 4×Cortex-A53 | 2/4 GB | eMMC, microSD, NVMe via expansion board |
Radxa | ROCK5 Model B | Rockchip RK3588 | AArch64 | 4× Cortex-A76 @ 2.4GHz, 4×Cortex-A55 @ 1.8 GHz | 4/8/16 GB | eMMC, microSD, NVMe |
Radxa | ROCK5 Model A | Rockchip RK3588s | AArch64 | 4× Cortex-A76 @ 2.4GHz, 4×Cortex-A55 @ 1.8 GHz | 4/8/16 GB | eMMC, microSD, NVMe |
Raspberry Pi Foundation | Raspberry Pi | Broadcom BCM2835 | ARMv6 | 1 × ARM1176 @ 700 MHz | 256 MB / 512 MB | SD/microSD |
Raspberry Pi Foundation | Raspberry Pi 2 | Broadcom BCM2836 | ARMv7 | 4× Cortex-A7 @ 900 MHz | 1 GB | SD/microSD |
Raspberry Pi Foundation | Raspberry Pi 3 | Broadcom BCM2837 | AArch64 / ARMv7 | 4× Cortex-A53 @ 1.2 GHz | 1 GB | SD/microSD |
Raspberry Pi Foundation | Raspberry Pi 4 | Broadcom BCM2711 | AArch64 / ARMv7 | 4× Cortex-A53 @ 1.5 GHz | 1-8 GB | microSD |
Raspberry Pi Foundation | Raspberry Pi 5 | Broadcom BCM2712 | AArch64 | 4× Cortex-A76 @ 2.4 GHz | 4-8 GB | microSD |
Toshiba | AC100 (mini laptop) | Tegra 2 250 (T20) | ARMv7 | 2× Cortex-A9 @ 1 GHz | 512 MB | 8–32 GB eMMC, SD |
Wandboard | Wandboard Solo/Dual/Quad | Freescale i.MX6 | ARMv7 | 1×/2×/4× Cortex-A9 @ 1000 MHz | 512 MB / 1 GB / 2 GB | microSD, SATA |
Special Devices
It is possible to emulate an ARM platform with QEMU.
Manufacturer | Board | SoC | ISA | CPU | RAM | Storage |
---|---|---|---|---|---|---|
QEMU | QEMU | — | ARMv7 | up to 8 | up to 2 GB | Anything QEMU supports |
Installation
Initial configuration
Troubleshooting
Hanging at Starting kernel ...
When booting a NixOS system, it may look like it is hung at Starting kernel ...
.
It is unlikely to be hung at this part. This is the last message printed by U-Boot. U-Boot prints to both the display and the console at once.
To view the kernel messages and boot output, the “stdout
” of the kernel needs to be configured appropriately.
The kernel's stdout
will differ depending on semantics.
- When there are no valid
console=
kernel command-line arguments, it will default to the/chosen/stdout-path
device tree property. (Generally a serial console.) - When valid
console=
parameters are present, the kernel picks the leftmost valid one asstdout
.
In other words, the solution may be to enable the appropriate console=
parameters according to your hardware configuration and system.
- For the display, add
console=tty0
. - For a serial console, refer to the target device configuration.
Details about the boot process
NixOS can also be booted through UEFI on ARM. The semantics are generally the same as on other architectures. Do note that the common use of Device Tree instead of ACPI in consumer-class hardware may make this a bit more awkward.
Otherwise, in SBC-class hardware, it is common that boards are generally expected to use U-Boot as the platform firmware and bootloader. See the section about using NixOS with U-Boot.
Binary caches
AArch64
The official NixOS Hydra instance builds a full set of binaries (available on https://cache.nixos.org) for the AArch64 architecture on the nixpkgs-unstable and stable channels.
armv6l and armv7l
Some users have provided best effort caches in the past for 32 bit ARM, but none are currently available.
Getting Support
There is a dedicated room for the upstream NixOS effort on Matrix, #nixos-on-arm:nixos.org.
Don't hesitate to ask questions. Note that reply times may vary greatly, depending on the provided information.
Resources
See also
- U-Boot, as it is often paired with SBC-class hardware.
- Mobile NixOS, which provides enhanced semantic around some non-standard boot semantics.
Subpages
The following is a list of all sub-pages of the NixOS on ARM topic.
- Adding support for new boards
- Allwinner/GPT Installation
- Apple Silicon Macs
- ASUS Tinker Board
- Banana Pi
- Banana Pi BPI-M5
- Banana Pi M64
- BeagleBone Black
- Building Images
- Clockworkpi A06 uConsole
- en
- Firefly AIO-3399C
- fr
- Initial Configuration
- Installation
- Jetson TK1
- Kosagi Novena
- Libre Computer AML-S905X-CC-V2
- Libre Computer ROC-RK3328-CC
- Libre Computer ROC-RK3399-PC
- LS1046A
- NanoPC-T4
- NanoPi-R6C
- ODROID-C2
- ODROID-HC1
- ODROID-HC4
- OLIMEX Teres-A64
- Orange Pi 5
- Orange Pi 5 Plus
- Orange Pi One
- Orange Pi PC
- Orange Pi Zero2 H616
- Orange Pi Zero Plus2 H5
- PcDuino3 Nano
- PINE64 Pinebook
- PINE64 Pinebook Pro
- PINE64 ROCK64
- PINE64 ROCKPro64
- PINE A64-LTS
- QEMU
- Radxa ROCK 4
- Radxa ROCK5 Model A
- Radxa ROCK5 Model B
- Raspberry Pi
- Raspberry Pi 3
- Raspberry Pi 4
- Raspberry Pi 5
- ru
- Scaleway C1
- Toshiba AC100
- UEFI
- UEFI/en
- UEFI/fr
- UEFI/ru
- Wandboard