Gentoo brcmfmac 无线

在反复折腾 Gentoo Linux在MacBook Pro配置Wifi 失败之后,我转为购买 BCM943602CS蓝牙无线模块 安装到 MacBook Pro 15” Late 2013 来解决Linux开源驱动兼容问题:

  • 完全开源的驱动,没有任何二进制对象文件

  • 框架支持新芯片,包括 mac80211-aware 嵌入式芯片

  • 不支持使用 SSB 后端平面的古老的 PCI/PCIe 芯片( b43 )

  • brcmfmac 是原生 FullMACbrcmsmac 是 基于 mac80211的 SoftMAC

硬件

  • 外观(淘宝)

  • 启动Linux之后执行 lspci 检查,原来苹果笔记本的 BCM943602CS蓝牙无线模块 配件的Broadcom芯片是 BCM43602

bcm943602cs 网卡实际芯片为 BCM43602
03:00.0 Network controller: Broadcom Inc. and subsidiaries BCM43602 802.11ac Wireless LAN SoC (rev 01)
  • 执行 lspci 详细指令过滤出 14e4: 设备:

lspci -vvn 查看网卡详细信息
03:00.0 Network controller [0280]: Broadcom Inc. and subsidiaries BCM43602 802.11ac Wireless LAN SoC [14e4:43ba] (rev 01)
        Subsystem: Apple Inc. BCM43602 802.11ac Wireless LAN SoC [106b:0134]
        Flags: bus master, fast devsel, latency 0, IRQ 18
        Memory at c1c00000 (64-bit, non-prefetchable) [size=32K]
        Memory at c1800000 (64-bit, non-prefetchable) [size=4M]
        Capabilities: [48] Power Management version 3
        Capabilities: [58] MSI: Enable- Count=1/16 Maskable- 64bit+
        Capabilities: [68] Vendor Specific Information: Len=44 <?>
        Capabilities: [ac] Express Endpoint, MSI 00
        Capabilities: [100] Advanced Error Reporting
        Capabilities: [13c] Device Serial Number e2-c3-a7-ff-ff-97-98-01
        Capabilities: [150] Power Budgeting <?>
        Capabilities: [160] Virtual Channel
        Capabilities: [1b0] Latency Tolerance Reporting
        Capabilities: [220] Physical Resizable BAR
        Capabilities: [240] L1 PM Substates
        Kernel modules: wl

04:00.0 Multimedia controller [0480]: Broadcom Inc. and subsidiaries 720p FaceTime HD Camera [14e4:1570]
        Subsystem: Broadcom Inc. and subsidiaries 720p FaceTime HD Camera [14e4:1570]
        Flags: bus master, fast devsel, latency 0
        Memory at c1f00000 (64-bit, non-prefetchable) [size=64K]
        Memory at a0000000 (64-bit, prefetchable) [size=256M]
        Memory at c1e00000 (64-bit, non-prefetchable) [size=1M]
        Capabilities: [48] Power Management version 3
        Capabilities: [58] MSI: Enable- Count=1/1 Maskable- 64bit+
        Capabilities: [68] Vendor Specific Information: Len=44 <?>
        Capabilities: [ac] Express Endpoint, MSI 00
        Capabilities: [100] Advanced Error Reporting
        Capabilities: [13c] Device Serial Number 00-00-00-ff-ff-00-00-00
        Capabilities: [150] Power Budgeting <?>
        Capabilities: [160] Virtual Channel
        Capabilities: [1b0] Latency Tolerance Reporting
        Capabilities: [220] Physical Resizable BAR

brcm80211

内核包含了两个内建的开源驱动:

  • brcmfmac : 用于原生的 FullMAC

  • brcmsmac : 用于基于 mac80211 的 SoftMAC

内核驱动会在启动时自动加载

备注

  • brcmfmac 支持较为新型的芯片,并且支持诸如 AP模式, P2P模式, 或者硬件加密

  • brcmsmac 则只支持旧型号芯片,如 BCM4313, BCM43224, BCM43225

内核编译

针对 [14e4:43ba] 芯片,也就是 brcmfmac 驱动配置方法:

内核配置支持 brcmfmac 驱动
Device Drivers  --->
    -*- Network device support  --->
        [*]   Wireless LAN  --->
           [*]   Broadcom devices
           <M>     Broadcom FullMAC WLAN driver
           [*]     PCIE bus interface support for FullMAC driver

使用 Gentoo genkernel 完成内核编译和安装之后,重启系统

恢复 Gentoo Linux在MacBook Pro配置Wifi 中因为需要安装旧版本 wpa_supplicantGentoo emerge 删除的 使用wpa_supplicant连接无线网络 软件包,按照 Gentoo Linux在MacBook Pro配置Wifi 中重新配置 wpa_supplicant

  • 创建初始配置:

使用 wpa_passphrase 初始化一个简单配置
wpa_passphrase your-ESSID your-passphrase | sudo tee /etc/wpa_supplicant/wpa_supplicant.conf
sudo chmod 600 /etc/wpa_supplicant/wpa_supplicant.conf
  • 通过 OpenRC 启动 wpa_supplicant 服务:

设置 openrc 启动 wpa_supplicant 服务
rc-update add wpa_supplicant default
rc-service wpa_supplicant start

非常丝滑,这款 MacBook Pro 2015 的无线配件 BCM943602CS蓝牙无线模块 确实非常适合Linux使用,完全适配我的 MacBook Pro 15” Late 2013

问题排查

我遇到一个奇怪的问题,连接到家里的5G wifi路由器总是失败:

  • 启动 使用wpa_supplicant连接无线网络 服务之后,再执行 ifconfig 观察可以看到无线网卡没有任何进出包

  • 但是也不是所有无线连接都有问题,有些无线路由器可以正常连接,连接以后 ifconfig 可以看到正常的包计数

  • 在外旅行时,连接旅店的无线wifi也是部分正常,部分不能连接(现象相同)

似乎是某些无线AP不能兼容?

所使命令行方式运行 wpa_supplicant (前台运行)观察输出:

前台运行 wpa_supplicant 观察
sudo wpa_supplicant -c /etc/wpa_supplicant/wpa_supplicant.conf -i wlp3s0

输出信息

前台运行 wpa_supplicant 输出的错误信息
Successfully initialized wpa_supplicant
wlp3s0: Trying to associate with SSID 'Home-Wifi'
wlp3s0: Associated with 54:16:51:11:25:e6
wlp3s0: CTRL-EVENT-CONNECTED - Connection to 54:16:51:11:25:e6 completed [id=1 id_str=]
wlp3s0: CTRL-EVENT-SUBNET-STATUS-UPDATE status=0
wlp3s0: CTRL-EVENT-REGDOM-CHANGE init=COUNTRY_IE type=COUNTRY alpha2=CN
wlp3s0: CTRL-EVENT-DISCONNECTED bssid=54:16:51:11:25:e6 reason=0 locally_generated=1
wlp3s0: CTRL-EVENT-REGDOM-CHANGE init=CORE type=WORLD
wlp3s0: Trying to associate with SSID 'Home-Wifi'
wlp3s0: Association request to the driver failed
BSSID 54:16:51:11:25:e6 ignore list count incremented to 2, ignoring for 10 seconds
wlp3s0: Trying to associate with SSID 'Home-Wifi'
wlp3s0: Association request to the driver failed
wlp3s0: Trying to associate with SSID 'Home-Wifi'
wlp3s0: Association request to the driver failed
BSSID 54:16:51:11:25:e6 ignore list count incremented to 2, ignoring for 10 seconds

参考