NixOS on ARM: Difference between revisions
imported>Fadenb m syntaxhighlight fixes |
JamieMagee (talk | contribs) Update Raspberry Pi entries |
||
| (290 intermediate revisions by 88 users not shown) | |||
| Line 1: | Line 1: | ||
= | <languages/> | ||
<translate> | |||
<!--T:1--> | |||
<div style="font-size: 1.5rem; text-align: center;padding-bottom: 0.5rem;"><strong>NixOS supports 64-bit ARM.</strong></div> | |||
<!--T:2--> | |||
The support level for ARM overall varies depending on the architecture and the specific ecosystems and boards. | |||
<!--T:3--> | |||
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. | |||
<!--T:4--> | |||
It is still possible, when needed, to build and use a customized platform firmware and kernel for specific boards<sup>[[Talk:NixOS_on_ARM#NixOS_.22support.22_for_board-specific_kernels_or_bootloaders|[reference needed]]]</sup>. | |||
<!--T:5--> | |||
AArch64 has an official binary cache on stable and unstable NixOS channels. ARMv6 and ARMv7 remain available in Nixpkgs, but NixOS does not currently publish binary caches for them. | |||
<!--T:6--> | |||
'''For images links, including UEFI install''', skip to the [[NixOS_on_ARM/Installation|Installation page]]. | |||
{| | == Supported devices == <!--T:7--> | ||
<!--T:8--> | |||
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 === <!--T:9--> | |||
<!--T:10--> | |||
NixOS supports Raspberry Pi 3 and Raspberry Pi 4 on stable and unstable AArch64 channels. Raspberry Pi 5 requires <code>nixos-unstable</code>. | |||
<!--T:11--> | |||
On each board, NixOS supports only the hardware covered by the configured Linux kernel, platform firmware, and bootloader. | |||
<!-- | |||
Order for the device table is: | |||
* By manufacturer name, alphabetical. | |||
* By release date, chronological (older first). | |||
--> | |||
<div class="table"> | |||
{|class="table" | |||
!width="2%"| Manufacturer | |||
!width="2%"| Board | |||
!width="2%"| SoC | |||
!width="1%"| ISA | |||
!width="2%"| CPU | |||
!width="1%"| RAM | |||
!width="2%"| Storage | |||
|- | |||
| Raspberry Pi Ltd | |||
| [[NixOS_on_ARM/Raspberry_Pi_3|Raspberry Pi 3]] | |||
| Broadcom BCM2837 | |||
| AArch64 | |||
| 4× Cortex-A53 @ 1.2 to 1.4 GHz | |||
| 512 MB to 1 GB | |||
| microSD, eMMC | |||
|- | |||
| Raspberry Pi Ltd | |||
| [[NixOS_on_ARM/Raspberry_Pi_4|Raspberry Pi 4]] | |||
| Broadcom BCM2711 | |||
| AArch64 | |||
| 4× Cortex-A72 @ 1.5 to 1.8 GHz | |||
| 1 to 8 GB | |||
| microSD, eMMC | |||
|- | |||
| Raspberry Pi Ltd | |||
| [[NixOS_on_ARM/Raspberry_Pi_5|Raspberry Pi 5]] (<code>nixos-unstable</code> only) | |||
| Broadcom BCM2712 | |||
| AArch64 | |||
| 4× Cortex-A76 @ 2.4 GHz | |||
| 1 to 16 GB | |||
| microSD; eMMC on CM5; NVMe for the root filesystem after Linux starts | |||
|} | |||
</div> | |||
=== Community supported devices === | |||
<!--T:12--> | |||
These boards are not routinely verified as working. | |||
<!--T:13--> | |||
The baseline support level expected is “Just as much as mainline Linux and U-Boot supports them”, except if specified otherwise. | |||
<!-- | |||
Order for the device table is: | |||
* By manufacturer name, alphabetical. | |||
* By release date, chronological (older first). | |||
--> | |||
<div class="table"> | |||
{| class="sortable table" | |||
!width="2%"| Manufacturer | !width="2%"| Manufacturer | ||
!width="2%"| Board | !width="2%"| Board | ||
!width="2%"| SoC | !width="2%"| SoC | ||
!width=" | !width="1%"| ISA | ||
!width="2%"| CPU | !width="2%"| CPU | ||
!width="2%"| RAM | !width="2%"| RAM | ||
!width="2%"| Storage | !width="2%"| Storage | ||
|- | |||
| Apple | |||
| [[NixOS_on_ARM/Apple Silicon Macs|Apple Silicon Macs]] | |||
| M1/M1 Pro/M1 Max | |||
| AArch64 | |||
| — | |||
| — | |||
| NVMe | |||
|- | |||
| ASUS | |||
| [[NixOS_on_ARM/ASUS Tinker Board|Tinker Board]] | |||
| Rockchip RK3288 | |||
| ARMv7 | |||
| 4× Cortex-A17 | |||
| 2 GB | |||
| microSD | |||
|- | |||
| Banana Pi | |||
| [[NixOS_on_ARM/Banana Pi|Banana Pi]] | |||
| Allwinner A20 | |||
| ARMv7 | |||
| 2× Cortex-A7 | |||
| 1 GB | |||
| SD, SATA | |||
|- | |||
| Banana Pi M64 | |||
| [[NixOS_on_ARM/Banana Pi M64|Banana Pi M64]] | |||
| Allwinner A64 | |||
| AArch64 | |||
| 4× Cortex-A53 | |||
| 2 GB | |||
| microSD, 8GB eMMc | |||
|- | |||
| Banana Pi BPI-M5 | |||
| [[NixOS_on_ARM/Banana Pi BPI-M5|Banana Pi BPI-M5]] | |||
| Amlogic S905X3 | |||
| AArch64 | |||
| 4× Cortex-A55 | |||
| 4 GB LPDDR4 | |||
| microSD, 16G eMMC | |||
|- | |||
| BeagleBoard.org | |||
| [[NixOS_on_ARM/BeagleBone_Black|BeagleBone Black]] | |||
| TI AM335x [https://git.beagleboard.org/beagleboard/beaglebone-black (src)] | |||
| ARMv7 | |||
| 1× Cortex-A8 @ 1 GHz | |||
| 512 MB | |||
| 4 GB eMMC, microSD | |||
|- | |||
| Firefly | |||
| [[NixOS_on_ARM/Firefly_AIO-3399C|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 | |||
| [[NixOS_on_ARM/NanoPC-T4|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 | |||
| [[NixOS_on_ARM/NanoPi-M4|NanoPi-M4]] | |||
| Rockchip RK3399 | |||
| AArch64 | |||
| 2× Cortex-A72 @ 2.0 GHz, 4× Cortex-A53 @ 1.5 Ghz | |||
| 4 GB | |||
| optional eMMC, microSD | |||
|- | |||
| FriendlyElec | |||
| [[NixOS_on_ARM/NanoPi-R6C|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 | |||
| [[NixOS_on_ARM/ODROID-HC1|ODROID-HC1 & ODROID-HC2]] | |||
| Samsung Exynos 5422 | |||
| ARMv7 | |||
| 4× Cortex-A15 @ 2GHz, 4× Cortex-A7 @ 1.4GHz | |||
| 2 GB | |||
| microSD | |||
|- | |||
| Hardkernel | |||
| [[NixOS_on_ARM/ODROID-C2|ODROID-C2]] | |||
| Amlogic S905 | |||
| AArch64 | |||
| 4× Cortex-A53 @ 1.5GHz | |||
| 2 GB | |||
| eMMC, microSD | |||
|- | |||
| Hardkernel | |||
| [[NixOS_on_ARM/ODROID-HC4|ODROID-HC4]] | |||
| Amlogic S905X3 | |||
| AArch64 | |||
| 4× Cortex-A55 @ 1.8GHz | |||
| 4 GB | |||
| microSD, SATA | |||
|- | |||
|Kosagi | |||
|[[NixOS on ARM/Kosagi Novena|Kosagi Novena]] | |||
|i.MX6 | |||
|ARMv7 | |||
|4× Cortex-A9 @ 1.2 GHz | |||
|4 GB | |||
|microSD, SATA | |||
|- | |||
| Libre Computer | |||
| [[NixOS_on_ARM/Libre_Computer_ROC-RK3399-PC|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 | |||
| [[NixOS_on_ARM/Libre_Computer_ROC-RK3328-CC|ROC-RK3328-CC]] | |||
| Rockchip RK3328 | |||
| AArch64 | |||
| 4× Cortex-A53 @ 1.4GHz | |||
| 4 GB | |||
| eMMC, microSD | |||
|- | |||
| Libre Computer | |||
| [[NixOS_on_ARM/Libre_Computer_AML-S905X-CC-V2|AML-S905X-CC-V2]] | |||
| Amlogic S905X | |||
| AArch64 | |||
| 4× Cortex-A53 @ 1.512 GHz | |||
| 1/2GB | |||
| eMMC, microSD | |||
|- | |||
| Linksprite | |||
| [[NixOS_on_ARM/PcDuino3_Nano|pcDuino3 Nano]] | |||
| Allwinner A20 | |||
| ARMv7 | |||
| 2× Cortex-A7 @ 1 GHz | |||
| 1 GB | |||
| 4 GB NAND, microSD, SATA | |||
|- | |- | ||
| NVIDIA | | NVIDIA | ||
| Jetson TK1 | | [[NixOS_on_ARM/Jetson TK1|Jetson TK1]] | ||
| Tegra K1/T124 | | Tegra K1/T124 | ||
| ARMv7 | | ARMv7 | ||
| | | 4× Cortex-A15 @ 2.3 GHz | ||
| | | 2 GB | ||
| | | 16 GB eMMC, SD, SATA | ||
|- | |||
| NXP | |||
| [https://github.com/NiklasGollenstede/nixos-imx/ i.MX 8M Plus EVK] | |||
| i.MX 8M Plus | |||
| AArch64 | |||
| 4× Cortex-A53 @ 1.8 Ghz | |||
| 6 GB | |||
| 32 GB eMMC, microSD | |||
|- | |||
| NXP | |||
| [https://github.com/gangaram-tii/nixos-imx8mq/ 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 | |||
| [[NixOS_on_ARM/OLIMEX_Teres-A64|Teres-A64]] | |||
| AllWinner A64 | |||
| AArch64 | |||
| 4× Cortex-A53 @ 1.1 GHz | |||
| 2GB | |||
| 16 GB eMMC, microSD | |||
|- | |||
| Orange Pi | |||
| [[NixOS_on_ARM/Orange_Pi_One|Orange Pi One]] | |||
| Allwinner H3 | |||
| ARMv7 | |||
| 4× Cortex-A7 @ 1.2 GHz | |||
| 512 MB | |||
| microSD | |||
|- | |- | ||
| | | Orange Pi | ||
| | | [[NixOS_on_ARM/Orange_Pi_PC|Orange Pi PC]] | ||
| | | Allwinner H3 | ||
| ARMv7 | | ARMv7 | ||
| | | 4× Cortex-A7 @ 1.6 GHz | ||
| 1 GB | |||
| SD/microSD | |||
|- | |||
| Orange Pi | |||
| [[NixOS_on_ARM/Orange_Pi_Zero_Plus2_H5|Orange Pi Zero Plus2 (H5)]] | |||
| Allwinner H5 | |||
| AArch64 | |||
| 4× Cortex-A53 @ 1.2 GHz | |||
| 1 GB | |||
| SD/microSD + 8GB eMMC | |||
|- | |||
| Orange Pi | |||
| [[NixOS_on_ARM/Orange_Pi_Zero2_H616|Orange Pi Zero2 (H616)]] | |||
| Allwinner H616 | |||
| AArch64 | |||
| 4× Cortex-A53 @ 1.2 GHz | |||
| 1 GB | |||
| SD/microSD + 2MB SPI Flash | |||
|- | |||
| Orange Pi | |||
| [[NixOS_on_ARM/Orange_Pi_R1_Plus_LTS|Orange Pi R1 Plus LTS]] | |||
| Rockchip RK3328 | |||
| AArch64 | |||
| 4× Cortex-A53 @ 1.5 GHz | |||
| 1 GB | | 1 GB | ||
| 4 GB | | microSD | ||
|- | |||
| Orange Pi | |||
| [[NixOS_on_ARM/Orange_Pi_5|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 | |||
| [[NixOS_on_ARM/Orange_Pi_5_Plus|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 | |||
|- | |||
|Orange Pi | |||
|[[Orange Pi 6 Plus]] | |||
|CIX CD8180/CD8160 (Sky1) | |||
|AArch64 | |||
|12-core 64-bit processor | |||
|16/32/64 GB | |||
|microSD, 2× NVMe, 8MB SPI Flash | |||
|- | |||
| PINE64 | |||
| [[NixOS_on_ARM/PINE A64-LTS|PINE A64-LTS]] | |||
| Allwinner R18 | |||
| AArch64 | |||
| 4× Cortex-A53 @ ? GHz | |||
| 2 GB | |||
| microSD & eMMC | |||
|- | |- | ||
| Raspberry Pi | | PINE64 | ||
| Raspberry Pi | | [[NixOS_on_ARM/PINE64_Pinebook|Pinebook]] | ||
| BCM2835 | | Allwinner A64 | ||
| AArch64 | |||
| 4× Cortex-A53 @ ? Ghz | |||
| 2 GB | |||
| microSD & eMMC | |||
|- | |||
| PINE64 | |||
| [[NixOS_on_ARM/PINE64_Pinebook_Pro|Pinebook Pro]] | |||
| Rockchip RK3399 | |||
| AArch64 | |||
| 2× Cortex-A72 @ 2.0 GHz, 4× Cortex-A53 @ 1.5 Ghz | |||
| 4 GB | |||
| microSD & eMMC | |||
|- | |||
| PINE64 | |||
| [[NixOS_on_ARM/PINE64_ROCK64|ROCK64]] | |||
| Rockchip RK3328 | |||
| AArch64 | |||
| 4× Cortex-A53 @ 1.5 GHz | |||
| 1/2/4 GB | |||
| microSD/eMMC | |||
|- | |||
| PINE64 | |||
| [[NixOS_on_ARM/PINE64_ROCKPro64|ROCKPro64]] | |||
| Rockchip RK3399 | |||
| AArch64 | |||
| 2× Cortex-A72 @ 2.0 GHz, 4× Cortex-A53 @ 1.5 Ghz | |||
| 2/4 GB | |||
| microSD/eMMC | |||
|- | |||
| Clockworkpi | |||
| [[NixOS_on_ARM/Clockworkpi_A06_uConsole|uConsole A06]] | |||
| Rockchip RK3399 | |||
| AArch64 | |||
| 2× Cortex-A72 @ 2.0 GHz, 4× Cortex-A53 @ 1.5 Ghz | |||
| 4 GB | |||
| microSD | |||
|- | |||
| Radxa | |||
| [[NixOS on ARM/Radxa ROCK 4|ROCK 4]] | |||
| Rockchip RK3399 | |||
| AArch64 | |||
| 2× Cortex-A72, 4×Cortex-A53 | |||
| 2/4 GB | |||
| eMMC, microSD, NVMe via expansion board | |||
|- | |||
|Radxa | |||
|[[NixOS on ARM/Radxa ROCK 5 ITX|ROCK 5 ITX]] | |||
|Rockchip RK3588 | |||
|AArch64 | |||
|4× Cortex-A76 @ 2.4GHz, 4×Cortex-A55 @ 1.8 GHz | |||
|4/8/16/32 GB | |||
|eMMC, microSD, NVMe, SATA | |||
|- | |||
| Radxa | |||
| [[NixOS on ARM/Radxa ROCK5 Model B|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 | |||
| [[NixOS on ARM/Radxa ROCK5 Model A|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 Ltd | |||
| [[NixOS_on_ARM/Raspberry_Pi|Raspberry Pi]] | |||
| Broadcom BCM2835 | |||
| ARMv6 | | ARMv6 | ||
| | | 1 × ARM1176 @ 700 MHz | ||
| | | 256 MB / 512 MB | ||
| SD/microSD | |||
|- | |||
| Raspberry Pi Ltd | |||
| [[NixOS_on_ARM/Raspberry_Pi|Raspberry Pi 2]] | |||
| Broadcom BCM2836 | |||
| ARMv7 | |||
| 4× Cortex-A7 @ 900 MHz | |||
| 1 GB | |||
| SD/microSD | | SD/microSD | ||
|- | |||
| Toshiba | |||
| [[NixOS_on_ARM/Toshiba AC100|AC100 (mini laptop)]] | |||
| Tegra 2 250 (T20) | |||
| ARMv7 | |||
| 2× Cortex-A9 @ 1 GHz | |||
| 512 MB | |||
| 8–32 GB eMMC, SD | |||
|- | |||
| Wandboard | |||
| [[NixOS_on_ARM/Wandboard|Wandboard Solo/Dual/Quad]] | |||
| Freescale i.MX6 | |||
| ARMv7 | |||
| 1×/2×/4× Cortex-A9 @ 1000 MHz | |||
| 512 MB / 1 GB / 2 GB | |||
| microSD, SATA | |||
|} | |} | ||
</div> | |||
==== Special Devices ==== <!--T:14--> | |||
<!--T:15--> | |||
It is possible to emulate an ARM platform with QEMU. | |||
<!--T:16--> | |||
<div class="table"> | |||
{|class="table" | |||
!width="2%"| Manufacturer | |||
< | !width="2%"| Board | ||
!width="2%"| SoC | |||
!width="2%"| ISA | |||
== | !width="2%"| CPU | ||
!width="2%"| RAM | |||
!width="2%"| Storage | |||
|- | |||
| QEMU | |||
| [[NixOS_on_ARM/QEMU|QEMU]] | |||
| — | |||
| ARMv7 | |||
| up to 8 | |||
| up to 2 GB | |||
| Anything QEMU supports | |||
|} | |||
</div> | |||
== Installation == <!--T:17--> | |||
<!--T:18--> | |||
{{main|NixOS_on_ARM/Installation}} | |||
=== | == Initial configuration == <!--T:19--> | ||
<!--T:20--> | |||
{{main|NixOS_on_ARM/Initial_Configuration}} | |||
< | == Troubleshooting == <!--T:21--> | ||
< | <!--T:22--> | ||
=== Hanging at <code>Starting kernel ...</code> === | |||
When booting a NixOS system, it may look like it is hung at <code>Starting kernel ...</code>. | |||
<!--T:23--> | |||
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. | |||
<!--T:24--> | |||
To view the kernel messages and boot output, the “<code>stdout</code>” of the kernel needs to be configured appropriately. | |||
<!--T:25--> | |||
The kernel's <code>stdout</code> will differ depending on semantics. | |||
< | <!--T:26--> | ||
* When there are no valid <code>console=</code> kernel command-line arguments, it will default to the <code>/chosen/stdout-path</code> device tree property. (Generally a serial console.) | |||
* When valid <code>console=</code> parameters are present, the kernel picks the leftmost valid one as <code>stdout</code>. | |||
<!--T:27--> | |||
In other words, the solution may be to enable the appropriate <code>console=</code> parameters according to your hardware configuration and system. | |||
< | <!--T:28--> | ||
* For the display, add <code>console=tty0</code>. | |||
* For a serial console, refer to the target device configuration. | |||
=== Details about the boot process === <!--T:29--> | |||
<!--T:30--> | |||
NixOS can also be booted through [[NixOS on ARM/UEFI|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 [[NixOS_on_ARM/UEFI#Device_Trees|''may'' make this a bit more awkward]]. | |||
<!--T:31--> | |||
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 [[U-Boot#Using NixOS with U-Boot|using NixOS with U-Boot]]. | |||
== Binary caches == <!--T:32--> | |||
=== | === AArch64 === <!--T:33--> | ||
<!--T:34--> | |||
The [https://hydra.nixos.org/ 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 === <!--T:35--> | ||
<!--T:36--> | |||
Some '''''users''''' have provided best effort caches in the past for 32 bit ARM, but none are currently available. | |||
=== | == Getting Support == <!--T:37--> | ||
<!--T:38--> | |||
There is a dedicated room for the upstream NixOS effort on Matrix, | |||
[https://matrix.to/#/#nixos-on-arm:nixos.org #nixos-on-arm:nixos.org]. | |||
<!--T:39--> | |||
Don't hesitate to ask questions. Note that reply times may vary greatly, depending on the provided information. | |||
== Resources == <!--T:40--> | |||
=== See also === <!--T:41--> | |||
* | <!--T:42--> | ||
* | * [[U-Boot]], as it is often paired with SBC-class hardware. | ||
* [https://mobile.nixos.org/ Mobile NixOS], which provides enhanced semantic around some non-standard boot semantics. | |||
=== | === Subpages === <!--T:43--> | ||
<!--T:44--> | |||
The following is a list of all sub-pages of the ''NixOS on ARM'' topic. | |||
== | <!--T:45--> | ||
{{Special:PrefixIndex/{{FULLPAGENAME}}/ |hideredirects=1 |stripprefix=1}} | |||
</translate> | |||
[[Category:NixOS on ARM]] | |||