I have found a potential problem with the Slackware distro regarding the kernel drivers requiering firmware files.
Hotplug (/sbin/hotplug) was replaced a long time ago by udev. The problem with udev is that it loads as a userspace daemon too late in the boot process.
Current implementation in the kernel requires a /sbin/hotplug script to load firmware for drivers that require this. If the driver is builtin (not module), this fails.
Read here: /usr/src/linux/Documentation/firmware_class
A sample script is provided, which doesn't seem to work.
copy as /sbin/hotplug, edit the script:
Code:
HOTPLUG_FW_DIR=/lib/firmware/
as this is where the firmware is stored in today's kernels.
Tested on slackware 13.37, 14.0, 14.1
I was able to partially work around the problem by recompiling the kernel and making the FiberChannel adapter (for which I need firmware) as a module. Then udev does the correct work and loads the firmware, the driver loads properly and the device works.
But then I have the problem of udev and lvm starting before the adapter driver loads, and then it is too late for the multipath-tools to remap the devices. I get into a chicken and egg problem which I haven't been able to solve, to this day.
In short: how does one load driver firmware (from /lib/firmware) for builtin drivers at boot, before udev exists?