Blog | RSS | Photo Gallery | Wish List     Eric's Blob
    Failing to Load Firmware (ipw2200), with Fix Posted at 11:28 by Eric

    After months of working just fine, I turned off my laptop to bring it into work.... and when I turned it on, the wireless card drivers (ipw2200) stopped working. Ugh. I was getting this error:

       ipw2200: Intel(R) PRO/Wireless 2200/2915 Network Driver, 1.0.6
       ipw2200: Copyright(c) 2003-2004 Intel Corporation
       ipw2200: Detected Intel PRO/Wireless 2200BG Network Connection
       ipw2200: ipw-2.3-boot.fw load failed: Reason -2
       ipw2200: Unable to load firmware: 0xFFFFFFFE
       ipw2200: failed to register network device
       ipw2200: probe of 0000:01:03.0 failed with error -5
    

    It turns out this is a problem with new versions of udev. The module firmware has to get loaded somehow.... and hotplug normally takes care of it. But, newer versions of udev register themselves as the default firmware handler. Compounding the matter is that it doesn't come with a mechanism for handling said firmware loading, it simply registers itself as the handler. Silly.

    It's completely fixable, you just have to tell udev how to load firmware [edit: before following this solution, see the update below].

    To solve it, you need to add a rule to udev. In the dir /etc/udev/rules.d, I created the file '999-firmware.rules' (it has to run last). In that file, I added this line:

      ACTION=="add", SUBSYSTEM=="firmware", RUN+="/sbin/firmware_helper"

    If your system doesn't have firmware_helper, you'll have to get it from theudev source. It's just a single .c file in the 'extras' dir. Compile udev with:

      make EXTRAS=extras/firmware

    And it'll compile everything for you... but all you need is firmware_helper. Just copy it to /sbin, or /usr/local/sbin, or where ever you like (making sure that the line you added to 999-firmware.rules matches), and you're set.

    Now rmmod ipw2200 and the ieee80211* modules, reinsmod, and you're set (no need to reboot or restart anything).

    Update (2/13/2006): I'm both excited and distressed that this fix has helped so many people, I'd like to think using udev with ipw2200 should be simpler. Hopefully, distros will take care of this as they start shipping the newer udev versions with their software.

    Alas, I've installed some newer versions of udev, and ran into this problem again, even with the above fix. After some more exploring, I discovered that udev is now shipping with a program called '/sbin/udev_run_hotplugd'. I found that using this works wonderfully, and is simpler than compiling 'firmware_helper'.

    So, instead of compiling 'firmware_helper' as I had initially suggested above (which doesn't seem to work anymore anyways), just create the file '/etc/udev/rules.d/999-firmware.rules', and add the following line in it:

      ACTION=="add", SUBSYSTEM=="firmware", RUN+="/sbin/udev_run_hotplugd"

    Then rmmod ipw2200 and the ieee80211* modules, insmod ipw2200, and you should be good to go.

    Good luck!

    Mostly to help Google catch this, the new error I was received was:

    ipw2200: Intel(R) PRO/Wireless 2200/2915 Network Driver, 1.0.8
    ipw2200: Copyright(c) 2003-2005 Intel Corporation
    ipw2200: Detected Intel PRO/Wireless 2200BG Network Connection
    ipw2200: Unable to load ucode: -62
    ipw2200: Unable to load firmware: -62
    ipw2200: failed to register network device
    ipw2200: probe of 0000:03:03.0 failed with error -5
    

    And the error that showed up in the udev logs was:

    firmware_helper[14006]: main: error loading '/lib/firmware/ipw-2.4-bss.fw'
    for device '/class/firmware/0000:03:03.0' with driver 'ipw2200'
    
    | |