以下内容描述了 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)

  1. 为 /etc/apt-sources.list 添加一个 non-free 的组件。例如:
    # Debian Squeeze/6.0
    deb http://ftp.us.debian.org/debian squeeze main contrib non-free
  2. 更新可用软件包列表。安装 firmware-iwlwifi 和 wireless-tools 软件包:
    # aptitude update
    # aptitude install firmware-iwlwifi wireless-tools
  3. 必要的内核模块必须自动加载。如果必要,也可以手动加载:
    # modprobe iwl3945
    或者
    # modprobe iwlagn
  4. 确定你的设备有一个可用的接口:
    # iwconfig
  5. 唤起接口,激活设备,例如:
    # ifconfig wlan0 up
  6. 对你的无线接口进行适当的配置

可能存在的问题

大多数笔记本有一个无线网络的开关按钮。确信已经打开这个开关。

接口被命名为 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

参考

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