summary refs log tree commit diff
diff options
context:
space:
mode:
authorNikolay Amiantov <ab@fmap.me>2018-01-08 16:13:28 +0300
committerTuomas Tynkkynen <tuomas.tynkkynen@iki.fi>2018-02-16 00:11:07 +0200
commit56e0943b0855c7b0501f84d4ce43e083b9d13b27 (patch)
tree1a88c0e3a7980e0eafbf538199f1cf2436a9c75a
parent0be2746fc2626fe26a34f2f729ce61aa440f8b97 (diff)
downloadnixpkgs-56e0943b0855c7b0501f84d4ce43e083b9d13b27.tar
nixpkgs-56e0943b0855c7b0501f84d4ce43e083b9d13b27.tar.gz
nixpkgs-56e0943b0855c7b0501f84d4ce43e083b9d13b27.tar.bz2
nixpkgs-56e0943b0855c7b0501f84d4ce43e083b9d13b27.tar.lz
nixpkgs-56e0943b0855c7b0501f84d4ce43e083b9d13b27.tar.xz
nixpkgs-56e0943b0855c7b0501f84d4ce43e083b9d13b27.tar.zst
nixpkgs-56e0943b0855c7b0501f84d4ce43e083b9d13b27.zip
makeModulesClosure: support firmware
Link it in stage 1.
-rw-r--r--nixos/modules/system/boot/stage-1-init.sh1
-rw-r--r--nixos/modules/system/boot/stage-1.nix2
-rw-r--r--pkgs/build-support/kernel/modules-closure.nix4
-rw-r--r--pkgs/build-support/kernel/modules-closure.sh9
-rw-r--r--pkgs/build-support/vm/default.nix1
-rw-r--r--pkgs/top-level/all-packages.nix4
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 b442386914a..964ec68cfe2 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 d6e3e3a87d0..df450be8c40 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 9940e611124..a527770adcd 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 8a31c760da0..8287c1672d0 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 d599f9bbb65..642365bdeb5 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 aca4f9212e1..d4025ebcc6b 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 { };