diff options
author | Nikolay Amiantov <ab@fmap.me> | 2018-01-08 16:13:28 +0300 |
---|---|---|
committer | Tuomas Tynkkynen <tuomas.tynkkynen@iki.fi> | 2018-02-16 00:11:07 +0200 |
commit | 56e0943b0855c7b0501f84d4ce43e083b9d13b27 (patch) | |
tree | 1a88c0e3a7980e0eafbf538199f1cf2436a9c75a | |
parent | 0be2746fc2626fe26a34f2f729ce61aa440f8b97 (diff) |
makeModulesClosure: support firmware
Link it in stage 1.
-rw-r--r-- | nixos/modules/system/boot/stage-1-init.sh | 1 | ||||
-rw-r--r-- | nixos/modules/system/boot/stage-1.nix | 2 | ||||
-rw-r--r-- | pkgs/build-support/kernel/modules-closure.nix | 4 | ||||
-rw-r--r-- | pkgs/build-support/kernel/modules-closure.sh | 9 | ||||
-rw-r--r-- | pkgs/build-support/vm/default.nix | 1 | ||||
-rw-r--r-- | pkgs/top-level/all-packages.nix | 4 |
6 files changed, 17 insertions, 4 deletions
diff --git a/nixos/modules/system/boot/stage-1-init.sh b/nixos/modules/system/boot/stage-1-init.sh index b442386914ad5..964ec68cfe2f8 100644 --- a/nixos/modules/system/boot/stage-1-init.sh +++ b/nixos/modules/system/boot/stage-1-init.sh @@ -167,6 +167,7 @@ done # Load the required kernel modules. mkdir -p /lib ln -s @modulesClosure@/lib/modules /lib/modules +ln -s @modulesClosure@/lib/firmware /lib/firmware echo @extraUtils@/bin/modprobe > /proc/sys/kernel/modprobe for i in @kernelModules@; do echo "loading module $(basename $i)..." diff --git a/nixos/modules/system/boot/stage-1.nix b/nixos/modules/system/boot/stage-1.nix index d6e3e3a87d018..df450be8c4014 100644 --- a/nixos/modules/system/boot/stage-1.nix +++ b/nixos/modules/system/boot/stage-1.nix @@ -13,12 +13,14 @@ let kernelPackages = config.boot.kernelPackages; modulesTree = config.system.modulesTree; + firmware = config.hardware.firmware; # Determine the set of modules that we need to mount the root FS. modulesClosure = pkgs.makeModulesClosure { rootModules = config.boot.initrd.availableKernelModules ++ config.boot.initrd.kernelModules; kernel = modulesTree; + firmware = firmware; allowMissing = true; }; diff --git a/pkgs/build-support/kernel/modules-closure.nix b/pkgs/build-support/kernel/modules-closure.nix index 9940e611124c9..a527770adcd7b 100644 --- a/pkgs/build-support/kernel/modules-closure.nix +++ b/pkgs/build-support/kernel/modules-closure.nix @@ -3,13 +3,13 @@ # the modules identified by `rootModules', plus their dependencies. # Also generate an appropriate modules.dep. -{ stdenvNoCC, kernel, nukeReferences, rootModules +{ stdenvNoCC, kernel, firmware, nukeReferences, rootModules , kmod, allowMissing ? false }: stdenvNoCC.mkDerivation { name = kernel.name + "-shrunk"; builder = ./modules-closure.sh; buildInputs = [ nukeReferences kmod ]; - inherit kernel rootModules allowMissing; + inherit kernel firmware rootModules allowMissing; allowedReferences = ["out"]; } diff --git a/pkgs/build-support/kernel/modules-closure.sh b/pkgs/build-support/kernel/modules-closure.sh index 8a31c760da07a..8287c1672d062 100644 --- a/pkgs/build-support/kernel/modules-closure.sh +++ b/pkgs/build-support/kernel/modules-closure.sh @@ -33,4 +33,13 @@ for module in $closure; do echo $target >> $out/insmod-list done +mkdir -p $out/lib/firmware +for module in $closure; do + for i in $(modinfo -F firmware $module); do + mkdir -p "$out/lib/firmware/$(dirname "$i")" + echo "firmware for $module: $i" + cp "$firmware/lib/firmware/$i" "$out/lib/firmware/$i" 2>/dev/null || if test -z "$allowMissing"; then exit 1; fi + done +done + depmod -b $out -a $version diff --git a/pkgs/build-support/vm/default.nix b/pkgs/build-support/vm/default.nix index d599f9bbb65f8..642365bdeb5cb 100644 --- a/pkgs/build-support/vm/default.nix +++ b/pkgs/build-support/vm/default.nix @@ -26,6 +26,7 @@ rec { modulesClosure = makeModulesClosure { inherit kernel rootModules; + firmware = kernel; }; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index aca4f9212e142..d4025ebcc6bb8 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -320,9 +320,9 @@ with pkgs; makeWrapper = makeSetupHook { deps = [ dieHook ]; } ../build-support/setup-hooks/make-wrapper.sh; - makeModulesClosure = { kernel, rootModules, allowMissing ? false }: + makeModulesClosure = { kernel, firmware, rootModules, allowMissing ? false }: callPackage ../build-support/kernel/modules-closure.nix { - inherit kernel rootModules allowMissing; + inherit kernel firmware rootModules allowMissing; }; mkShell = callPackage ../build-support/mkshell { }; |