Intel Corporation PRO/Wireless 3945ABG

From Gentoo Wiki
Jump to:navigation Jump to:search
Other languages:
Resources

This guide describes how to configure Linux to be able to work with an Intel Corporation PRO 3945ABG wireless card. The wireless configuration itself is not part of this guide, please see Wi-Fi for this.

Kernel

Hardware detection

First verify if the hardware is detected. A number of approaches can be used.

lspci

With lspci the PCI based hardware can be searched through:

root #lspci -nnkv | sed -n '/Network/,/^$/p' | head -n -1
08:00.0 Network controller [0280]: Intel Corporation PRO/Wireless 3945ABG [Golan] Network Connection [8086:4222] (rev 02)
        Subsystem: Hewlett-Packard Company PRO/Wireless 3945ABG [Golan] Network Connection [103c:135c]
        Flags: bus master, fast devsel, latency 0, IRQ 16
        Memory at e8000000 (32-bit, non-prefetchable) [size=4K]
        Capabilities: [c8] Power Management version 2
        Capabilities: [d0] MSI: Enable- Count=1/1 Maskable- 64bit+
        Capabilities: [e0] Express Legacy Endpoint, MSI 00
        Kernel driver in use: iwl3945
        Kernel modules: iwl3945

lshw

With lshw all hardware information can be searched through:

root #lshw
  *-core
     *-pci
        *-pci:0
           *-network
                description: Ethernet interface
                product: PRO/Wireless 3945ABG [Golan] Network Connection
                vendor: Intel Corporation
                physical id: 0
                bus info: pci@0000:08:00.0
                logical name: wlp8s0
                version: 02
                serial: 00:1b:77:b1:c8:8e
                width: 32 bits
                clock: 33MHz
                capabilities: pm msi pciexpress bus_master cap_list ethernet physical
                configuration: broadcast=yes driver=iwl3945 driverversion=4.1.8-gentoo firmware=15.32.2.9 ip=192.168.178.23 latency=0 link=yes multicast=yes
                resources: irq:16 memory:e8000000-e8000fff

IEEE 802.11

Activate at least cfg80211 (CONFIG_CFG80211) and mac80211 (CONFIG_MAC80211).

KERNEL linux-4.19 example
[*] Networking support  --->
    [*] Wireless  --->
        <M>   cfg80211 - wireless configuration API
        [ ]     nl80211 testmode command
        [ ]     enable developer warnings
        [ ]     cfg80211 certification onus
        [*]     enable powersave by default
        [ ]     cfg80211 DebugFS entries
        [ ]     support CRDA
        [ ]     cfg80211 wireless extensions compatibility
        <M>   Generic IEEE 802.11 Networking Stack (mac80211)
        [*]   Minstrel
        [*]     Minstrel 802.11n support
        [ ]       Minstrel 802.11ac support
              Default rate control algorithm (Minstrel)  --->
        [ ]   Enable mac80211 mesh networking (pre-802.11s) support
        -*-   Enable LED triggers
        [ ]   Export mac80211 internals in DebugFS
        [ ]   Trace all mac80211 debug messages
        [ ]   Select mac80211 debugging features  ----

Minstrel and its 802.11n support is a rate control algorithm. Some wireless drivers might require it enabled.

Important
In case the wireless configuration API (CONFIG_CFG80211) is built into the kernel (<*>) instead as a module (<M>), the driver won't be able to load regulatory.db from /lib/firmware resulting in broken regulatory domain support. Please set CONFIG_CFG80211=m or add regulatory.db and regulatory.db.p7s (from net-wireless/wireless-regdb) to CONFIG_EXTRA_FIRMWARE.

iwl3945 device driver as module

Intel Corporation PRO/Wireless 3945ABG needs the iwl3945 driver aka iwlegacy. Search (/ in make menuconfig) shows where to find it:

KERNEL linux-4.1 search results
Symbol: IWL3945 [=m]
 Type  : tristate
 Prompt: Intel PRO/Wireless 3945ABG/BG Network Connection (iwl3945)
   Location:
     -> Device Drivers
       -> Network device support (NETDEVICES [=y])
 (1)     -> Wireless LAN (WLAN [=y])
   Defined at drivers/net/wireless/iwlegacy/Kconfig:37
   Depends on: NETDEVICES [=y] && WLAN [=y] && PCI [=y] && MAC80211 [=y]
   Selects: IWLEGACY [=m]

