Add our firmware path to the in-kernel lookup path

Newer kernels (since torvalds/linux@abb139e75c) try to
read firmware directly from the filesystem before falling back to a
userspace helper (udev) if firmware cannot be found (in even newer
kernels, the fallback path can be disabled altogether). By default, only
certain paths in /lib/firmware* are searched, so this was initially not
helpful for NixOS.

Since torvalds/linux@2760284206 (which,
based on the commit message, was implemented just for NixOS, go us!),
though, an extra path can be dynamically prepended to the search path.
So do that, in three ways:

1. Pass a kernel command line option in case the module is built-in
2. Add a line to modprobe.conf in case the module isn't yet loaded by
activation-time
3. Add an activation script to set the option in /sys in case the module
is already loaded by activation-time.
This commit is contained in:
Shea Levy 2013-03-04 09:42:03 -05:00
parent 5737604b13
commit 70378ad2b7

View file

@ -227,6 +227,12 @@ in
(isYes "INOTIFY_USER")
(isYes "NET")
];
};
boot.extraKernelParams = [ "firmware_class.path=${config.hardware.firmware}" ];
boot.extraModprobeConfig = "options firmware_class path=${config.hardware.firmware}";
system.activationScripts."set-firmware-path" =
"echo -n ${config.hardware.firmware} > /sys/module/firmware_class/parameters/path";
};
}