Difference between revisions of "Ipw3945"

From ArchWiki
Jump to navigation Jump to search
m (sf.net url fix/standardization)
Line 125: Line 125:
# Arch Linux Custom Kernel v2.6.22.2
# Arch Linux Custom Kernel v2.6.22.2
title Arch Linux [linux-]
title Arch Linux [kernel-]
root (hd0,1)
root (hd0,0)
kernel /boot/linux- root=/dev/sda2 ro
kernel /boot/kernel- root=/dev/sda1 ro

Revision as of 10:36, 23 October 2007

Intel Pro Wireless

The Intel Pro Wireless 3945ABG (ipw3945) chip can be found inside many laptops. This page will help you install, setup and troubleshoot the IPW module (ipw3945), daemon (ipw3945d) and firmware (ipw3945-ucode) for ArchLinux.


First, let us verify that you indeed do have the ipw3945 chip installed in your laptop. We will install the package 'pciutils' which can be found online in the pacman repository, or on the ArchLinux CD. In most cases, you already have this package installed.

Installing pciutils

To install pciutils from CDROM: create the mount point /mnt/cdrom, mount the cdrom to /mnt/cdrom, browse over to /mnt/cdrom/arch/pkg, and locate the 'pciutils-*.pkg.tar.gz' file, then install it using pacman.

# mkdir /mnt/cdrom
# mount /dev/cdrom /mnt/cdrom
# cd /mnt/cdrom/arch/pkg
# ls pciutils*
# pacman -U pciutils-2.2.4-2.pkg.tar.gz

To install pciutils from internet: use pacman to install it.

# pacman -S pciutils

Using lspci to verify

To verify if you have the ipw3945 chip installed, run this command:

# lspci | grep 3945
03:00.0 Network controller: Intel Corporation PRO/Wireless 3945ABG Network Connection (rev 02)

As long as you see the network controller, you are good to go. The output will vary depending on your system configuration. If you don't see any output, then there is a hardware issue. Now that we are sure you have the ipw3945 wireless chip in your laptop, let's proceed to installation.


.. using stock kernel (default)

We will start by installing the ipw3945 package, which contains the module, daemon and firmware pre-compiled for ArchLinux Stock Kernel

# pacman -S ipw3945

Make sure that you TURN ON YOUR WIRELESS SWITCH! At this point, you should be able to load the module, and start the daemon, like so:

# modprobe ipw3945
# ipw3945d

And now, the daemon will run and start logging it's activities. We need to view these activities with 'dmesg', like so:

# dmesg | grep ipw
ipw3945: Intel(R) PRO/Wireless 3945 Network Connection driver for Linux, 1.2.2d
ipw3945: Copyright(c) 2003-2006 Intel Corporation
ipw3945: Detected Intel PRO/Wireless 3945ABG Network Connection
ipw3945: Detected geography ABG (11 802.11bg channels, 13 802.11a channels)

If you do not see the 'detected geography' line within 30 seconds of running the daemon, you will most likely need to compile a custom kernel (see below). If you do see the 'detected geography' line, skip the next chapter.

.. using custom kernel (troubleshoot)

So far, you've tried everything, but no luck. Well, the good news is that there is very little that can break the ipw3945 daemon. The problem is most likely the kernel not having what you need. Please note for the following part that you will need either the internet or a way to transfer files onto your laptop. When it is said that you need to install a package (e.g. wget), you need to either use pacman -S package, or download the .pkg.tar.gz file, and do pacman -U package.pkg.tar.gz. Let's get started on compiling our own kernel:

Install wget

# pacman -S wget

Download the latest kernel from http://www.kernel.org/ by browsing over and located the 'latest stable version of the linux kernel'. You will be presented with a few options (F, V, Vi, C, Changelog), copy the 'F' link, download the file, and extract it:

# mkdir /usr/src
# cd /usr/src
# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-
# tar xjf linux-

We will then browse into the extracted directory, and start the configuration process.

# cd linux-
# make oldconfig
# make menuconfig

You will now be presented with a list of settings that you can enable/disable for your kernel compilation. Most importantly, you need to select your IDE/SATA chipset (also located in lspci) and for the ipw3945, you will need the following configurations:

