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'
| |

     Posted at Fri Oct 7 20:14:08 2005 by Willy
Thanks you, I had resolved my ipw2200 problem.

     Posted at Sun Oct 9 11:05:33 2005 by Gerco
Thanks! This helped me a lot.

only works w/ manual modprobe      Posted at Sun Oct 16 22:47:22 2005 by ultranet
i'm not sure if the new rules file has an effect at all yet, but reboot continues to give error. The wireless card works after manually reloading ipw2200 though.

Worked immediately      Posted at Wed Oct 19 13:11:52 2005 by Wout
Thanks, worked for udev 070 + kernel 2.6.13-gentoo-r3

Thanks!!      Posted at Tue Nov 1 21:56:56 2005 by Growlizing
Thanks a lot... That helped me really much :-) The only problem was to find this fantastic describing page :-/

thank you      Posted at Thu Nov 10 18:29:22 2005 by soad
well i was struggeling quite a time and then i found your site... thanks!

You Rule      Posted at Thu Nov 17 19:02:58 2005 by Hookooekoo
I spend a 2 days trying to figure this out, and finally an obscure link on the gentoo forums pointed me here. Fixed my problem in 15 seconds.

     Posted at Fri Jan 27 01:17:05 2006 by Shawn
I tried your fix and got a seg fault when re loading the module....hmmm I have tried to get ipw2200 to work all afternoon, no luck so far :(

sweet      Posted at Fri Feb 10 01:22:31 2006 by dunay
Thanks a million!!! So why don't you fill us in and tell us how the hell you figured this out;-) So as I understand your explanation udev registers itself with the kernel as the firmware handler but has no means to actually load firmware until we tell it how. So what happened to hotplug?

udev and firmware      Posted at Fri Feb 10 01:47:34 2006 by Eric Andreychek

I have to admit, I'm a bit surprised as to how many people this has helped :-) It's unfortunate as to how silly this problem is, and how many people it's affected.

So how did I figure it out? Heh. That's an excellent question :-) There wasn't any one source of information, which is why I put this here. I basically scraped around various forums and mailing lists, discovering the new behaviours of udev, another for how to make udev do firmware, somewhere else for compiling firmware_helper... and a lot of chance, luck, and that sort of thing :-) I do wish I had kept track of the sources, as I certainly didn't do all this on my own.

As to what happened to hotplug -- another excellent question :-) I really don't know what happened here. Perhaps the udev maintainers are expecting the distro's to be providing the firmware loader script, but it's somehow being overlooked. I very much suspect the next release of distro's to have this problem licked.

At least, I hope they do :-)

To Shawn, who was having the segfault problem... I'd recommend trying a different version of ipw2200... a higher one if possible, but if not available, to try downgrading. Are there any error messages other than the segfault? An 'strace' may help too.

Anyhow, I'm glad this has been able to help so many folks. Thanks for your comments!



Worked again!      Posted at Mon Feb 20 10:09:42 2006 by Wout
Firmware failed again with kernel kernel 2.6.15-gentoo-r1 but your new solution helped me out again! Thank you!

     Posted at Sat Mar 4 06:47:05 2006 by Mike C
Thanks for the fix! got me up and running again. Much obliged!

     Posted at Mon Mar 20 13:33:16 2006 by bat
thanks thanks thanks a lot :)

President of Vice      Posted at Sun Apr 2 08:54:39 2006 by Loic Dachary
With the current (2006/04/02) 2.6.16 debian linux kernel, it works out of the box provided you have the appropriate firmware in /lib/firmware

God Bless You!!      Posted at Tue Apr 18 12:44:36 2006 by Jo
Thank you, Thank you, Thank you!!

     Posted at Mon May 15 06:45:07 2006 by Chen Weiyang
Thank you, Loic Dachary. I use the 2.6.16 kernel and kept to meet this error until I find your thread. I put the firmware to /lib/firmware

Debian a little different?      Posted at Mon Jun 26 09:31:08 2006 by Zedd
Hi Eric, Thanks, with these hints I was able to fix everything. There is one important difference with debian (I guess it's because of Debian, I'm not completely sure): my udev_urn_hotplugd is in /lib/udev. After changing the new rule to match the correct dir, it works great! - Zedd.

     Posted at Fri Jun 30 11:12:34 2006 by Mike
That was it, man thanks alot, i worked on trying to figure that out for several weeks...you rock..

Thanks      Posted at Sat Aug 5 09:44:06 2006 by bt
Thanks for collecting this info, made the solution quick and easy for me.

Works on Centos 4.4 on a HP NC8000      Posted at Wed Oct 11 00:10:22 2006 by Andre Courchesne
Thanks for that fis. Worked withour a glitch on an HP NC8000 running CentOS 4.4 with kernel 2.6.9-42.0.3.EL

As simple as using ln      Posted at Mon Oct 23 04:54:14 2006 by Rafael Laboissiere
After upgrading my ThinkPad T43p Debian system, the ipw2200 card stopped to work and I fought during several days before finding a simple solution. I tried everything suggested in this web page, to no avail. I have the following versions installed here (it is a Debian unstable system):
  • linux-image-2.6.18-1-686_2.6.18-2
  • udev_0.100-2.1
  • ipw2200 firmware v3.0 (in /lib/firmware/)
I finally figured out the the firmware.agent script was not being called. For some unknown reason, when the udev package was upgraded (and the hotplug package purged), the symlink for the hotplug.rules did not exist. Here is the trivial cure (It Works For Me [TM]):

cd /usr/udev/rules.d
ln -fs ../hotplug.rules z55_hotplug.rules

[Notice that this ln command can be found in /var/lib/dpkg/info/udev.postinst. I do not know why the symlink was not created during the upgrade of udev.]

Same error but udev works fine      Posted at Fri Oct 27 02:50:34 2006 by Olivier Berger
I've also had the same problem, at least from what dmesg gave me... but actually this was not linked to udev or the firmware agent. I've a dual boot system. It seems that loading the firmware won't work in GNU/Linux when booted after a Windows XP session in my case. So if you experience this issue, you may get it back working, by shutting down completely the system before booting linux. Hope this helps.

     Posted at Wed Nov 15 20:55:39 2006 by Kiall
Great tip, found the page via http://individual.utoronto.ca/jaelle_kitty/inspiron6400/ handy to have the url for googlers...

debian sarge testing      Posted at Mon Feb 12 05:29:57 2007 by odin
kernel-image-2.6-686 2.6.18+5 the firmware name is ipw-2.2-bss.fw but ipw2200 require ipw2200-bss.fw I rename ipw-2.2-bss.fw to ipw2200-bss.fw then dmesg tell me "Unable to load boot firmware:-2" so I goto http://ipw2200.sf.net/firmware.php download "firmware v3.0" extract the tarball in /usr/lib/hotplug/firmware it work


Post a Comment
    Name:
    URL/Email: [http://... or mailto:you@wherever] (optional)
    Title: (optional)
    Comments:
      Use HTML for formatting. Allowed HTML: <a> <p> <b> <i> <u> <hr> <br> <ol> <ul> <li>

trackback

TrackBack ping me at:

http://www.openthought.org/blosxom.cgi/Blog/Computers/Organizations/Home/firmware_and_udev.trackback