U-Boot: Difference between revisions
m Add some external links |
m Add category booting |
||
(4 intermediate revisions by one other user not shown) | |||
Line 1: | Line 1: | ||
[https://www.u-boot.org/ U-Boot] is a common '''''platform firmware''''' implementation for embedded and embedded-like devices. | |||
It may also be used as a bootloader, but with modern U-Boot, [[UEFI]] boot is generally possible too. | It may also be used as a bootloader, but with modern U-Boot, [[UEFI]] boot is generally possible too. | ||
Line 15: | Line 15: | ||
You need to know two things: | You need to know two things: | ||
# The target | # The target ISA (''Instruction Set Architecture'') | ||
# If you need to cross-compile | # If you need to cross-compile | ||
The target | The target ISA is the ISA of the ''target board''. This would be defined by the CPU used on the board. | ||
You will need to cross-compile if you are not building on the same ''architecture'' as the target board. For example, if you are building on a standard <code>x86_64</code> laptop, you would need to cross-compile. | You will need to cross-compile if you are not building on the same ''architecture'' as the target board. For example, if you are building for an <code>AArch64</code> ''target board'' on a standard <code>x86_64</code> laptop, you would need to cross-compile. | ||
With those facts known, you can build the appropriate attribute from a Nixpkgs checkout. | With those facts known, you can build the appropriate attribute from a Nixpkgs checkout. | ||
Line 27: | Line 27: | ||
$ nix-build -A [pkgsCross.$cross_name.]$packageName | $ nix-build -A [pkgsCross.$cross_name.]$packageName | ||
$ # Where the part in [brackets] is needed for cross-compilation. | $ # Where the part in [brackets] is needed for cross-compilation. | ||
</syntaxhighlight> | </syntaxhighlight> | ||
{| class="wikitable" | {| class="wikitable" | ||
|+ | |||
<code>pkgsCross</code> attribute name cheat sheet | |||
!Architecture | !Architecture | ||
!Package Set | !Package Set | ||
Line 55: | Line 43: | ||
|<code>raspberryPi</code> ''[sic]'' | |<code>raspberryPi</code> ''[sic]'' | ||
|} | |} | ||
==== Example build ==== | |||
The following examples use the U-Boot package for a ''LibreTech CC ‘LePotato’'', which uses an ''S905X'' SoC. This SoC uses an <code>AArch64</code> ISA. | |||
To build the package with cross-compilation, you need to prefix with the correct cross-compilation package set:<syntaxhighlight lang="shell-session"> | |||
$ # Example running on x86_64. | |||
$ uname -m | |||
x86_64 | |||
$ nix-build -A pkgsCross.aarch64-multiplatform.ubootLibreTechCC | |||
</syntaxhighlight>If, instead, you are building natively (same architecture) you can refer to the package attribute name directly:<syntaxhighlight lang="shell-session"> | |||
$ # Example output for an AArch64 system. | |||
$ uname -m | |||
aarch64 | |||
$ nix-build -A ubootLibreTechCC | |||
</syntaxhighlight> | |||
=== Installing U-Boot === | |||
You will need to consult either the [https://docs.u-boot.org/ Official U-Boot documentation], or a board-specific page to find out how to use the produced output. | |||
The large variety of ecosystems supported by U-Boot makes it impossible to document succinctly. | |||
==== SBC and related projects in NixOS ==== | |||
* [[NixOS on ARM]] | |||
* [[NixOS on RISCV/VisionFive 2|NixOS on RISCV]] | |||
== Using NixOS with U-Boot == | |||
{{Note|This section assumes U-Boot is installed already.}} | |||
With U-Boot, NixOS currently still assumes use of [https://docs.u-boot.org/en/v2024.04/develop/distro.html U-Boot's Generic Distro Configuration Concept] as the mechanism for discoverable boot. The preferred scheme is ''extlinux-compatible''. This is how the kernel <code>Image</code>, <code>initrd</code>, dtb, and Kernel command-line arguments are provided with complete support for the lifecycles of generations. | |||
Note that U-Boot is moving to [https://docs.u-boot.org/en/v2024.04/develop/bootstd.html ''U-Boot Standard Boot'']. How it affects the assumptions from NixOS is still not documented. | |||
Booting through UEFI with U-Boot should work. Booting with UEFI is tentatively supported, with intent of being the only fully supported boot method in the future. See [[NixOS on ARM/UEFI]], which describes part of the drawbacks. | |||
=== Quick overview about the Generic Distro Configuration support === | |||
U-Boot is scripted to scan all attached storage devices and partitions, and look for a file named <code>/extlinux/extlinux.conf</code> or <code>/boot/extlinux/extlinux.conf</code>. This will will be generated by NixOS when configured with {{Nixos:option|boot.loader.generic-extlinux-compatible.enable}}. | |||
The partition also needs to '''have its "bootable" flag set'''. This is true for ''both MBR and GPT partitioning schemes''. | |||
== Vendor U-Boot == | == Vendor U-Boot == | ||
The term ''vendor U-Boot'' means the provided pre-built U-Boot binaries and the source as well. It generally implies use of an older fork of U-Boot from a ''BSP'' (''Board Support Package''). | |||
Vendor U-Boot may or may not work to boot and use NixOS. | Vendor U-Boot may or may not work to boot and use NixOS. | ||
Line 66: | Line 95: | ||
== Other U-Boot distributions == | == Other U-Boot distributions == | ||
There exists other | There exists other pre-built U-Boot distributions. As long as they follow the mainline U-Boot semantics, and are close enough in age to the current releases, they should work to boot NixOS. | ||
=== Tow-Boot === | === Tow-Boot === | ||
Line 79: | Line 108: | ||
* [https://source.denx.de/u-boot/u-boot Official U-Boot source repo] | * [https://source.denx.de/u-boot/u-boot Official U-Boot source repo] | ||
* [https://docs.u-boot.org/ Official U-Boot documentation] | * [https://docs.u-boot.org/ Official U-Boot documentation] | ||
[[Category:Booting]] |