ipw3945 wireless card

I'm currently using the CentOS Plus kernel on my installation:

[[email protected] ~]# uname -a
Linux esprit 2.6.18-92.1.6.el5.centos.plus #1 SMP Thu Jun 26 12:18:07 EDT 2008 x86_64 x86_64 x86_64 GNU/Linux

and this comes with an iwl3945 module already built into it.  I'm unsure if the standard CentOS kernels do or not, as I've not currently got one installed - only the CentOS Plus ones.  So, I needed to find out what version it was, so I could find the right iwl3945-ucode firmware.  From dmesg, it was staring me in the face, since the firmware wasn't on the system - only the module was.

iwl3945: Intel(R) PRO/Wireless 3945ABG/BG Network Connection driver for Linux, 1.2.22ks
iwl3945: Copyright(c) 2003-2007 Intel Corporation
PCI: Enabling device 0000:10:00.0 (0000 -> 0002)
ACPI: PCI Interrupt 0000:10:00.0[A] -> GSI 17 (level, low) -> IRQ 185
PCI: Setting latency timer of device 0000:10:00.0 to 64
iwl3945: Detected Intel PRO/Wireless 3945ABG Network Connection
iwl3945: iwlwifi-3945-1.ucode firmware file req failed: Reason -2
iwl3945: Could not read microcode: -2

so, finding out the module version:

 [[email protected] ~]# modinfo iwl3945
filename:       /lib/modules/2.6.18-92.1.6.el5.centos.plus/kernel/drivers/net/wireless/iwlwifi/iwl3945.ko
license:        GPL
author:         Copyright(c) 2003-2007 Intel Corporation
version:        1.2.22ks
description:    Intel(R) PRO/Wireless 3945ABG/BG Network Connection driver for Linux
srcversion:     FE4714B501FE8E9C203D73A
alias:          pci:v00008086d00004227sv*sd*bc*sc*i*
alias:          pci:v00008086d00004222sv*sd*bc*sc*i*
depends:        mac80211,compat
vermagic:       2.6.18-92.1.6.el5.centos.plus SMP mod_unload gcc-4.1
parm:           antenna:select antenna (1=Main, 2=Aux, default 0 [both]) (int)
parm:           disable:manually disable the radio (default 0 [radio on]) (int)
parm:           hwcrypto:using hardware crypto engine (default 0 [software])
 (int)
parm:           debug:debug output mask (int)
parm:           disable_hw_scan:disable hardware scanning (default 0) (int)
parm:           queues_num:number of hw queues. (int)
parm:           qos_enable:enable all QoS functionality (int)
module_sig:     883f3504863c7795c7adb72c4c65e112764209f5f73e1af31223ad37302e6f7766ba5e2917daf09d1fe8f3fdf08dc3e1ec9d92390cf4563b4fbb188

the most important bit here is version: 1.2.22ks.  I checked the following website:

comparing the data of the 1.2.22.tgz with the iwlwifi-3945-ucode firmware and downloaded iwlwifi-3945-ucode-2.14.1.5.tgz.  I then moved the firmware into the /lib/firmware directory, and then modprobe'd iwl3945 again.  This time I had better results:

iwl3945: Intel(R) PRO/Wireless 3945ABG/BG Network Connection driver for Linux, 1.2.22ks
iwl3945: Copyright(c) 2003-2007 Intel Corporation
PCI: Enabling device 0000:10:00.0 (0000 -> 0002)
ACPI: PCI Interrupt 0000:10:00.0[A] -> GSI 17 (level, low) -> IRQ 185
PCI: Setting latency timer of device 0000:10:00.0 to 64
iwl3945: Detected Intel PRO/Wireless 3945ABG Network Connection
iwl3945: Tunable channels: 13 802.11bg, 23 802.11a channels
phy0: Selected rate control algorithm 'iwl-3945-rs'

as you can see, now no problem trying to load the firmware.  This then gave me a wlan0 interface for me to use.  I simply now just did:

service NetworkManager restart

so that the Network Manager applet in Gnome would now allow me to connect to wireless networks.  I picked my network, and connected no problems.  All sorted!