Gentoo Linux在MacBook Pro配置Wifi¶
Broadcom WiFi¶
早期MacBook Air 11” 2011版¶
我曾经使用过MacBook Air 11” 2011版,这款笔记本使用的是Broadcom B43xx系列,是可以使用 b43-firmware
驱动的,装 b43
驱动即可:
b43
驱动¶echo "sys-firmware/b43-firmware" >> /etc/portage/package.accept_keywords
echo "sys-firmware/b43-firmware Broadcom" >> /etc/portage/package.license
emerge --ask b43-firmware
Broadcom BCM4360¶
到 MacBook Pro 15” Late 2013 以及我另外一台 MacBook Air 13” ,采用是 Broadcom BCM4360 。这款无线芯片对开源支持不佳,参考 Linux wireless b43文档 可以看到 b43
驱动不支持BCM4360,建议使用 wl
驱动。
也就是需要使用闭源的Broadcom驱动( Apple Macbook Pro Retina - Closed source Broadcom driver )
# lspci -k
...
03:00.0 Network controller: Broadcom Inc. and subsidiaries BCM4360 802.11ac Wireless Network Adapter (rev 03)
Subsystem: Apple Inc. BCM4360 802.11ac Wireless Network Adapter
Kernel driver in use: bcma-pci-bridge
Kernel modules: bcma
...
内核¶
IEEE 802.11¶
至少需要激活 cfg80211
(CONFIG_CFG80211) 和 mac80211
(CONFIG_MAC80211)
cfg80211
(CONFIG_CFG80211) 和 mac80211
(CONFIG_MAC80211)¶[*] 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 support # 文档没有要求,但我这个功能有时候有用
-*- Enable LED triggers
-*- Export mac80211 internals in DebugFS
[ ] Trace all mac80211 debug messages
[ ] Select mac80211 debugging features ----
备注
由于需要加载firmware,所以 wireless configuration API (CONFIG_CFG80211) 需要配置成模块方式而不是直接buildin
备注
对于私有驱动, 似乎 需要关闭 mac80211
(CONFIG_MAC80211)
WEXT¶
cfg80211 wireless extensions compatibility
选项( WEXT
)可以支持传统的 wireless-tools
和 iwconfig
:
cfg80211 wireless extensions compatibility
选项( WEXT
)¶[*] Networking support --->
[*] Wireless --->
[*] cfg80211 wireless extensions compatibility
备注
我在 Kernel 6.1.12 未找到这个配置项
设备驱动¶
注意,建议将驱动编译为内核模块,因为WiFi驱动通常需要firmware,只有作为模块加载时才能使用firmware:
Device Drivers --->
[*] Network device support --->
[*] Wireless LAN --->
Select the driver for your Wifi network device, e.g.:
<M> Broadcom 43xx wireless support (mac80211 stack) (b43)
[M] Support for 802.11n (N-PHY) devices
[M] Support for low-power (LP-PHY) devices
[M] Support for HT-PHY (high throughput) devices
<M> Intel Wireless WiFi Next Gen AGN - Wireless-N/Advanced-N/Ultimate-N (iwlwifi)
<M> Intel Wireless WiFi DVM Firmware support
<M> Intel Wireless WiFi MVM Firmware support
<M> Intel Wireless WiFi 4965AGN (iwl4965)
<M> Intel PRO/Wireless 3945ABG/BG Network Connection (iwl3945)
<M> Ralink driver support --->
<M> Ralink rt27xx/rt28xx/rt30xx (USB) support (rt2800usb)
-*- Cryptographic API --->
Accelerated Cryptographic Algorithms for CPU (x86) --->
<*> Ciphers: AES, modes: ECB, CBC, CTS, CTR, XTR, XTS, GCM (AES-NI)
备注
b43
可以在内核源码中激活模块方式编译,但是Broadcom4360需要私有驱动 net-wireless/broadcom-sta 没有编译选项
对于安装私有驱动,上述设备驱动我全关闭了
但是参考 Closed source Broadcom driver 采用激活Intel PRO/Wireless 2100网卡驱动来输出内核的 LIB80211
Device Drivers
-> Network device support
-> Wireless LAN
-> <*> Intel PRO/Wireless 2100 Network Connection
LED支持¶
笔记本内置WiFi没有LED,可忽略
Device Drivers --->
[*] LED Support --->
<*> LED Class Support
[*] Networking support --->
[*] Wireless --->
[*] Enable LED triggers
Firmware¶
根据 gentoo linux wiki: WiFi 文档,除了内核模块编译支持之外,WiFi芯片还需要对应firmware:
WiFi设备 |
驱动 |
Firmware |
说明 |
---|---|---|---|
Broadcom 43xx 无线芯片 |
|
可用于 Aircrack-ng ,如果bcm43xx设备被该驱动支持则通常是最好的选择 |
|
Broadcom PCIe和SDIO/USB设备 |
缺乏节能,LED支持以及一些其他功能 |
||
Broadcom 43xx 无线芯片 |
|
私有驱动,没有AP或监控模式,可以支持 |
Broadcom BCM4360驱动和Firmware¶
综上所述,对于 Broadcom BCM4360 实际上就只有安装私有驱动和firmware了,几乎连内核驱动模块都省了:
安装
wl
驱动和firmware:
emerge --ask net-wireless/broadcom-sta
备注
net-wireless/broadcom-sta
同时包含了驱动和firmware
broadcom-sta
编译时会检查当前内核编译配置,如果有冲突选项会提示,按提示调整内核编译配置,例如我遇到以下内核配置需要关闭:
X86_INTEL_LPSS #位于 "Processor type and features ==> Intel Low Power Subsystem Support"
PREEMPT_RCU 不能设置为 Preemptible Kernel 的 Preemption Model #位于General setup ==> RCU Subsystem
PREEMPT_RCU
冲突¶
我在最新的 6.1.12 内核安装 broadcom-sta
遇到报错:
PREEMPT_RCU: Please do not set the Preemption Model to "Preemptible Kernel"; choose something else.
这个问题在 emerge broadcom-sta fails (6.1.12 kernel) due to PREEMPT_RCU 有解决建议:
PREEMPT_RCU
不能直接修改(确实,我在配置选项中没有找到)在
General setup
中 当选择以下preemption models
时PREEMPT_RCU
会自动选择:Preemptible Kernel (Low-Latency Desktop) # 位于 General setup => Preemption Model
Fully Preemptible Kernel (Real-Time) (this might not be available on all CPU architectures)
在
General setup
中如果激活PREEMPT_DYNAMIC
就会自动选择
果然,原来我选择激活了 Gneeral setup => Preemption behaviour defined on boot
,这个选项就是 PREEMPT_DYNAMIC=y
,就是这个选项导致。真是这个选项激活导致了 PREEMPT_RCU
出现,我取消这个配置就可以了