以下内容描述了 Debian 系统下如何支持 Intel 3945 和 4965 芯片的 WiFi 设备。
iwl3945 和 iwl4965(Squeeze 也就是 Debian 6 下的 iwlagn 软件包)是由 iwlwifi 驱动生成的模块,它们支持 Intel 3945ABG 和 4965AGN 无线 LAN 设备。这是由 Intel 支持的开源驱动,代替了已经不是自由软件的 ipw3945 驱动,这个驱动需要一个用户空间的守护进程。本文的最后列出了支持的设备。
需要一个 non-free 的固件,可以由 firmware-iwlwifi 软件包提供。固件必须先安装,然后才能对设备进行操作。
关于对 Intel 无线 WiFi Link 5000,6000 和 1000 系列设备的支持,请参考 iwlagn 。
安装
Squeeze(也就是 Debian 6.0)
- 为 /etc/apt-sources.list 添加一个 non-free 的组件。例如:
# Debian Squeeze/6.0
deb http://ftp.us.debian.org/debian squeeze main contrib non-free
- 更新可用软件包列表。安装 firmware-iwlwifi 和 wireless-tools 软件包:
# aptitude update
# aptitude install firmware-iwlwifi wireless-tools
- 必要的内核模块必须自动加载。如果必要,也可以手动加载:
# modprobe iwl3945
或者
# modprobe iwlagn
- 确定你的设备有一个可用的接口:
# iwconfig
- 唤起接口,激活设备,例如:
# ifconfig wlan0 up
- 对你的无线接口进行适当的配置
可能存在的问题
大多数笔记本有一个无线网络的开关按钮。 【 Linux公社 www.Linuxidc.com 】确信已经打开这个开关。
接口被命名为 wlan0_rename(sysfs_create_symlink 失败)
NetworkManager 软件可能无法处理无线设备。/var/log/syslog 可能有类似下面的信息:
kernel: iwl3945: Intel(R) PRO/Wireless 3945ABG/BG Network Connection driver for Linux, 0.1.15ks
kernel: iwl3945: Copyright(c) 2003-2007 Intel Corporation
kernel: ACPI: PCI Interrupt 0000:03:00.0[A] -> GSI 17 (level, low) -> IRQ 22
kernel: PCI: Setting latency timer of device 0000:03:00.0 to 64
kernel: iwl3945: Detected Intel PRO/Wireless 3945ABG Network Connection
kernel: iwl3945: Tunable channels: 13 802.11bg, 23 802.11a channels
kernel: wmaster0: Selected rate control algorithm ‘iwl-3945-rs’
kernel: net eth2: device_rename: sysfs_create_symlink failed (-17)
kernel: udev: renamed network interface wmaster0 to eth2
kernel: net wlan0_rename: device_rename: sysfs_create_symlink failed (-17)
这可能是由于你之前使用过 ipw3945 模块而导致。
解决方法
在 /etc/udev/rules.d/70-persistent-net.rules 文件中,移除类似这样的指令:
# PCI device 0x8086:0x4227 (ipw3945)
SUBSYSTEM==”net”, DRIVERS==”?*”, ATTRS{address}==”00:13:02:4c:12:12″, NAME=”eth2″
然后移除模块,重新插入:
# modprobe -r iwl3945 ; modprobe iwl3945
在 /etc/udev/rules.d/70-persistent-net.rules 文件中你应该有类似下面的指令:
# PCI device 0x8086:0x4227 (iwl3945)
SUBSYSTEM==”net”, DRIVERS==”?*”, ATTR{address}==”00:13:02:4c:12:12″, ATTR{type}==”1″, NAME=”wlan0″
无法联接到访问点(access point,AP)
如果已经指定了一个 SSID 却无法联接到访问点,甚至不要求密码的时候也联接不上,接口可能首先需要被唤起,然后再定义 SSID:
# ip link set wlan0 up
# iwconfig wlan0 essid YourESSID
如果设备依然不能联接上,甚至是带有 SSID 和密码的情况下,可以尝试:
# iwconfig wlan0 ap any
你可能希望尝试在 /etc/network/interfaces 中定义的不同的 wpa-sacn-ssid 和 wpa-ap-scan 值。之前的命令既接受 0 或 1,后面是 0,1 或者 2。可以设置为 wpa-scan-ssid 为 0 同时 wpa-ap-scan 为 1,但如果它没有作用的话,请尝试其它的配置。
你可能会发现对重试次数设置一个比较高的数值会对有助于联接到 WEP 访问点,或者工作在其它无线 LAN 设备,但是发送重复的分离。可以做如下尝试,插入一个重试次数数值:
# iwconfig wlan0 retry <value>
它会使用 dhclient 多次尝试获取一个 IP 地址。
无法看见任何网络
如果 NetworkManager 可以使用设备,但无法探测到任何无线网络,可能是因为没有安装固件引起的:
ACPI: PCI Interrupt 0000:03:00.0[A] -> GSI 17 (level, low) -> IRQ 17
kernel: PM: Writing back config space on device 0000:03:00.0 at offset 1 (was 100102, writing 40100106)
kernel: firmware: requesting iwlwifi-4965-1.ucode
kernel: iwl4965: iwlwifi-4965-1.ucode firmware file req failed: Reason -2
kernel: iwl4965: Could not read microcode: -2
按照之前所述,安装设备固件。
联接成功,却无法发送和接收
可能是你的防火墙阻止了流量。这种情况大部分会在你从 ipw3945 转换到 iwlwifi 的时候发生,因为接口的名字从 eth2 转换成 wlan0。检查你的防火墙设置。例如,如果你使用 shorewall,检查 /etc/shorewall/ 目录下的文件,把接口的名字改成 wlan0。
支持的设备
HowToIdentifyADevice/PCI 页面解释了如何确定一个 PCI 设备。
iwl3945
以下内容是基于 Debian 2.6.32(2.6.32-30)内核 modinfo iwl3945 的 alias 字段。
PCI: 8086:4222 Intel Corporation PRO/Wireless 3945ABG [Golan] Network Connection
PCI: 8086:4227 Intel Corporation PRO/Wireless 3945ABG [Golan] Network Connection
iwlagn
以下信息基于 Debian 2.6.32(2.6.32-30)内核 modinfo iwlagn 的 alias 字段,同时移除了非 4965 设备。
PCI: 8086:4229 Intel Corporation PRO/Wireless 4965 AG or AGN [Kedron] Network Connection
PCI: 8086:4230 Intel Corporation PRO/Wireless 4965 AG or AGN [Kedron] Network Connection