最近我购买了一台 Macbook Pro,它配备了 BCM4331 802.11a/b/g/n WiFi 卡,但该卡无法与默认内核兼容。
sudo dmidecode -s system-product-name
MacBookPro8,2
lspci |grep 4331
03:00.0 网络控制器:Broadcom Corporation BCM4331 802.11a/b/g/n(rev 02)
lspci -n |grep 4331
03:00.0 0280:14e4:4331(修订版 02)
在做了一些初步研究后,我发现本文给出了如何修补最新的 compat-wireless 的分步说明,该补丁应支持 4331 设备:
但是,当我尝试将修补的模块 modprobe 到最新的 Ubuntu 11.10 内核(3.0.0-12-generic)中时,按照这些说明会导致以下 dmesg 错误
[ 5373.408581] b43: Unknown symbol bcma_core_disable (err
[ 5373.408685] b43: Unknown symbol bcma_core_pll_ctl (err 0)
[ 5373.408695] b43: disagrees about version of symbol bcma_driver_unregister
[ 5373.408698] b43: Unknown symbol bcma_driver_unregister (err -22)
[ 5373.408712] b43: disagrees about version of symbol bcma_core_enable
[ 5373.408715] b43: Unknown symbol bcma_core_enable (err -22)
[ 5373.408727] b43: disagrees about version of symbol bcma_core_is_enabled
[ 5373.408730] b43: Unknown symbol bcma_core_is_enabled (err -22)
[ 5373.408745] b43: disagrees about version of symbol bcma_chipco_gpio_control
[ 5373.408747] b43: Unknown symbol bcma_chipco_gpio_control (err -22)
[ 5373.408782] b43: disagrees about version of symbol__bcma_driver_register
[ 5373.408784] b43: Unknown symbol __bcma_driver_register (err -22)
[ 5373.408796] b43: Unknown symbol bcma_core_set_clockmode (err 0)
[ 5373.408822] b43: Unknown symbol bcma_core_dma_translation (err 0)
[ 5373.408878] b43: Unknown symbol bcma_core_pci_irq_ctl (err 0)
有人能指出正确的方向来帮助我正确加载这个模块吗?
答案1
首先确保你的机器上没有安装任何 b43 驱动程序...使用软件中心并搜索 b43 如果有,请卸载它
- compat-wireless:转到 Linux Wireless 并下载兼容-无线-2.6.tar.bz2
- 最新版本的bw43-fwcutter(版本 015)
- 博通的专有驱动程序提取固件
所有文件都可以存储在-主页-你的用户-下载....
使用 nautilus 提取这棵树的文件....
接下来,启用 b43 驱动程序。
$ cd compat-wireless-2011-11-04
$ scripts/driver-select b43
确保 PHY_HT 已启用。在文件 config.mk 中,应存在以下行并取消注释:
sudo nano config.mk
...
配置_B43_PHY_HT=y
...
编译并安装驱动程序:
$ make
$ sudo make install
$ cd ..
编译b43-fwcutter:
$ cd b43-fwcutter-015
$ make
固件:
$ export FIRMWARE_INSTALL_DIR="/lib/firmware"
$ sudo ./b43-fwcutter -w "$FIRMWARE_INSTALL_DIR" /home/YOURUSER/Downloads/broadcom-wl-5.100.138/linux/wl_apsta.o
$ cd ..
卸载所有与无线相关的模块并确保未加载 ndiswrapper:
$ cd compat-wireless-2011-11-04
$ sudo make wlunload
$ sudo rmmod ndiswrapper
在文件末尾添加行:
sudo nano /etc/modprobe.d/blacklist.conf
...
黑名单 ndiswrapper
...
为了确保没有旧模块仍然被加载,最好重新启动系统。现在您应该能够加载和使用新编译的 b43 模块:
$ sudo modprobe b43
您可能希望将 b43 添加到启动时加载的模块列表中(目前,该模块不会自动加载)。对于 Ubuntu,请在文件末尾添加此行:
sudo nano /etc/modules
...
b43
...
驱动程序无法很好地处理挂起和休眠。必须在笔记本电脑进入睡眠状态之前卸载模块,并在唤醒后重新加载模块。对于 Ubuntu,只需创建文件(或附加到文件)即可
sudo /etc/pm/config.d/default
...
SUSPEND_MODULES="b43"
...
注意:每次内核更新后,你必须重新编译新内核的模块:
$ cd compat-wireless-2011-11-04
$ make clean
$ make
$ sudo make install
PS:与原帖一样我只调整了配置文件的扩展因为有缺失,修复了其他东西和错误......
答案2
确保也将 ssb 和 bcma 列入黑名单。Bcma 会导致 3.0.0 内核出现问题。您可能只需将模块“b43、ssb、bcma”列入黑名单,然后执行 depmod -a 和 modprobe wl,然后再执行一次 depmod -a,或者重新安装软件包并重新启动。希望这对您有所帮助。
答案3
我不知道为什么文章的精确复制版只得到 2 票。这毫无用处。我最终只能按照 Rock 的建议卸载 ssb 和 bcma 才能让它工作。