From ee8572d6b31b8188f9d500a1a3036316f2aa21c0 Mon Sep 17 00:00:00 2001 From: Arthur Gautier Date: Sat, 22 Aug 2020 09:53:29 -0700 Subject: [PATCH 1/2] makeModulesClosure: fixup firmware extraction After a recent upgrade of modinfo, its output is now incorrect for builtin modules. This commit filters out the output until a fix is made available upstream --- pkgs/build-support/kernel/modules-closure.sh | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/pkgs/build-support/kernel/modules-closure.sh b/pkgs/build-support/kernel/modules-closure.sh index 68d840f16140..2e3d3e25a09b 100644 --- a/pkgs/build-support/kernel/modules-closure.sh +++ b/pkgs/build-support/kernel/modules-closure.sh @@ -68,7 +68,17 @@ done mkdir -p $out/lib/firmware for module in $(cat closure); do - for i in $(modinfo -F firmware $module); do + # for builtin modules, modinfo will reply with a wrong output looking like: + # $ modinfo -F firmware unix + # name: unix + # + # There is a pending attempt to fix this: + # https://github.com/NixOS/nixpkgs/pull/96153 + # https://lore.kernel.org/linux-modules/20200823215433.j5gc5rnsmahpf43v@blumerang/T/#u + # + # For now, the workaround is just to filter out the extraneous lines out + # of its output. + for i in $(modinfo -F firmware $module | grep -v '^name:'); 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 From 70bc1a3f49516a407d8f919c161162951d34ceaf Mon Sep 17 00:00:00 2001 From: Arthur Gautier Date: Thu, 27 Aug 2020 10:42:43 -0700 Subject: [PATCH 2/2] makeModulesClosuse: read modules from corrent kernel version Before this commit, the firmware information would be loaded from the currently running kernel, not from the kernel to be loaded. This commit ensures the correct kernel version and modules are read. --- pkgs/build-support/kernel/modules-closure.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/build-support/kernel/modules-closure.sh b/pkgs/build-support/kernel/modules-closure.sh index 2e3d3e25a09b..3f895d9cfed9 100644 --- a/pkgs/build-support/kernel/modules-closure.sh +++ b/pkgs/build-support/kernel/modules-closure.sh @@ -78,7 +78,7 @@ for module in $(cat closure); do # # For now, the workaround is just to filter out the extraneous lines out # of its output. - for i in $(modinfo -F firmware $module | grep -v '^name:'); do + for i in $(modinfo -b $kernel --set-version "$version" -F firmware $module | grep -v '^name:'); 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