NixOS on ARM/UEFI: Difference between revisions
imported>Samueldr Early starting draft |
imported>Samueldr m more |
||
| Line 3: | Line 3: | ||
{{note|The page is written assuming <tt>AArch64</tt>. It is possible that following most of these instructions for <tt>armv7l</tt> would work just as well, but armv7l support in NixOS is not at a point where doing so will be nice.}} | {{note|The page is written assuming <tt>AArch64</tt>. It is possible that following most of these instructions for <tt>armv7l</tt> would work just as well, but armv7l support in NixOS is not at a point where doing so will be nice.}} | ||
This section of the NixOS on ARM documentation aims to document as much as possible about booting ''any'' ARM boards using UEFI. | This section of the NixOS on ARM documentation aims to document as much as possible about booting ''any'' ARM boards using UEFI. This will be written with a heavy bias about ''Single Board Computers'' (SBCs), as this is where booting is seen as complicated, cumbersome, when not described as impossible. | ||
== The Basics First == | == The Basics First == | ||
| Line 18: | Line 18: | ||
In the ARM with SBCs landscape, '''U-Boot''' is the de facto solution for the ''Initial Boot Firmware''. Though ''U-Boot'' is confusingly, but rightly, often referred to as a ''Boot Loader''. ''U-Boot'' plays double duties often. It is tasked with ''initializing the hardware'', and often also used to handle ''loading and booting'' the operating system. | In the ARM with SBCs landscape, '''U-Boot''' is the de facto solution for the ''Initial Boot Firmware''. Though ''U-Boot'' is confusingly, but rightly, often referred to as a ''Boot Loader''. ''U-Boot'' plays double duties often. It is tasked with ''initializing the hardware'', and often also used to handle ''loading and booting'' the operating system. | ||
=== UEFI === | |||
The ''[https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface Unified Extensible Firmware Interface]'' it not in itself a tangible thing. Wrongly abtracted, it is a specification used to provide an ''interface'' to describe a standard boot process, including an environment before the operating system starts, and protocols for operating systems. | |||
There are multiple implementations of UEFI. Vendors like ''American Megatrends'', ''Phoenix Technologies'' and ''Insyde Software'' may have produced the one on your personal <tt>x86_64</tt> machine. '''TianoCore''' is ''the'' reference UEFI implementation, and Open Source. Luckily enough, ''U-Boot'' implements enough (and a bit more) of the UEFI spec. | |||
==== SBBR? EBBR? ==== | |||
Other than letter salads, they are ''Server Base Boot Requirements'' and ''Embedded Base Boot Requirements''. Two specifications for ARM. If your target is in compliance with either, booting with UEFI should already be supported. With the minimal UEFI support in ''U-Boot'', targets that were not made to be EBBR compliant can be made compliant, or be close enough for what it matters. | |||
== UEFI, on my SBC??? == | |||
Believe me or not, it's more likely that you can, if your SBC is well supported by mainline ''U-Boot''. ''U-Boot'' provides enough UEFI to comply with EBBR, which in turn is enough to allow us to boot the <tt>AArch64</tt> UEFI NixOS iso, and with almost no differences compared to the <tt>x86_64</tt> guide, simply follow the installation instruction to boot into an installed system. | |||
=== Getting an Initial Boot Firmware === | |||
{{expansion|for now, left as an exercise to the reader... More will be coming soon.}} | |||