Ipw2200
From Gentoo Linux Wiki
| Laptops • TV Tuner Cards • Wireless • Servers • Storage • Other Hardware • Motherboards • Related |
Contents |
[edit] Resources
[edit] Kernel 2.6.14
As of version 2.6.14, the kernel supports ipw2200 natively.
The ipw2200 driver is under continuous development, though, so the external driver is probably more up-to-date than the in-built driver shipped with your kernel.
Here are the steps to enable kernel build-in driver:
Networking->Generic IEEE 802.11 Networking Stack
[M] Enable Generic IEEE, WEP/CCMP/TKIP
Device Drivers->Network Device Support->Wireless LAN (non)
[M] Enable Intel PRO/Wireless 2200BG and 2915ABG Network Connection
For kernel 2.6.14 to 2.6.16, you need to install ipw2200-firmware version 2.4 (3.0 won't work). For installation try:
emerge -av "=net-wireless/ipw2200-firmware-2.4"
Use -Dwext for wpa_supplicant (-Dipw won't work)
You don't need to emerge the external ieee80211 and ipw2200 modules afterwards.
To start the ipw2200 module:
modprobe ipw2200
To make the module load automatically at boot add ipw2200 to your /etc/modules.autoload.d/kernel-2.6 configuration file.
[edit] Kernel 2.6.17
The native support for ipw2200 in kernel 2.6.17 works as well, but only with ipw2200-firmware-3.0 (and udev-087). (Note: As of version 2.6.17, the kernel expects ipw2200_*.fw names instead of something like ipw-2.4-*.fw. But how will we install the following version of the firmware, while retaining the ability to fall back to version 3.0? Should we find a way to incorporate the version number in the directory name? Or ipw2200-*.fw are just symlinks to names that do incorporate version numbers? Either way, the earlier version of the driver would not automatically get the correct version of the firmware.)
You need to compile ipw2200 support as a module! (The reason you may find in [1]) (You can add the "ipw2200" module to /etc/modules.autoload.d/kernel-2.6 then.) The Generic IEEE 802.11 Networking Stack can be built into the kernel, though.
[edit] Alternative
Build your kernel with:
- select the 802.11 stack (under 'networking') as a built in (select everything)
- under the wireless lan category select 'Intel PRO/Wireless...' as a module
- Now, compile your kernel
- Emerge the FIRMWARE (version 3).
- After the firmware is installed make sure you add "ipw2200" to the autoload modules (see above).
- Restart your computer. next do the following (either as sudo or root):
- grep ipw2200 /var/log/everything/current
if you get the following:
| File: /var/log/everything/current |
|
[kernel] ipw2200: Intel(R) PRO/Wireless 2200/2915 Network Driver, git-1.1.1 |
that means you have the wrong firmware (probably 2.4). If you get:
| File: /var/log/everything/current |
|
[kernel] ipw2200: Intel(R) PRO/Wireless 2200/2915 Network Driver, git-1.1.1 |
congrats! your wifi card should now work, try a iwconfig and see what it's listed under!
[edit] Setup
The card should be set up at this point.
On many newer laptops there is a 'wireless radio' kill switch', sometimes a dedicated button, sometimes a function key (fn+f[1-9]). Make sure it is turned on.
In some laptops the wireless has to be enabled in the bios, especially if you have the wireless builtin - if it's not enabled, the button/fn key won't work anyway - Make sure you have the internal wireless enabled.
[edit] Trouble with hwcrypto
If you use net-wireless/ipw2200-1.0.4 and net-wireless/ipw2200-firmware-2.3 or higher you might get errors with WPA:
| File: /var/log/messages |
ieee80211: eth1: Unknown management packet: 0 ipw2200: Firmware error detected. Restarting. ieee80211: eth1: Unknown management packet: 0 ipw2200: failed to send SYSTEM_CONFIG command |
If you use WEP you might get a lot of the following errors:
| File: /var/log/messages |
ipw2200: Firmware error detected. Restarting. ipw2200: Sysfs 'error' log already exists. |
If this problem occurs you will also notice that the link is very unreliable and slow.
To solve these problems you can simply turn off hardware crypto:
| File: /etc/modules.d/ipw2200 |
options ipw2200 hwcrypto=0 |
After modifying the file execute the following commands:
modules-update modprobe -r ipw2200 modprobe ipw2200
[edit] Trouble Loading Firmware 1
If you get the following:
ipw2200: Detected Intel PRO/Wireless 2200BG Network Connection ipw2200: Unable to load firmware: -1 ipw2200: Unable to load firmware: -1 ipw2200: failed to register network device ACPI: PCI interrupt for device 0000:02:02.0 disabled ipw2200: probe of 0000:02:02.0 failed with error -5
Then you might try backing UDEV off to at least version 070; there seems to be a conflict with higher versions.
[edit] Trouble Loading Firmware 2
If you get the following:
ipw2200: Detected Intel PRO/Wireless 2200BG Network Connection ipw2200: ipw2200-bss.fw request_firmware failed: Reason -2 ipw2200: Unable to load firmware: -2 ipw2200: failed to register network device ACPI: PCI interrupt for device 0000:03:03.0 disabled ipw2200: probe of 0000:03:03.0 failed with error -5
In the latest distribution of Gentoo(kernel>=2.6.23-r3, and udev>=115-r1), everything configuration files are OK now. You may find
SUBSYSTEM=="firmware", ACTION=="add", RUN+="firmware.sh
in the file/etc/udev/rules.d/50-udev.rules. Even list ipw2200 in /etc/modules.autoload/kernel-2.6 is unnecessary now.
However, if you compiled the driver into the kernel, you may suffer this problem. One way to solve it is to regenerate the kernel and compile the driver as a module.
Also you may apply this patch : http://ipw2200.sourceforge.net/patches/ipw2200-1.2.2-close_intf.patch
For more informations, visit : http://bugs.gentoo.org/show_bug.cgi?id=202557
If it's not because of this, or you use a relatively old version of kernel, you may read the solutions below.
for me is UDEV 087 working fine. But I needed to add one rule-which I found in docs for ipw2100 (thx to dunay/Eric)(It's extremely important that you compile the ipw2200 support as a module, otherwhise it won't work)
here is a fix for udev thanks to Eric at http://www.openthought.org/blosxom.cgi/Blog (perm link: http://www.openthought.org/blosxom.cgi/2006/02/13#firmware_and_udev)
It's completely fixable, you just have to tell udev how to load firmware.
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"
I am using udev 100 and instead of the line above i had to add
ACTION=="add", SUBSYSTEM=="firmware", RUN+="/lib/udev/firmware.sh"
If your system doesn't have firmware_helper, you'll have to get it from the udev 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).
I did not need to add this rule (I'm using udev-087 as well). Instead these kernel messages were because I was using an incompatible version of ipw2200-firmware with the inbuilt kernel driver (of kernel 2.6.17). Upgrading from ipw2200-firmware 2.4 to 3.0 and compiling ipw2200 support as a module fixed the problem.
I did not need to add this rule except when resuming from Software Suspend.
For me it didn't work, but just remove (unmerge) udev and install (emerge + add to runlevel) coldplug solved this problem. I had udev 104-r11.
Running kernel-2.6.20-gentoo-r8, and udev 104-r12. All I had to do was to build ipw support as module and emerge ipw2200-firmware. Don't even have to list ipw2200 in /etc/modules.autoload/kernel-2.6, as udev seems to load it anyway.
[edit] Trouble Loading Firmware 3
Looks like there is an update from http://www.openthought.org/blosxom.cgi/2006/02/13#firmware_and_udev which shows how to fix a new error:
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 in udev logs:
firmware_helper[14006]: main: error loading '/lib/firmware/ipw-2.4-bss.fw' for device '/class/firmware/0000:03:03.0' with driver 'ipw2200'
The way to fix this from Eric's blog is:
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.
So, put this line in the file '/etc/udev/rules.d/999-firmware.rules':
ACTION=="add", SUBSYSTEM=="firmware", RUN+="/sbin/udev_run_hotplugd"
[edit] LED
For laptops with wireless LED's, simply add (all options must be contained in one single line):
| File: /etc/modules.d/ipw2200 |
options ipw2200 led=1 #(add other options here if applicable) |
The "led=1" parameter is a litte bit tricky on laptops without Hardware WLAN-switch (e.g. an IBM Thinkpad X30):
If you use the parameter when insmoding ipw2200, radio stays off and cannot (ot at least not easily) be turned on. I guess the module sees a non existant switch that is always off.
To enable radio:
echo 0 > /sys/bus/pci/drivers/ipw2200/0000:02:03.0/rf_kill
Note to change the PCI ID numbers in the path (0000:02:03.0) to fit your configuration.
[edit] Troubleshooting
[edit] Intel Pro/Wireless 2200 fails with "ioctl[xxxx]: No such device"
emerge -av ipw2200-firmware. Reload the driver and try again.