Set it as a module <M> as shown here. After changes on kernel configuration do not forget to rebuild the kernel.

KERNEL linux-4.1 with modular drivers
Device Drivers  --->
  ...
  [*] Network device support  --->
    --- Network device support
      ...
      [*]   Wireless LAN  --->
        ...
        --- Wireless LAN
          < >   Marvell 8xxx Libertas WLAN driver support with thin firmware
          < >   Cisco/Aironet 34X/35X/4500/4800 ISA and PCI cards
          < >   Atmel at76c50x chipset  802.11b support
          < >   Atmel at76c503/at76c505/at76c505a USB cards
          < >   Intersil Prism GT/Duette/Indigo PCI/Cardbus (DEPRECATED)
          < >   USB ZD1201 based Wireless device support
          < >   Wireless RNDIS USB support
          < >   Realtek 8180/8185/8187SE PCI support
          < >   Realtek 8187 and 8187B USB support
          < >   ADMtek ADM8211 support
          < >   Simulated radio testing tool for mac80211
          < >   Marvell 88W8xxx PCI/PCIe Wireless support
          < >   Atheros Wireless Cards  ----
          < >   Broadcom 43xx wireless support (mac80211 stack)
          < >   Broadcom 43xx-legacy wireless support (mac80211 stack)
          < >   Broadcom IEEE802.11n PCIe SoftMAC WLAN driver
          < >   Broadcom IEEE802.11n embedded FullMAC WLAN driver
          < >   IEEE 802.11 for Host AP (Prism2/2.5/3 and WEP/TKIP/CCMP)
          < >   Intel PRO/Wireless 2100 Network Connection
          < >   Intel PRO/Wireless 2200BG and 2915ABG Network Connection
          < >   Intel Wireless WiFi Next Gen AGN - Wireless-N/Advanced-N/Ultimate-N (iwlwifi)
          < >   Intel Wireless WiFi 4965AGN (iwl4965)
          <M>   Intel PRO/Wireless 3945ABG/BG Network Connection (iwl3945)
                  iwl3945 / iwl4965 Debugging Options  --->
          < >   Marvell 8xxx Libertas WLAN driver support
          < >   Hermes chipset 802.11b support (Orinoco/Prism2/Symbol)
          < >   Softmac Prism54 support
          < >   Ralink driver support  ----
          < >   Realtek rtlwifi family of devices  ----
          [ ]   TI Wireless LAN support  ----
          < >   ZyDAS ZD1211/ZD1211B USB-wireless support
          < >   Marvell WiFi-Ex Driver
          < >   CW1200 WLAN support
          < >   Redpine Signals Inc 91x WLAN driver support

The help (which can be obtained by hitting the h in make menuconfig) on the Intel PRO/Wireless 3945ABG/BG ... line will show more details about the driver:

CODE linux-4.1 help
CONFIG_IWL3945:
  
 Select to build the driver supporting the:
  
 Intel PRO/Wireless 3945ABG/BG Network Connection
  
 This driver uses the kernel's mac80211 subsystem.
  
 In order to use this driver, you will need a microcode (uCode)
 image for it. You can obtain the microcode from:
  
         <http://intellinuxwireless.org/>.
  
 The microcode is typically installed in /lib/firmware. You can
 look in the hotplug script /etc/hotplug/firmware.agent to
 determine which directory FIRMWARE_DIR is set to when the script
 runs.
  
 If you want to compile the driver as a module ( = code which can be
 inserted in and removed from the running kernel whenever you want),
 say M here and read <file:Documentation/kbuild/modules.txt>.  The
 module will be called iwl3945.

iwl3945 device driver built-in

In case the driver is built into the kernel (<*>) instead as a module (<M>), also the firmware needs to be built into the kernel.

