Due to the problem I was having connecting to ad-hoc network in Ubuntu 8.10, I decided to take the plunge and try using the ipw3945 driver instead of iwl3945 (which is in the kernel since ubuntu 8.04 I think?).

To save the suspense, I was able to compile a new (old) ipw3945 driver for my system, install the driver, and get my system connecting to an ad-hoc network, tethering to an iPhone running PdaNet.

The iPhone/PdaNet stuff is for another post.

But here’s what I did to install iwl3945…

This was my first “linux driving compiley kinda thing”, so I just followed the advice from the following posts (including comments) word-for-word hahaha:

In my own words…

sudo cp ipw3945-ucode-1.14.2/ipw3945.ucode /lib/firmware
  • Patch driver:
patch ipw3945-1.2.2/Makefile ipw3945-1.2.2-build.patch
patch ipw3945-1.2.2/ipw3945.c ipw3945-1.2.2-kernel-2.6.27.patch
patch ipw3945-1.2.2/ipw3945.h ipw3945-1.2.2-kernel-2.6.24.patch
  • Build driver:
make SHELL=/bin/bash
  • Create and install deb package:
sudo checkinstall
  • Install ipw3945 daemon (notice 64bit again, also the daemon will not start since the driver is not loaded yet):
sudo dpkg -i ipw3945d_1.7.22-5_amd64.deb
  • Tell Ubuntu to load ipw3945 instead of iwl3945.
    Create the /etc/modprobe.d/00local file as root:
sudo /etc/modprobe.d/00local
  • And add the following lines to it:
#disable iwl3945 to allow ipw3945
install iwl3945 /bin/true
  • And reboot :-)

Related pages: