>> ? Udev has been the standard way to service kernel firmware requests for >> quite some time. The relevant bit is in >> /lib/udev/rules.d/50-firmware.rules . > Ok so that must be working on my laptop (automatically, i didn't > configure anything) but failing on my desktop. > >> However, udevd is only started after the kernel is loaded, and therefore >> will only load firmware for drivers which are built as modules. > I tried compiling as a module, and it still failed. I'll go back and > verify I haven't made a mistake, then check firmware.rules. >
it does not actually matter how you configured the driver -- built-in kernel or as module: everytime when driver operates the device, it checks whether firmware is loaded. if it does not or the firmware is not preloaded at kernel build time as a blob, the driver requests for firmware. the request is a generated kernel event which is handled in userspace by udev. the udev daemon processes event using mentioned above rule. the rule is trivial -- it starts a firmware loader utility (/lib/udev/firmware) with parameters passed within the event: device name and firmware file path. appropriate status is returned back to kernel and dispatched to the driver in your case the status is -2 (ENOENT) so it could be problem with either firmware blob file or firmware loader itself. functionality of /lib/udev/firmware is controlled by USE=extras. did you installed udev with "extras" support? again, firmware load is udev responsibility. you may diagnose all the stuff enabling udev debug output in /etc/udev/udev.conf finally i confirm that r8169 driver works fine on my notebook with 2.6.39 kernel