KERNEL linux-4.1 with built-in drivers
Device Drivers  --->
  Generic Driver Options  --->
    -*- Userspace firmware loading support
    [ ]   Include in-kernel firmware blobs in kernel binary
    (iwlwifi-3945-2.ucode) External firmware blobs to build into the kernel binary
    (/lib/firmware) Firmware blobs root directory
    [ ] Fallback user-helper invocation for firmware loading

Firmware

The iwlwifi-3945-ucode-15.32.2.9.tgz firmware (or later) is needed. It is available through the sys-kernel/linux-firmware package.

root #emerge --ask sys-kernel/linux-firmware

Network device names

Warning
This section is obsolete. See Udev#Optional: Disable_or_override_predictable_network_interface_naming for updated instructions.

Network device names such as eth0 or wlan0 as provided by the kernel are normally changed on system boot (see dmesg) by the /lib/udev/rules.d/80-net-name-slot.rules udev rule.

To keep the classic naming this rule can be overwritten with an equally named empty file in the /etc/udev/rules.d directory:

root #touch /etc/udev/rules.d/80-net-name-slot.rules

Check the setup

Module loading

modprobe should not return any errors:

root #modprobe iwl3945

More information about the driver module (such as the supported parameters) can be obtained by modinfo iwl3945:

user $modinfo iwl3945
filename:       /lib/modules/4.1.15-gentoo-r1/kernel/drivers/net/wireless/iwlegacy/iwl3945.ko
firmware:       iwlwifi-3945-2.ucode
license:        GPL
author:         Copyright(c) 2003-2011 Intel Corporation <ilw@linux.intel.com>
version:        in-tree:s
description:    Intel(R) PRO/Wireless 3945ABG/BG Network Connection driver for Linux
srcversion:     A279E9C3E47A7F92078CA7C
alias:          pci:v00008086d00004227sv*sd*bc*sc*i*
alias:          pci:v00008086d00004222sv*sd*bc*sc*i*
alias:          pci:v00008086d00004227sv*sd00001014bc*sc*i*
alias:          pci:v00008086d00004222sv*sd00001044bc*sc*i*
alias:          pci:v00008086d00004222sv*sd00001034bc*sc*i*
alias:          pci:v00008086d00004222sv*sd00001005bc*sc*i*
depends:        iwlegacy
intree:         Y
vermagic:       4.1.15-gentoo-r1 SMP mod_unload 
parm:           antenna:select antenna (1=Main, 2=Aux, default 0 [both]) (int)
parm:           swcrypto:using software crypto (default 1 [software]) (int)
parm:           disable_hw_scan:disable hardware scanning (default 1) (int)
parm:           fw_restart:restart firmware in case of error (int)

Validation

Dmesg

After reboot, grep the dmesg output for 08:00.0, iwl3945 and wlp8s0:

user $dmesg | grep -i '08:00.0\|iwl3945\|wlp8s0'
[    0.148048] pci 0000:08:00.0: [8086:4222] type 00 class 0x028000
[    0.148099] pci 0000:08:00.0: reg 0x10: [mem 0xe8000000-0xe8000fff]
[    0.148419] pci 0000:08:00.0: PME# supported from D0 D3hot D3cold
[    0.148518] pci 0000:08:00.0: disabling ASPM on pre-1.1 PCIe device.  You can enable it with 'pcie_aspm=force'
[    7.198115] iwl3945: Intel(R) PRO/Wireless 3945ABG/BG Network Connection driver for Linux, in-tree:s
[    7.198118] iwl3945: Copyright(c) 2003-2011 Intel Corporation
[    7.198183] iwl3945 0000:08:00.0: can't disable ASPM; OS doesn't have ASPM control
[    7.252250] iwl3945 0000:08:00.0: Tunable channels: 13 802.11bg, 23 802.11a channels
[    7.252254] iwl3945 0000:08:00.0: Detected Intel Wireless WiFi Link 3945ABG
[    7.492257] iwl3945 0000:08:00.0 wlp8s0: renamed from wlan0
[    7.504225] systemd-udevd[278]: renamed network interface wlan0 to wlp8s0
[   15.828778] iwl3945 0000:08:00.0: loaded firmware version 15.32.2.9

See also