Well I converted to the iwlwifi drivers for my Intel 3945 wireless card in my laptop today, (from the ipw3945 drivers), and I thought I would post what I did, and what I encountered for others following this path. First off it seems that the iwlwifi drivers are designed to work against a 2.6.22 kernel or greater. I know you can patch prior kernels, but since I was updating things, I decided to update my kernel as well. I used the most recent gentoo-sources, 2.6.22-r1, and the masked Intel iwlwifi drivers, and I didn't apply any patches.
1) Build my kernel, 2.6.22-r1, with the following options;
Code: Select all
Networking ---> Wireless --->
<M> Improved wireless configuration API (which is CONFIG_CFG80211=m in my kernel .config)
<M> Generic IEEE 802.11 Networking Stack (mac80211) (which is CONFIG_MAC80211=m in my kernel.config)
<M> Generic IEEE 802.11 Networking Stack (which is CONFIG_IEEE80211=m in my kernel .config)
and
Device Drivers ---> Network device support ---> Wireless LAN --->
[*] Wireless LAN (IEEE 802.11) (which is CONFIG_WLAN_80211=y in my kernel .config)
I then built and installed the new kernel in /boot.
2) Unmerge my existing ipw3945 drivers and daemons;
Code: Select all
emerge --unmerge ipw3945 ipw3945-ucode ipw3945d
and
rc-update del ipw3945d default
3) Since the new Intel iwlwifi wireless drivers are now in Portage but masked, I started by unmasking them;
Code: Select all
/etc/portage/package.unmask
~net-wireless/iwlwifi-0.0.36
~net-wireless/iwl3945-ucode-2.14.4
~net-wireless/iwl4965-ucode-4.44.15
/etc/portage/package.keywords
~net-wireless/iwlwifi-0.0.36 **
~net-wireless/iwl3945-ucode-2.14.4 **
~net-wireless/iwl4965-ucode-4.44.15 **
I'm not sure that the keywords entry is necessary, but I did it anyway following what I've done in the past to use masked alsa-drivers. Also I know that the 4965-ucode is something I don't need, but for completeness I unmasked it as well.
4) Add the USE keyword for my wireless card to my /etc/make.conf USE line. For me it's ipw3945.
5) I then emerged iwlwifi, which now that my USE flag is set to ipw3945, emerges as a dependency, iwl3945-ucode.
6) I then edited my network settings in /etc/conf.d/net;
Code: Select all
from;
config_eth1=( "dhcp" )
dhcpcd_eth1="-N -t 10"
to
config_wlan0=( "dhcp" )
dhcpcd_wlan0="-N -t 10"
7) I then changed my /etc/init.d network settings with;
Code: Select all
rc-update del net.eth1 default
cd /etc/init.d
rm net.eth1
ln -s net.lo net.wlan0
rc-update add net.wlan0 default
Once I rebooted I received the same strange "rename" message with udev, and was left with an ifconfig -a that showed an eth1 interface and a wlan0_rename interface. As others have pointed out udev's persistent rules need to be tweaked in order to not confuse the naming of the ipw3945 driver interface, which was eth1, and the new iwl3945 interface. The problem is that with a rule already in place for ipw3945 using the same MAC address, udev will get confused. So;
8) If you edit /etc/udev/rules.d/70-persistent-net.rules and comment out the ipw3945 SUBSYSTEM line
Code: Select all
# PCI device 0x8086:0x4222 (ipw3945)
#SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="00:00:00:00:00:00", NAME="eth1"
The next time you boot udev will see the iwl3945 correctly, and add the following line to the same rules file.
Code: Select all
# PCI device 0x8086:0x4222 (iwl3945)
SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="00:00:00:00:00:00", ATTRS{type}=="1", NAME="wlan0"
NOW.. I could reboot my computer, iwl3945 would get correctly loaded, and I would have the correct wlan_master and wlan0 interface created and started on my computer. The only problem is that I could not associate with my AP here. I then tried unloading the iwl3945 module and loading it with the following parameters;
Code: Select all
modprobe iwl3945 antenna=0 disable=0 disable_hw_scan=0 mode=0
and everything began working correctly. I then rebooted, and everything came up normally with no need to unload the module and reload with any parameters. I'm also not using wpa_supplicant, but I would like to start using networkmanager. Does anyone know if it's as simple as emerging networkmanager with its dependencies and rebooting?
Kudos to everyone working on this..