NixOS on ARM: Difference between revisions
Try making the main table sortable |
JamieMagee (talk | contribs) Update Raspberry Pi entries |
||
| (10 intermediate revisions by 7 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> | <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. | 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. | 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>. | 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]]. | '''For images links, including UEFI install''', skip to the [[NixOS_on_ARM/Installation|Installation page]]. | ||
== Supported devices == | == Supported devices == <!--T:7--> | ||
<!--T:8--> | |||
Table legend: | Table legend: | ||
* SoC - https://en.wikipedia.org/wiki/System_on_a_chip | * SoC - https://en.wikipedia.org/wiki/System_on_a_chip | ||
* ISA - https://en.wikipedia.org/wiki/Instruction_set_architecture | * ISA - https://en.wikipedia.org/wiki/Instruction_set_architecture | ||
=== Upstream (NixOS) supported devices === | === Upstream (NixOS) supported devices === <!--T:9--> | ||
NixOS | <!--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: | Order for the device table is: | ||
| Line 37: | Line 48: | ||
!width="2%"| Storage | !width="2%"| Storage | ||
|- | |- | ||
| Raspberry Pi | | Raspberry Pi Ltd | ||
| [[NixOS_on_ARM/Raspberry_Pi_3|Raspberry Pi 3]] | | [[NixOS_on_ARM/Raspberry_Pi_3|Raspberry Pi 3]] | ||
| Broadcom BCM2837 | | Broadcom BCM2837 | ||
| AArch64 | | AArch64 | ||
| 4× Cortex-A53 @ 1.2 | | 4× Cortex-A53 @ 1.2 to 1.4 GHz | ||
| | | 512 MB to 1 GB | ||
| | | microSD, eMMC | ||
|- | |- | ||
| Raspberry Pi | | Raspberry Pi Ltd | ||
| [[NixOS_on_ARM/ | | [[NixOS_on_ARM/Raspberry_Pi_4|Raspberry Pi 4]] | ||
| Broadcom BCM2711 | | Broadcom BCM2711 | ||
| AArch64 | | AArch64 | ||
| 4× Cortex-A72 @ 1.5 | | 4× Cortex-A72 @ 1.5 to 1.8 GHz | ||
| 1 | | 1 to 8 GB | ||
| microSD, eMMC | | 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> | </div> | ||
=== Community supported devices === | === Community supported devices === | ||
<!--T:12--> | |||
These boards are not routinely verified as working. | 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. | The baseline support level expected is “Just as much as mainline Linux and U-Boot supports them”, except if specified otherwise. | ||
<!-- | <!-- | ||
| Line 83: | Line 104: | ||
|- | |- | ||
| ASUS | | ASUS | ||
| [[NixOS_on_ARM/Tinker Board|Tinker Board]] | | [[NixOS_on_ARM/ASUS Tinker Board|Tinker Board]] | ||
| Rockchip RK3288 | | Rockchip RK3288 | ||
| ARMv7 | | ARMv7 | ||
| Line 101: | Line 122: | ||
| [[NixOS_on_ARM/Banana Pi M64|Banana Pi M64]] | | [[NixOS_on_ARM/Banana Pi M64|Banana Pi M64]] | ||
| Allwinner A64 | | Allwinner A64 | ||
| | | AArch64 | ||
| 4× Cortex-A53 | | 4× Cortex-A53 | ||
| 2 GB | | 2 GB | ||
| Line 109: | Line 130: | ||
| [[NixOS_on_ARM/Banana Pi BPI-M5|Banana Pi BPI-M5]] | | [[NixOS_on_ARM/Banana Pi BPI-M5|Banana Pi BPI-M5]] | ||
| Amlogic S905X3 | | Amlogic S905X3 | ||
| | | AArch64 | ||
| 4× Cortex-A55 | | 4× Cortex-A55 | ||
| 4 GB LPDDR4 | | 4 GB LPDDR4 | ||
| Line 305: | Line 326: | ||
| 4/8/16 GB | | 4/8/16 GB | ||
| eMMC, microSD, NVMe | | 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 | | PINE64 | ||
| Line 353: | Line 382: | ||
| 4 GB | | 4 GB | ||
| microSD | | 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 | | Radxa | ||
| Line 370: | Line 415: | ||
| eMMC, microSD, NVMe | | eMMC, microSD, NVMe | ||
|- | |- | ||
| Raspberry Pi | | Raspberry Pi Ltd | ||
| [[NixOS_on_ARM/Raspberry_Pi|Raspberry Pi]] | | [[NixOS_on_ARM/Raspberry_Pi|Raspberry Pi]] | ||
| Broadcom BCM2835 | | Broadcom BCM2835 | ||
| Line 378: | Line 423: | ||
| SD/microSD | | SD/microSD | ||
|- | |- | ||
| Raspberry Pi | | Raspberry Pi Ltd | ||
| [[NixOS_on_ARM/Raspberry_Pi|Raspberry Pi 2]] | | [[NixOS_on_ARM/Raspberry_Pi|Raspberry Pi 2]] | ||
| Broadcom BCM2836 | | Broadcom BCM2836 | ||
| Line 385: | Line 430: | ||
| 1 GB | | 1 GB | ||
| SD/microSD | | SD/microSD | ||
|- | |- | ||
| Toshiba | | Toshiba | ||
| Line 428: | Line 449: | ||
</div> | </div> | ||
==== Special Devices ==== | ==== Special Devices ==== <!--T:14--> | ||
<!--T:15--> | |||
It is possible to emulate an ARM platform with QEMU. | It is possible to emulate an ARM platform with QEMU. | ||
<!--T:16--> | |||
<div class="table"> | <div class="table"> | ||
{|class="table" | {|class="table" | ||
| Line 452: | Line 475: | ||
</div> | </div> | ||
== Installation == | == Installation == <!--T:17--> | ||
<!--T:18--> | |||
{{main|NixOS_on_ARM/Installation}} | {{main|NixOS_on_ARM/Installation}} | ||
== Initial configuration == | == Initial configuration == <!--T:19--> | ||
<!--T:20--> | |||
{{main|NixOS_on_ARM/Initial_Configuration}} | {{main|NixOS_on_ARM/Initial_Configuration}} | ||
== Troubleshooting == | == Troubleshooting == <!--T:21--> | ||
<!--T:22--> | |||
=== Hanging at <code>Starting kernel ...</code> === | === Hanging at <code>Starting kernel ...</code> === | ||
When booting a NixOS system, it may look like it is hung 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. | 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. | 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. | 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 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>. | * 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. | 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 the display, add <code>console=tty0</code>. | ||
* For a serial console, refer to the target device configuration. | * For a serial console, refer to the target device configuration. | ||
=== Details about the boot process === | === 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]]. | 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]]. | 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 == | == Binary caches == <!--T:32--> | ||
=== AArch64 === | === 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. | 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 === | === 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. | Some '''''users''''' have provided best effort caches in the past for 32 bit ARM, but none are currently available. | ||
== Getting Support == | == Getting Support == <!--T:37--> | ||
<!--T:38--> | |||
There is a dedicated room for the upstream NixOS effort on Matrix, | 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]. | [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. | Don't hesitate to ask questions. Note that reply times may vary greatly, depending on the provided information. | ||
== Resources == | == Resources == <!--T:40--> | ||
=== See also === | === See also === <!--T:41--> | ||
<!--T:42--> | |||
* [[U-Boot]], as it is often paired with SBC-class hardware. | * [[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. | * [https://mobile.nixos.org/ Mobile NixOS], which provides enhanced semantic around some non-standard boot semantics. | ||
=== Subpages === | === Subpages === <!--T:43--> | ||
<!--T:44--> | |||
The following is a list of all sub-pages of the ''NixOS on ARM'' topic. | The following is a list of all sub-pages of the ''NixOS on ARM'' topic. | ||
<!--T:45--> | |||
{{Special:PrefixIndex/{{FULLPAGENAME}}/ |hideredirects=1 |stripprefix=1}} | {{Special:PrefixIndex/{{FULLPAGENAME}}/ |hideredirects=1 |stripprefix=1}} | ||
</translate> | |||
[[Category:NixOS on ARM]] | |||