nixos/systemd-boot: add support for devicetree entry
The [Boot Loader Specification](https://uapi-group.org/specifications/specs/boot_loader_specification/) allows for using a key called "devicetree" for specifying which devicetree the bootloader should use during boot. With regards to systemd-boot, this key is used to specify which file should be picked up from the ESP to install to the EFI DTB Configuration Table. Linux then uses this Configuration Table to setup the machine. This change is similar to the one done in https://github.com/NixOS/nixpkgs/pull/295096, where that change was for adding DTB support to systemd-stub, and this is for systemd-boot.
This commit is contained in:
@@ -191,6 +191,15 @@ in {
|
||||
'';
|
||||
};
|
||||
|
||||
installDeviceTree = mkOption {
|
||||
default = with config.hardware.deviceTree; enable && name != null;
|
||||
defaultText = ''with config.hardware.deviceTree; enable && name != null'';
|
||||
description = ''
|
||||
Install the devicetree blob specified by `config.hardware.deviceTree.name`
|
||||
to the ESP and instruct systemd-boot to pass this DTB to linux.
|
||||
'';
|
||||
};
|
||||
|
||||
extraInstallCommands = mkOption {
|
||||
default = "";
|
||||
example = ''
|
||||
@@ -353,6 +362,10 @@ in {
|
||||
assertion = (config.boot.kernelPackages.kernel.features or { efiBootStub = true; }) ? efiBootStub;
|
||||
message = "This kernel does not support the EFI boot stub";
|
||||
}
|
||||
{
|
||||
assertion = cfg.installDeviceTree -> config.hardware.deviceTree.enable -> config.hardware.deviceTree.name != null;
|
||||
message = "Cannot install devicetree without 'config.hardware.deviceTree.enable' enabled and 'config.hardware.deviceTree.name' set";
|
||||
}
|
||||
] ++ concatMap (filename: [
|
||||
{
|
||||
assertion = !(hasInfix "/" filename);
|
||||
@@ -410,6 +423,7 @@ in {
|
||||
|
||||
boot.bootspec.extensions."org.nixos.systemd-boot" = {
|
||||
inherit (config.boot.loader.systemd-boot) sortKey;
|
||||
devicetree = lib.mkIf cfg.installDeviceTree "${config.hardware.deviceTree.package}/${config.hardware.deviceTree.name}";
|
||||
};
|
||||
|
||||
system = {
|
||||
|
||||
Reference in New Issue
Block a user