Difference between revisions of "Ipw2200"
(→Testing the driver) |
(regrouped new wpa_supplicant random SSID section with older power section) |
||
(43 intermediate revisions by 19 users not shown) | |||
Line 2: | Line 2: | ||
|style="vertical-align:top;padding-right:20px;width:10px;white-space:nowrap;" | __TOC__ | |style="vertical-align:top;padding-right:20px;width:10px;white-space:nowrap;" | __TOC__ | ||
|style="vertical-align:top" | | |style="vertical-align:top" | | ||
− | + | ||
− | Linux driver for the | + | The '''Ipw2200''' is the Linux driver for the [[Intel PRO/Wireless 2200BG Mini-PCI Adapter]] and [[Intel PRO/Wireless 2915ABG Mini-PCI Adapter]] found in [[Centrino]] laptops. This driver only works on 2.6.x kernels (2.6.4 or newer). |
Starting with kernels 2.6.14 the driver is included in kernel. | Starting with kernels 2.6.14 the driver is included in kernel. | ||
− | The | + | {{NOTE|Make sure you have installed the firmware! The ipw2200 documentation will tell you where to find these firmware files and where to install those.}} |
− | |||
− | |||
− | |||
− | + | Included in mainline Linux kernels, tracking the SourceForge version with about 6 months delay. | |
− | |||
− | + | == Packages == | |
*{{Fedora}} Packages(1): Fedora Core includes the ipw2200-drivers in FC3 (with updates) and FC4. You still need to grab the firmware from http://rpm.livna.org/ | *{{Fedora}} Packages(1): Fedora Core includes the ipw2200-drivers in FC3 (with updates) and FC4. You still need to grab the firmware from http://rpm.livna.org/ | ||
*{{Fedora}} Packages(2): http://www.atrpms.net/name/ipw2200/ | *{{Fedora}} Packages(2): http://www.atrpms.net/name/ipw2200/ | ||
− | *{{ | + | *{{Mandriva}}: The ipw2200 driver modules are included in the stock kernel package; the firmware is included in the commercial distribution or available from http://plf.zarb.org/. |
*{{Gentoo}}: The driver is in the portage tree: emerge net-wireless/ipw2200 and net-wireless/ipw2200-firmware | *{{Gentoo}}: The driver is in the portage tree: emerge net-wireless/ipw2200 and net-wireless/ipw2200-firmware | ||
− | *{{Debian}} | + | *{{Debian}} Sarge includes the source code for the modules in package ipw2200-source (http://packages.debian.org/ipw2200-source). You additionally need to download firmware manually. |
+ | *{{Debian}} Etch includes a version of the modules in its kernel or for a later version install package ipw2200-modules-2.6-486 or ipw2200-modules-2.6-686 or ipw2200-modules-2.6-686-bigmem or ipw2200-modules-2.6-k7 or ipw2200-modules-2.6-amd64; or the source code for them in ipw2200-source (http://packages.debian.org/ipw2200-source) to compile one yourself. You additionally need to download firmware manually. | ||
− | + | == Status == | |
− | In development, usable, WEP 128bit encryption works, WPA | + | In development, usable, WEP 128bit encryption works, WPA and WPA2 work with drivers >= 1.0.2 using [[wpa_supplicant]], monitor/rfmon is supported as with version >= 1.0.6. Generally works well, but some users experience problems (especially with firmware restarts and with WPA functionality using [[wpa_supplicant]]). Passing the <tt>hwcrypto=0</tt> module parameter improves reliability for many users. |
+ | |||
+ | The ipw2200 driver up to version 1.0.6 (in combination with some newer kernels) had a problem getting DHCP leases (it turned out to be a bug in the broadcasting code). Version 1.0.7 seems to have fixed this. | ||
+ | |||
+ | Older ipw2200 driver versions shipped by many distributions have been reported to freeze a T43 after several minutes of intensive communication. Installing version 1.1.2 of the driver solved the problem. | ||
Latest stable versions: | Latest stable versions: | ||
− | * ipw2200 driver: 1.0 | + | * ipw2200 driver: 1.2.0 |
− | * firmware: | + | * firmware: 3.0 |
− | * ieee80211 stack: 1. | + | * ieee80211 stack: 1.2.15 |
Latest development versions: | Latest development versions: | ||
− | * ipw2200 driver: 1. | + | * ipw2200 driver: 1.2.2 |
− | * firmware: 3. | + | * firmware: 3.1 |
− | * ieee80211 stack: 1. | + | * ieee80211 stack: 1.2.18 |
Mainline kernels contain older (but mostly functional) versions of ipw2200 and ieee80211, and still require the addition of the [http://ipw2200.sourceforge.net/firmware.php firmware] files. To get the latest versions you need to separately install the [http://ipw2200.sourceforge.net/downloads.php ipw2200] module and [http://ieee80211.sourceforge.net/downloads.php ieee80211] stack. | Mainline kernels contain older (but mostly functional) versions of ipw2200 and ieee80211, and still require the addition of the [http://ipw2200.sourceforge.net/firmware.php firmware] files. To get the latest versions you need to separately install the [http://ipw2200.sourceforge.net/downloads.php ipw2200] module and [http://ieee80211.sourceforge.net/downloads.php ieee80211] stack. | ||
==Installation== | ==Installation== | ||
− | === | + | === Source Code === |
Download the latest [http://ieee80211.sourceforge.net/downloads.php ieee80211] stack and install it: | Download the latest [http://ieee80211.sourceforge.net/downloads.php ieee80211] stack and install it: | ||
− | :{{cmdroot|tar xzvf ieee80211-1. | + | :{{cmdroot|tar xzvf ieee80211-1.2.15.tgz}} |
− | :{{cmdroot|cd ieee80211-1. | + | :{{cmdroot|cd ieee80211-1.2.15}} |
:{{cmdroot|make}} | :{{cmdroot|make}} | ||
:{{cmdroot|make install}} | :{{cmdroot|make install}} | ||
Download the latest [http://ipw2200.sourceforge.net/downloads.php ipw2200] module and install it: | Download the latest [http://ipw2200.sourceforge.net/downloads.php ipw2200] module and install it: | ||
− | :{{cmdroot|tar xzvf ipw2200-1. | + | :{{cmdroot|tar xzvf ipw2200-1.2.0.tgz}} |
− | :{{cmdroot|cd ipw2200-1. | + | :{{cmdroot|cd ipw2200-1.2.0}} |
:{{cmdroot|make}} | :{{cmdroot|make}} | ||
:{{cmdroot|make install}} | :{{cmdroot|make install}} | ||
Download the matching [http://ipw2200.sourceforge.net/firmware.php firmware] and install it: | Download the matching [http://ipw2200.sourceforge.net/firmware.php firmware] and install it: | ||
− | :{{cmdroot|tar xzvf ipw2200-fw-3. | + | :{{cmdroot|tar xzvf ipw2200-fw-3.1.tgz -C /lib/firmware}} |
− | === | + | === Debian Sarge === |
+ | {{cmdroot|apt-get install ipw2200-source}} | ||
+ | |||
+ | {{cmdroot|module-assistant -t build ipw2200-source}} | ||
+ | |||
+ | [is this how module-assistant works in Sarge?] | ||
+ | |||
+ | === Debian Etch === | ||
+ | |||
+ | The kernel includes a version but if you want a more recent version install the module ipw2200-modules-2.6-486 or ipw2200-modules-2.6-686 or ipw2200-modules-2.6-686-bigmem or ipw2200-modules-2.6-k7 or ipw2200-modules-2.6-amd64 depending on your architecture. | ||
+ | |||
+ | The firmware is not distributed with Debian due to licensing reasons, download the matching version 3.0 [http://ipw2200.sourceforge.net/firmware.php firmware] and install it: | ||
+ | |||
+ | :{{cmdroot|tar -xvf ipw2200-fw-3.1.tgz -C /lib/firmware}} | ||
+ | |||
+ | :{{cmdroot|mv /lib/firmware/ipw2200-fw-3.1/* /lib/firmware}} | ||
+ | |||
+ | === Debian Unstable === | ||
Install ieee80211-source: | Install ieee80211-source: | ||
:{{cmdroot|apt-get install ieee80211-source}} | :{{cmdroot|apt-get install ieee80211-source}} | ||
:{{cmdroot|module-assistant -t build ieee80211-source}} | :{{cmdroot|module-assistant -t build ieee80211-source}} | ||
− | + | The kernel includes a version but if you want a more recent version install the module ipw2200-modules-2.6-486 or ipw2200-modules-2.6-686 or ipw2200-modules-2.6-686-bigmem or ipw2200-modules-2.6-k7 or ipw2200-modules-2.6-amd64 depending on your architecture. | |
− | |||
− | |||
There is a bug in the {{Debian}} package (last checked: Dec 30th 2005) that prevents from linking to <tt>ieee80211</tt> modules using module-assistant. In case it is not fixed in your version, fall back to the regular source installation procedure described above. | There is a bug in the {{Debian}} package (last checked: Dec 30th 2005) that prevents from linking to <tt>ieee80211</tt> modules using module-assistant. In case it is not fixed in your version, fall back to the regular source installation procedure described above. | ||
− | The firmware is not distributed with | + | The firmware is not distributed with Debian due to licensing reasons, download the matching [http://ipw2200.sourceforge.net/firmware.php firmware] and install it: |
− | :{{cmdroot|tar xzvf ipw2200-fw-2.4.tgz -C /lib/hotplug/firmware}} | + | :{{cmdroot|tar xzvf ipw2200-fw-2.4.tgz -C /usr/lib/hotplug/firmware}} |
see /etc/hotplug/firmware.agent for details on configured firmware locations | see /etc/hotplug/firmware.agent for details on configured firmware locations | ||
− | + | Make sure that your firmware files are not in a subdirectory (dmesg will give you warnings after any modprobe when firmware can't be loaded) | |
+ | |||
+ | === Fedora Core === | ||
+ | Installation on Fedora Core 5 works out of the box provided you install the ipw2200-firmware package. However, certain parts of the install process may not set up the wireless networking in a friendly manner using GNOME system tray icons and other tools. Bill Moss has written some excellent HowTo articles, including using VPNC to connect to a remote Cisco IPSec network. | ||
+ | |||
+ | * [http://www.ces.clemson.edu/linux/fc2-ipw2200.shtml Fedora Core 5 and the IPW2200 Wireless Driver] | ||
+ | * [http://www.ces.clemson.edu/linux/nm.shtml Fedora Core 5 NetworkManager, NetworkManager-vpnc and Wireless Driver IPW2200] | ||
− | + | == Testing the driver == | |
:{{cmdroot|modprobe ipw2200}} | :{{cmdroot|modprobe ipw2200}} | ||
:{{cmdroot|iwconfig}} | :{{cmdroot|iwconfig}} | ||
Line 99: | Line 121: | ||
Use [[wpa_supplicant]] with the <tt>-Dwext</tt> argument (not <tt>-Dipw</tt>), and pass the <tt>hwcrypto=0</tt> argument to the <tt>ipw2200</tt> module. | Use [[wpa_supplicant]] with the <tt>-Dwext</tt> argument (not <tt>-Dipw</tt>), and pass the <tt>hwcrypto=0</tt> argument to the <tt>ipw2200</tt> module. | ||
+ | |||
+ | There are some very detailed instructions with working sample configurations on the following link: | ||
+ | [http://www.bughost.org/ipw/wpa_howto.txt ipw2200 WPA instruction] | ||
== Power Management == | == Power Management == | ||
− | To enable power | + | The ipw2200 driver has power management capabilities, which comes in handy while operating on battery. |
+ | |||
+ | To enable reduced power consumption mode, issue: | ||
:{{cmdroot|iwpriv wlan0 set_power 7}} | :{{cmdroot|iwpriv wlan0 set_power 7}} | ||
− | where <tt>wlan0</tt> is the name | + | where <tt>wlan0</tt> is the name of your interface. This will reduce idle power consumption by 1-2 Watts compared to no power management. To return to the "normal" operation mode, you can issue: |
+ | :{{cmdroot|iwpriv wlan0 set_power 6}}. | ||
+ | |||
+ | In order to check current settings, you can issue: | ||
+ | :{{cmdroot|iwpriv wlan0 get_power}}. | ||
+ | |||
+ | More information on these option is available in the {{path|README.ipw3945}} file in the <tt>ipw3945</tt> package ({{path|README.ipw2200}} seems to be rather sketchy about the details of power management). You may want to turn power management on/off on demand in an ACPI script that catches battery/AC events, so that this happens automatically. | ||
+ | |||
+ | Note that there have been [http://www.bughost.org/bugzilla/show_bug.cgi?id=1074 reports] that some versions of ipw2200 react with a firmware error to power management commands. This [http://www.bughost.org/bugzilla/attachment.cgi?id=1024 patch] could alleviate the problem. | ||
*To disable the radio (and further reduce power consumption) when the card is not in use, issue: | *To disable the radio (and further reduce power consumption) when the card is not in use, issue: | ||
Line 111: | Line 146: | ||
*To make the radio off by default after boot, add | *To make the radio off by default after boot, add | ||
options ipw2200 disable=1 | options ipw2200 disable=1 | ||
− | to your {{path|/etc/modprobe.conf}} or equivalent. | + | to your {{path|/etc/modprobe.conf}} or equivalent (on kubuntu 6.10 {{path|/etc/modprobe.d/options}}). |
See {{path|README.ipw2200}} in the <tt>ipw2200</tt> package for details and other options. | See {{path|README.ipw2200}} in the <tt>ipw2200</tt> package for details and other options. | ||
+ | |||
+ | == wpa_supplicant assigns a random SSID wasting power == | ||
+ | |||
+ | Many wpa_supplicant versions implement disconnection by configuring a random SSID. ipw2200 reacts in a very unfortunate way to this, intensively scanning for this random SSID and wasting power. This waste can be seen in powertop. | ||
+ | |||
+ | Here are a number of ways to solve this problem: | ||
+ | * Run <tt>iwconfig eth1 essid off</tt> after every wpa_supplicant disconnection. | ||
+ | * Upgrade to wpa_supplicant version 0.7.1 or higher. Starting from git commit 3145e615 wpa_supplicant does not configure ipw2200 with a random SSID any more. | ||
+ | * Backporting commit 3145e615 to wpa_supplicant version 0.6.8 also fixes the problem. | ||
+ | |||
+ | == Changing the enabled channels == | ||
+ | Permitted WiFi channels vary with geography due to regulation. The EEPROM in this chip contains a country code (programmed by the hardware manufacturer), and the driver converts this to a channel list and enforces it. | ||
+ | |||
+ | If you carry your laptop to a different regulatory region, you may need to change the list of permitted channels according to local regulations. There are two ways to accomplish this: | ||
+ | |||
+ | ===Patching the ipw2200 driver=== | ||
+ | You can alter the ipw2200 driver sourcecode to hard-code the country code instead of reading it from EEPROM. For example, this will allow all 14 channels (perfect for those special occasions in international water): | ||
+ | <pre> | ||
+ | --- ipw2200.c.orig | ||
+ | +++ ipw2200.c | ||
+ | @@ -11344,7 +11344,7 @@ static int ipw_up(struct ipw_priv *priv) | ||
+ | memcpy(priv->net_dev->dev_addr, priv->mac_addr, ETH_ALEN); | ||
+ | |||
+ | for (j = 0; j < ARRAY_SIZE(ipw_geos); j++) { | ||
+ | - if (!memcmp(&priv->eeprom[EEPROM_COUNTRY_CODE], | ||
+ | + if (!memcmp("ZZR", | ||
+ | ipw_geos[j].name, 3)) | ||
+ | break; | ||
+ | } | ||
+ | </pre> | ||
+ | |||
+ | For the list of codes and their meaning, see the "<tt>ipw_geos</tt>" table in the [http://lxr.free-electrons.com/source/drivers/net/wireless/ipw2x00/ipw2200.c#10382 ipw2200.c sourcecode]. | ||
+ | |||
+ | ===Patching the EEPROM=== | ||
+ | |||
+ | Alternatively, you can change the country code in the EEPROM once and for all, and then use the standard ipw2200 driver. | ||
+ | |||
+ | See this guide: | ||
+ | * [http://saftware.de/#ipw2200 Patching the EEPROM]. | ||
+ | |||
+ | Instead of the <tt>hd</tt> program mentioned there, you can use the more common <tt>od</tt> program: | ||
+ | echo -n ZZD | od -t x1 | ||
+ | 0000000 5a 5a 44 | ||
+ | 0000003 | ||
+ | |||
+ | {{WARN|If this procedure goes wrong, you may ruin your wireless card.}} | ||
== Additional Comments == | == Additional Comments == | ||
Your kernel may include an old version of the ipw2200 driver. It is recommended to use the latest version. | Your kernel may include an old version of the ipw2200 driver. It is recommended to use the latest version. | ||
− | Make sure you also install the firmware version needed by the driver version you use. You can find the firmware [http://ipw2200.sourceforge.net/firmware.php here]. To install it, decompress the <tt>.tgz</tt> file into {{path|/lib/firmware}}. | + | Make sure you also install the firmware version needed by the driver version you use. You can find the firmware [http://ipw2200.sourceforge.net/firmware.php here]. To install it, decompress the <tt>.tgz</tt> file into {{path|/usr/lib/hotplug/firmware}} or {{path|/lib/firmware}} depending on your disto. |
The driver doesn't appear to support the MII interface, so any tools like automatic network configuration managers (i.e. whereami) that rely on mii-tool do not work. | The driver doesn't appear to support the MII interface, so any tools like automatic network configuration managers (i.e. whereami) that rely on mii-tool do not work. | ||
+ | See incompatibility with some Access Points described on [[Intel_PRO/Wireless_2200BG_Mini-PCI_Adapter#Problems|this other page]] | ||
+ | |||
+ | == External links == | ||
+ | * [http://ipw2200.sourceforge.net/ Official website] | ||
[[Category:Drivers]] | [[Category:Drivers]] |
Latest revision as of 11:29, 18 November 2010
The Ipw2200 is the Linux driver for the Intel PRO/Wireless 2200BG Mini-PCI Adapter and Intel PRO/Wireless 2915ABG Mini-PCI Adapter found in Centrino laptops. This driver only works on 2.6.x kernels (2.6.4 or newer). Starting with kernels 2.6.14 the driver is included in kernel. NOTE!
Make sure you have installed the firmware! The ipw2200 documentation will tell you where to find these firmware files and where to install those.
Included in mainline Linux kernels, tracking the SourceForge version with about 6 months delay. Packages
StatusIn development, usable, WEP 128bit encryption works, WPA and WPA2 work with drivers >= 1.0.2 using wpa_supplicant, monitor/rfmon is supported as with version >= 1.0.6. Generally works well, but some users experience problems (especially with firmware restarts and with WPA functionality using wpa_supplicant). Passing the hwcrypto=0 module parameter improves reliability for many users. The ipw2200 driver up to version 1.0.6 (in combination with some newer kernels) had a problem getting DHCP leases (it turned out to be a bug in the broadcasting code). Version 1.0.7 seems to have fixed this. Older ipw2200 driver versions shipped by many distributions have been reported to freeze a T43 after several minutes of intensive communication. Installing version 1.1.2 of the driver solved the problem. Latest stable versions:
Latest development versions:
Mainline kernels contain older (but mostly functional) versions of ipw2200 and ieee80211, and still require the addition of the firmware files. To get the latest versions you need to separately install the ipw2200 module and ieee80211 stack. InstallationSource CodeDownload the latest ieee80211 stack and install it:
Download the latest ipw2200 module and install it:
Download the matching firmware and install it:
Debian Sarge
[is this how module-assistant works in Sarge?] Debian EtchThe kernel includes a version but if you want a more recent version install the module ipw2200-modules-2.6-486 or ipw2200-modules-2.6-686 or ipw2200-modules-2.6-686-bigmem or ipw2200-modules-2.6-k7 or ipw2200-modules-2.6-amd64 depending on your architecture. The firmware is not distributed with Debian due to licensing reasons, download the matching version 3.0 firmware and install it:
Debian UnstableInstall ieee80211-source:
The kernel includes a version but if you want a more recent version install the module ipw2200-modules-2.6-486 or ipw2200-modules-2.6-686 or ipw2200-modules-2.6-686-bigmem or ipw2200-modules-2.6-k7 or ipw2200-modules-2.6-amd64 depending on your architecture. There is a bug in the Debian package (last checked: Dec 30th 2005) that prevents from linking to ieee80211 modules using module-assistant. In case it is not fixed in your version, fall back to the regular source installation procedure described above. The firmware is not distributed with Debian due to licensing reasons, download the matching firmware and install it:
see /etc/hotplug/firmware.agent for details on configured firmware locations Make sure that your firmware files are not in a subdirectory (dmesg will give you warnings after any modprobe when firmware can't be loaded) Fedora CoreInstallation on Fedora Core 5 works out of the box provided you install the ipw2200-firmware package. However, certain parts of the install process may not set up the wireless networking in a friendly manner using GNOME system tray icons and other tools. Bill Moss has written some excellent HowTo articles, including using VPNC to connect to a remote Cisco IPSec network.
Testing the driver
ieee80211: 802.11 data/management/control stack, 1.1.6 ieee80211: Copyright (C) 2004-2005 Intel Corporation <jketreno@linux.intel.com> ipw2200: Intel(R) PRO/Wireless 2200/2915 Network Driver, 1.0.8 ipw2200: Copyright(c) 2003-2005 Intel Corporation ipw2200: Detected Intel PRO/Wireless 2915ABG Network Connection NB: To make the wifi LED work on the thinkpad, pass the option In debian this can be done by putting a file named after the module in /etc/modutils with the options in it here we might run a cmd like this
then we must run update-modules to remake /etc/module.conf
WPA supportUse wpa_supplicant with the -Dwext argument (not -Dipw), and pass the hwcrypto=0 argument to the ipw2200 module. There are some very detailed instructions with working sample configurations on the following link: ipw2200 WPA instruction Power ManagementThe ipw2200 driver has power management capabilities, which comes in handy while operating on battery. To enable reduced power consumption mode, issue:
where wlan0 is the name of your interface. This will reduce idle power consumption by 1-2 Watts compared to no power management. To return to the "normal" operation mode, you can issue:
In order to check current settings, you can issue:
More information on these option is available in the README.ipw3945 file in the ipw3945 package (README.ipw2200 seems to be rather sketchy about the details of power management). You may want to turn power management on/off on demand in an ACPI script that catches battery/AC events, so that this happens automatically. Note that there have been reports that some versions of ipw2200 react with a firmware error to power management commands. This patch could alleviate the problem.
options ipw2200 disable=1 to your /etc/modprobe.conf or equivalent (on kubuntu 6.10 /etc/modprobe.d/options). See README.ipw2200 in the ipw2200 package for details and other options. wpa_supplicant assigns a random SSID wasting powerMany wpa_supplicant versions implement disconnection by configuring a random SSID. ipw2200 reacts in a very unfortunate way to this, intensively scanning for this random SSID and wasting power. This waste can be seen in powertop. Here are a number of ways to solve this problem:
Changing the enabled channelsPermitted WiFi channels vary with geography due to regulation. The EEPROM in this chip contains a country code (programmed by the hardware manufacturer), and the driver converts this to a channel list and enforces it. If you carry your laptop to a different regulatory region, you may need to change the list of permitted channels according to local regulations. There are two ways to accomplish this: Patching the ipw2200 driverYou can alter the ipw2200 driver sourcecode to hard-code the country code instead of reading it from EEPROM. For example, this will allow all 14 channels (perfect for those special occasions in international water): --- ipw2200.c.orig +++ ipw2200.c @@ -11344,7 +11344,7 @@ static int ipw_up(struct ipw_priv *priv) memcpy(priv->net_dev->dev_addr, priv->mac_addr, ETH_ALEN); for (j = 0; j < ARRAY_SIZE(ipw_geos); j++) { - if (!memcmp(&priv->eeprom[EEPROM_COUNTRY_CODE], + if (!memcmp("ZZR", ipw_geos[j].name, 3)) break; } For the list of codes and their meaning, see the "ipw_geos" table in the ipw2200.c sourcecode. Patching the EEPROMAlternatively, you can change the country code in the EEPROM once and for all, and then use the standard ipw2200 driver. See this guide: Instead of the hd program mentioned there, you can use the more common od program: echo -n ZZD | od -t x1 0000000 5a 5a 44 0000003 ATTENTION!
If this procedure goes wrong, you may ruin your wireless card.
Additional CommentsYour kernel may include an old version of the ipw2200 driver. It is recommended to use the latest version. Make sure you also install the firmware version needed by the driver version you use. You can find the firmware here. To install it, decompress the .tgz file into /usr/lib/hotplug/firmware or /lib/firmware depending on your disto. The driver doesn't appear to support the MII interface, so any tools like automatic network configuration managers (i.e. whereami) that rely on mii-tool do not work. See incompatibility with some Access Points described on this other page External links |