This howto assumes that you have the usual tools installed to compile a package from source and also the patch package.
1: Purpose
The iwl3945 driver and unicode have been problematic for many users who were happier with the reliable but now deprecated ipw3945 driver and userspace daemon. I had been tolerably satisfied until recent updates to the iwl3945 firmware left me with frequent disconnections and timeouts, CPU spikes, browser crashes, occasional complete crashes of X and even a kernel oops.
I resolved to try the old ipw3945 driver. I've been successful in this, I now have a fully functional and reliable 3945ABG wireless adapter with working LED, stronger signal, reliable scanning and no panics. Just like old times except I'm using kernel 2.6.25-2-686
Here's how to do it
2: Obtain the necessary packages:
The old Debian driver package won't work on kernels 2.6.24 and newer so we'll build the driver from the Intel package available at http://ipw3945.sourceforge.net/downloads.php Download the newest version which is 1.2.2
Also download the unicode from http://bughost.org/ipw3945/ucode/ipw394 ... 1.14.2.tgz
We'll also need a patch which will enable the driver to build on the newer kernels. Go to http://james.colannino.org/downloads.html and download ipw3945-1.2.2.patch.
And finally download the old Debian ipw3945d package from http://snapshot.debian.net/archive/2007 ... 5_i386.deb
3: Install the unicode
Unpack ipw3945-ucode-1.14.2.tgz
As root:
Code: Select all
# cp ipw3945.ucode /lib/firmware
Unpack the driver tarball ipw3945-1.2.2.tgz. Copy the patch file ipw3945-1.2.2.patch into the directory ipw3945-1.2.2. We can now patch the driver so it will build on our newer kernel:
Code: Select all
$ cd ipw3945-1.22
$ patch ipw3945.h ipw3945-1.2.2.patch
Code: Select all
$ make
Code: Select all
# checkinstall
Now we have the unicode and the driver installed, it's time to install the userspace daemon.
5: Install the ipw3945 daemon
The old Debian package is preferred to Intel's source package for the following reasons:
a) The daemon needs to run with root privileges in userspace. This is a poor idea. Fortunately the Debian package solves this problem by automatically creating a special user and group Debian-ipw3945d. This special user has no access to a shell and is only able to run the ipw3945d. This is much safer than having the daemon run with full root privileges.
b) The Debian package creates the necessary startup scripts, modprobe.d file, logrotate script, and installs the docs/man page to the correct place. Everything is automatically in the right place and has the right permissions.
c) It's easy and it works
Change to the directory containing your downloaded ipw3945d_1.7.22-5_i386.deb and as root:
Code: Select all
# dpkg -i ipw3945d_1.7.22-5_i386.deb
6: Blacklist iwl3945
iwl3945 is a kernel module so simply adding it to /etc/modprobe.d/blacklist will not prevent it from loading. Instead we create the file /etc/modprobe.d/00local as root:
Code: Select all
# touch /etc/modprobe.d/00local
Code: Select all
#disable iwl3945 to allow ipw3945
install iwl3945 /bin/true
7: Nearly done!
Reboot, connect, enjoy
Disclaimer: I'm no expert so following this howto is done at your own risk. However, everything is fully and easily reversible as my method uses deb packages to install the driver and the userspace daemon which can be purged using your preferred package manager. To remove the unicode is as simple as deleting the file in /lib/firmware and to re-enable iwl3945 is as easy as deleting the file /etc/modprobe.d/00local.
As far as I can tell the only issue anyone might have will be in running make to build the driver. If this fails please ensure you have the packages build-essential and checkinstall installed and also the linux-headers package for your kernel.