U-Boot: Difference between revisions
m Add some external links |
Add notes about usage (or rather lack of notes about usage) |
||
Line 55: | Line 55: | ||
|<code>raspberryPi</code> ''[sic]'' | |<code>raspberryPi</code> ''[sic]'' | ||
|} | |} | ||
=== Using 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 succintly. | |||
==== SBC and related projects in NixOS ==== | |||
* [[NixOS on ARM]] | |||
* [[NixOS on RISCV/VisionFive 2|NixOS on RISCV]] | |||
== Vendor U-Boot == | == Vendor U-Boot == |
Revision as of 03:48, 7 April 2024
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.
U-Boot in Nixpkgs
Mainline U-Boot is packaged in Nixpkgs.
Vendor forks of U-Boot are generally not packaged in Nixpkgs, and generally unwelcome.
U-Boot may be patched for compatibility reasons mainly, and work should be taken to send them to mainline U-Boot.
Building a packaged U-Boot
You need to know two things:
- The target architecture
- If you need to cross-compile
The target architecture is the architecture of the target board. For example, the LibreTechCC
board uses the AArch64
architecture.
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 x86_64
laptop, you would need to cross-compile.
With those facts known, you can build the appropriate attribute from a Nixpkgs checkout.
The general format is:
$ nix-build -A [pkgsCross.$cross_name.]$packageName
$ # Where the part in [brackets] is needed for cross-compilation.
To build with cross-compilation, you will need to prefix with the correct cross-compilation package set:
$ # Example running on x86_64.
$ uname -m
x86_64
$ nix-build -A pkgsCross.aarch64-multiplatform.ubootLibreTechCC
If, instead, you are building natively (same architecture) you can refer to the package attribute name directly:
$ # Example output for an AArch64 system.
$ uname -m
aarch64
$ nix-build -A ubootLibreTechCC
pkgsCross
Cheat sheet
Architecture | Package Set |
---|---|
aarch64
|
aarch64-multiplatform
|
armv7l
|
armv7l-hf-multiplatform
|
armv6l
|
raspberryPi [sic]
|
Using U-Boot
You will need to consult either the 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 succintly.
Vendor U-Boot
Vendor U-Boot may or may not work to boot and use NixOS.
The answer is actually really complicated, and depends not only about U-Boot, but the intended Linux kernel to be booted, and the boot method in use.
The buildUBoot
implementation in Nixpkgs may or may not work to build a vendor U-Boot, and this usage is unsupported.
A few vendors ship good pre-built modern U-Boot implementations. Booting NixOS with those should work. If it does not, things may need to be fixed on any of the end. But also, this depends on the kernel, and boot method in use.
Other U-Boot distributions
There exists other prebuilt 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
Stock NixOS should be assumed to work with Tow-Boot, always depending on the boot method and kernel in use.
Tow-Boot is currently used as a reference as the only distro-agnostic U-Boot build, for support purposes.