Merge pull request #172820 from alyssais/compressed-firmware

Compressed firmware

authored by adisbladis and committed by GitHub fb222e00 75101b2d

+34 -9
-1
nixos/modules/hardware/all-firmware.nix
··· 83 broadcom-bt-firmware 84 b43Firmware_5_1_138 85 b43Firmware_6_30_163_46 86 - b43FirmwareCutter 87 xow_dongle-firmware 88 ] ++ optionals pkgs.stdenv.hostPlatform.isx86 [ 89 facetimehd-calibration
··· 83 broadcom-bt-firmware 84 b43Firmware_5_1_138 85 b43Firmware_6_30_163_46 86 xow_dongle-firmware 87 ] ++ optionals pkgs.stdenv.hostPlatform.isx86 [ 88 facetimehd-calibration
+6 -1
nixos/modules/services/hardware/udev.nix
··· 171 mv etc/udev/hwdb.bin $out 172 ''; 173 174 # Udev has a 512-character limit for ENV{PATH}, so create a symlink 175 # tree to work around this. 176 udevPath = pkgs.buildEnv { ··· 267 ''; 268 apply = list: pkgs.buildEnv { 269 name = "firmware"; 270 - paths = list; 271 pathsToLink = [ "/lib/firmware" ]; 272 ignoreCollisions = true; 273 };
··· 171 mv etc/udev/hwdb.bin $out 172 ''; 173 174 + compressFirmware = if config.boot.kernelPackages.kernelAtLeast "5.3" then 175 + pkgs.compressFirmwareXz 176 + else 177 + id; 178 + 179 # Udev has a 512-character limit for ENV{PATH}, so create a symlink 180 # tree to work around this. 181 udevPath = pkgs.buildEnv { ··· 272 ''; 273 apply = list: pkgs.buildEnv { 274 name = "firmware"; 275 + paths = map compressFirmware list; 276 pathsToLink = [ "/lib/firmware" ]; 277 ignoreCollisions = true; 278 };
-3
nixos/modules/system/boot/kernel.nix
··· 273 274 boot.kernelModules = [ "loop" "atkbd" ]; 275 276 - # The Linux kernel >= 2.6.27 provides firmware. 277 - hardware.firmware = [ kernel ]; 278 - 279 # Create /etc/modules-load.d/nixos.conf, which is read by 280 # systemd-modules-load.service to load required kernel modules. 281 environment.etc =
··· 273 274 boot.kernelModules = [ "loop" "atkbd" ]; 275 276 # Create /etc/modules-load.d/nixos.conf, which is read by 277 # systemd-modules-load.service to load required kernel modules. 278 environment.etc =
+16
pkgs/build-support/kernel/compress-firmware-xz.nix
···
··· 1 + { runCommand }: 2 + 3 + firmware: 4 + 5 + runCommand "${firmware.name}-xz" {} '' 6 + mkdir -p $out/lib 7 + (cd ${firmware} && find lib/firmware -type d -print0) | 8 + (cd $out && xargs -0 mkdir -v --) 9 + (cd ${firmware} && find lib/firmware -type f -print0) | 10 + (cd $out && xargs -0tP "$NIX_BUILD_CORES" -n1 \ 11 + sh -c 'xz -9c -T1 -C crc32 --lzma2=dict=2MiB "${firmware}/$1" > "$1.xz"' --) 12 + (cd ${firmware} && find lib/firmware -type l) | while read link; do 13 + target="$(readlink "${firmware}/$link")" 14 + ln -vs -- "''${target/^${firmware}/$out}.xz" "$out/$link.xz" 15 + done 16 + ''
+6 -2
pkgs/build-support/kernel/modules-closure.sh
··· 81 for i in $(modinfo -b $kernel --set-version "$version" -F firmware $module | grep -v '^name:'); do 82 mkdir -p "$out/lib/firmware/$(dirname "$i")" 83 echo "firmware for $module: $i" 84 - cp "$firmware/lib/firmware/$i" "$out/lib/firmware/$i" 2>/dev/null \ 85 - || echo "WARNING: missing firmware $i for module $module" 86 done 87 done 88
··· 81 for i in $(modinfo -b $kernel --set-version "$version" -F firmware $module | grep -v '^name:'); do 82 mkdir -p "$out/lib/firmware/$(dirname "$i")" 83 echo "firmware for $module: $i" 84 + for name in "$i" "$i.xz" ""; do 85 + [ -z "$name" ] && echo "WARNING: missing firmware $i for module $module" 86 + if cp "$firmware/lib/firmware/$name" "$out/lib/firmware/$name" 2>/dev/null; then 87 + break 88 + fi 89 + done 90 done 91 done 92
+2 -2
pkgs/os-specific/linux/firmware/b43-firmware/6.30.163.46.nix
··· 14 sourceRoot = "."; 15 16 installPhase = '' 17 - mkdir $out 18 - b43-fwcutter -w $out *.wl_apsta.o 19 ''; 20 21 meta = with lib; {
··· 14 sourceRoot = "."; 15 16 installPhase = '' 17 + mkdir -p $out/lib/firmware 18 + b43-fwcutter -w $out/lib/firmware *.wl_apsta.o 19 ''; 20 21 meta = with lib; {
+2
pkgs/os-specific/linux/kernel/common-config.nix
··· 883 # Disable the firmware helper fallback, udev doesn't implement it any more 884 FW_LOADER_USER_HELPER_FALLBACK = option no; 885 886 HOTPLUG_PCI_ACPI = yes; # PCI hotplug using ACPI 887 HOTPLUG_PCI_PCIE = yes; # PCI-Expresscard hotplug support 888
··· 883 # Disable the firmware helper fallback, udev doesn't implement it any more 884 FW_LOADER_USER_HELPER_FALLBACK = option no; 885 886 + FW_LOADER_COMPRESS = option yes; 887 + 888 HOTPLUG_PCI_ACPI = yes; # PCI hotplug using ACPI 889 HOTPLUG_PCI_PCIE = yes; # PCI-Expresscard hotplug support 890
+2
pkgs/top-level/all-packages.nix
··· 808 sanitizers = [ ]; 809 }; 810 811 makeModulesClosure = { kernel, firmware, rootModules, allowMissing ? false }: 812 callPackage ../build-support/kernel/modules-closure.nix { 813 inherit kernel firmware rootModules allowMissing;
··· 808 sanitizers = [ ]; 809 }; 810 811 + compressFirmwareXz = callPackage ../build-support/kernel/compress-firmware-xz.nix { }; 812 + 813 makeModulesClosure = { kernel, firmware, rootModules, allowMissing ? false }: 814 callPackage ../build-support/kernel/modules-closure.nix { 815 inherit kernel firmware rootModules allowMissing;