Template:Box Kernel

Once you have completed setting up your configuration, simply keep hitting exit until the program asks you to save your configuration, at which point you should select 'Yes'. You are now returned to the shell. Now, we will start the compiling of the kernel, modules, and installation of the modules.

# make bzImage
# cp arch/i386/boot/bzImage /boot/kernel-
# make modules
# make modules_install

After these, you simply need to reconfigure grub to load the new kernel

# nano /boot/grub/menu.lst

and add the following to the end of the file:

# Arch Linux Custom Kernel v2.6.22.2
title Arch Linux [kernel-]
root (hd0,0)
kernel /boot/kernel- root=/dev/sda1 ro

For the root (hd0,1) line, please copy it from the existing kernel in menu.lst. For 'root=/dev/sda2', please copy it from the existing kernel in menu.lst. Note you do not need the initrd line for custom kernels.

Once you have edited menu.lst, save it with CTRL-X, then Y to save and exit.


Every module in linux needs to be built against the kernel sources of the running kernel in order to function properly (modules include nvidia and ipw3945). So what we will do is compile ipw3945 for our new kernel, but first, we must download it! Browser over to http://ipw3945.sourceforge.net/#downloads and download the latest version of ipw3945 module.

# cd /usr/src
# wget http://downloads.sourceforge.net/ipw3945/ipw3945-1.2.2.tgz

Now browse over to http://bughost.org/ipw3945/ and download the latest version of the firmware and daemon.

# cd /usr/src
# wget http://bughost.org/ipw3945/ucode/ipw3945-ucode-1.14.2.tgz
# wget http://bughost.org/ipw3945/daemon/ipw3945d-1.7.22.tgz

Now we will extract, compile and install the ipw3945 module, firmware and daemon. Please, before proceeding, make sure you have the 'ipw3945' package uninstalled from your system for it will conflict with the latest version:

# pacman -Rsc ipw3945
# cd /usr/src
# tar xzf ipw3945-1.2.2.tgz
# tar xzf ipw3945-ucode-1.14.2.tgz
# tar xzf ipw3945d-1.7.22.tgz
# cd ipw3945-ucode-1.14.2
# mkdir /lib/firmware
# cp ipw3945.ucode /lib/firmware
# cd /usr/src
# cd ipw3945d-1.7.22
# cd x86
# cp ipw3945d /sbin/
# cd /usr/src
# cd ipw3945-1.2.2
# make
# make install

At this point, the module, firmware and daemon have been setup. You can now attempt to load the module, then start the daemon:

# modprobe ipw3945
# ipw3945d
# dmesg | grep ipw
ipw3945: Intel(R) PRO/Wireless 3945 Network Connection driver for Linux, 1.2.2d
ipw3945: Copyright(c) 2003-2006 Intel Corporation
ipw3945: Detected Intel PRO/Wireless 3945ABG Network Connection
ipw3945: Detected geography ABG (11 802.11bg channels, 13 802.11a channels)

Voila! Everything works fine! Every time you need to use the wireless, simply load the module, and start the daemon. This process can be automated on every bootup (see below).


In this section, we will setup the module and daemon to automatically load on boot up.

# nano /etc/rc.conf

Simple add 'ipw3945' to the modules=() list, an add 'ipw3945d' to the daemons=() list. Note that you MUST add the ipw3945d daemon BEFORE the 'network' daemon.

Congratulations! You should now have a fully functional Intel Wireless Pro card in your laptop! You will find that there is a new interface (eth#, or wlan#) located in ifconfig. You can double check everything worked by doing this:

# iwconfig
eth1      IEEE 802.11g  ESSID:""
          Mode:Managed  Frequency:2.462 GHz  Access Point: 
          Bit Rate:54 Mb/s   Tx-Power:14 dBm
          Retry limit:15   RTS thr:off   Fragment thr:off
          Encryption key:A834-3CF5-EC85-EB2A-17E4-17A4-AD   Security mode:open
          Power Management:off
          Link Quality=84/100  Signal level=-49 dBm  Noise level=-50 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:1844   Missed beacon:0

For more information on setting it up, please see <insert link to network setup here>. Enjoy!