博通无线网卡 - Arch Linux 中文维基

跳转到内容

# 博通无线网卡

来自 Arch Linux 中文维基

这篇文章详细地介绍了如何安装和设置博通（Broadcom）无线网卡。

## 1 历史

博通（Broadcom）对于 GNU/Linux 的 Wi-Fi 设备支持方面有着悠久的历史。在它最开始一段历史的大部分时间里，博通的设备要么完全就不支持，要么就得让用户修改固件才能用。有一些无线设备可以通过使用通过逆向工程的驱动程序来获得支持。

2008年8月，博通官方发布了 802.11 Linux STA 驱动程序以在 GNU/Linux 上提供无线设备的驱动程序。尽管这是一个限制许可的驱动程序，也不适用于隐藏的 ESSID，但博通承诺未来将使用更开放的方法。

2010年9月，博通发布了完全开源的无线网卡硬件驱动。这个名为 brcm80211 的驱动程序已被列入到自2.6.37之后的内核中。随着 Linux 内核 2.6.39 发布，这些驱动程以下是可用的驱动程序列表：序已被重新命名为`brcmsmac`和`brcmfmac`。

一

驱动 | 描述
--- | ---
bcrm80211 | n
主线（推荐使用）版本ub43 | 逆向工程内核驱动
broadcom-wl | 限制许可的 Broadcom STA 驱动

## 查看你可以使用何种驱动

首先，向你的终端输入以下内容来检测网卡的 PCI-ID:

    $ lspci -vnn | grep 14e4:

然后在以下列表中检查 b43的支持设备列表以及 brcm80211的支持设备列表.

## 获取驱动

### brcm80211

Kernel内建了两个开源驱动: brcmfmac 提供原生硬MAC支持， brcmsmac 提供基于mac80211的软MAC支持。 它们应该会在启动时自行加载。

注意：

- brcmfmac 提供较新的芯片支持，并且支持AP模式，P2P模式，高级加密。
- brcmsmac 仅提供对于较老芯片的支持，例如BCM4313, BCM43224, BCM43225。

### b43/b43legacy

b43 以及 b43legacy两个逆向工程驱动已经被内建在Kernel中。b43支持大部分的博通无线芯片组，而b43legacy驱动仅支持早期的BCM4301以及BCM4306 rev.2 芯片组。为了避免与别的驱动造成冲突，请 blacklist 未使用的驱动。

这些驱动的运行都需要安装闭源固件，请从AUR安装b43-firmwareAUR， b43-firmware-classicAUR 或者 b43-firmware-legacyAUR[损坏的链接：package not found] 。

注意：

- BCM4306 rev.3, BCM4311, BCM4312 与 b43-firmware 固件不能良好的工作。对于这些芯片组请使用 b43-firmware-classicAUR 代替。
- BCM4331 与 b43-firmware-classic 固件不能良好的工作。 对于这些芯片组请使用 b43-firmwareAUR 代替。

### broadcom-wl

AUR 中有两个版本的Broadcom STA闭源驱动：

- 通常的 broadcom-wl包
- 以及 DKMS 版本 broadcom-wl-dkms包

提示：DKMS版本 broadcom-wl-dkms包

- 可以在不同的Kernel中工作 (例如 linux-ckAUR).
- 每次安装新的Kernel时，dkms都会重新构建驱动，如果你使用 broadcom-wl包 或者其他依赖于单个Kernel版本的驱动 (例如 broadcom-wl-ckAUR), 那么在更新Kernel或者使用新的Kernel时都有可能使驱动崩溃。

#### 加载broadcom-wl的内核模块

`wl` 模块可能会与其他模块冲突而无法加载。加载`wl`模块之前， 请移除`b43`或者其他可能造成冲突的模块：

    # rmmod b43

如果 `ssb` 加载了，也请一并移除:

    # rmmod ssb

注意：错误的加载 `ssb` 可能导致无线界面无法被创建。

加载 `wl` 模块：

    # modprobe wl

加载 `wl` 模块的同时 `lib80211` 或者 `lib80211_crypt_tkip` 应该也会被自动加载。 使用 `lsmod` 来进行检查，如果没有，请手动加载二者之一；

    # modprobe lib80211

或

    # modprobe lib80211_crypt_tkip

如果你直接从博通官方网站下载驱动并安装，你可能同时需要更新依赖模块:

    # depmod -a

如果模块无法在启动时加载，请将 `wl` (以及 `lib80211`/`lib80211_crypt_tkip`如果需要) 到 `/etc/rc.conf`的MODULES列：

    # MODULES=(... wl...)

你也可以Blacklist掉可能冲突的模块，在 `/etc/modprobe.d/modprobe.conf`中加入:

    # blacklist b43
    # blacklist ssb

警告：Broadcom Corporation BCM4311 802.11b/g WLAN [14e4:4311] 在Blacklist `b43` 以及 `ssb`后可能不工作。

## 加载多博通网卡的内核驱动模块

b43的博通无线网卡驱动与b44博通有线网卡驱动可能产生冲突，因此建议您使用broadcom-wl驱动

- Put "lib80211_crypt_tkip" and "wl" at the BEFORE b44 (if you have it) position in MODULES= 在 /etc/rc.conf 模块部分，b44(如果你需要这个驱动的话)之前加入lib80211_crypt_tkip wl
- 不要忘记把 b43 模块加入黑名单
- 您的无线网卡设备为eth0
- 您的有线网卡设备为eth1
- 两者能同时正常工作

## 故障排除

各种可以纠正的错误。

### 更新 Kernel 后设备无法访问

如果您使用 brcm80211 请确保没有被 blacklisted。如果你使用 b43 驱动确保它在工作。如果你使用Broadcom STA驱动的broadcom-wl包包，请重新安装或一劳永逸地切换成broadcom-wl-dkms包。

### 使用 broadcom-wl 驱动的设备不工作/不显示

请查看dmesg是否存在报错信息，broadcom-wl经常发生奇怪的问题，重新加载Kernel模块或者重启一般能解决问题

### 使用 broadcom-wl 驱动时接口交换

使用 broadcom-wl 驱动也许会发现它们的以太网和 Wi-Fi 接口交换了。查看这里（reverting to traditional interface names）的解决方案。

### 接口显示正常但是不能连接

加入以下内核参数:

    b43.allhwsupport=1

### 奇怪的报错信息

你可能会在启动时接收到奇怪的报错信息，类似于：

    phy0: brcms_ops_bss_info_changed: arp filtering: enabled true, count 0 (implement)
    phy0: brcms_ops_bss_info_changed: qos enabled: false (implement)
    phy0: brcms_ops_bss_info_changed: arp filtering: enabled true, count 1 (implement)
    enabled, active

一般情况下这并不影响驱动的正常工作，如果你想不想收到这些信息，可以提高printk的日志级别。

在`/etc/sysctl.d/`中创建一个`printk.conf`或者类似的配置文件:

    printk.conf

    kernel.printk = 3 3 3 3

最后`sysctl -p`确保配置被成功写入。

### 不能检测到设备 BCM43241

无论是 `lspci` 还是 `lsusb` 都不能检测到设备。这个问题目前无法解决。 请在解决后删除此部分。

### 在连接到某些路由器时可能不稳定

如果没有其他的解决方法，安装linux-lts包，或者使用低版本的驱动。

分类：​

- 无线网络
- 包含损坏的软件包链接的页面

博通无线网卡
添加话题