我有一块 Broadcom BCM43228 mPCIe 卡,随主板一起提供(华硕 ROG Maximus V Extreme,似乎找不到该卡的链接)目前它对 WiFi 运行良好,但我无法检测到板载蓝牙硬件。在 Windows 中,我拥有完整的蓝牙 4.0 支持。
$ lspci
00:00.0 Host bridge: Intel Corporation 2nd Generation Core Processor Family DRAM Controller (rev 09)
00:01.0 PCI bridge: Intel Corporation Xeon E3-1200/2nd Generation Core Processor Family PCI Express Root Port (rev 09)
00:14.0 USB controller: Intel Corporation Panther Point USB xHCI Host Controller (rev 04)
00:16.0 Communication controller: Intel Corporation Panther Point MEI Controller #1 (rev 04)
00:19.0 Ethernet controller: Intel Corporation 82579V Gigabit Network Connection (rev 04)
00:1a.0 USB controller: Intel Corporation Panther Point USB Enhanced Host Controller #2 (rev 04)
00:1b.0 Audio device: Intel Corporation Panther Point High Definition Audio Controller (rev 04)
00:1c.0 PCI bridge: Intel Corporation Panther Point PCI Express Root Port 1 (rev c4)
00:1c.4 PCI bridge: Intel Corporation Panther Point PCI Express Root Port 5 (rev c4)
00:1c.6 PCI bridge: Intel Corporation Panther Point PCI Express Root Port 7 (rev c4)
00:1c.7 PCI bridge: Intel Corporation Panther Point PCI Express Root Port 8 (rev c4)
00:1d.0 USB controller: Intel Corporation Panther Point USB Enhanced Host Controller #1 (rev 04)
00:1f.0 ISA bridge: Intel Corporation Panther Point LPC Controller (rev 04)
00:1f.2 SATA controller: Intel Corporation Panther Point 6 port SATA Controller [AHCI mode] (rev 04)
00:1f.3 SMBus: Intel Corporation Panther Point SMBus Controller (rev 04)
01:00.0 VGA compatible controller: NVIDIA Corporation Device 1189 (rev a1)
01:00.1 Audio device: NVIDIA Corporation Device 0e0a (rev a1)
0d:00.0 USB controller: ASMedia Technology Inc. ASM1042 SuperSpeed USB Host Controller
0e:00.0 PCI bridge: PLX Technology, Inc. PEX 8608 8-lane, 8-Port PCI Express Gen 2 (5.0 GT/s) Switch (rev ba)
0f:01.0 PCI bridge: PLX Technology, Inc. PEX 8608 8-lane, 8-Port PCI Express Gen 2 (5.0 GT/s) Switch (rev ba)
0f:04.0 PCI bridge: PLX Technology, Inc. PEX 8608 8-lane, 8-Port PCI Express Gen 2 (5.0 GT/s) Switch (rev ba)
0f:05.0 PCI bridge: PLX Technology, Inc. PEX 8608 8-lane, 8-Port PCI Express Gen 2 (5.0 GT/s) Switch (rev ba)
0f:06.0 PCI bridge: PLX Technology, Inc. PEX 8608 8-lane, 8-Port PCI Express Gen 2 (5.0 GT/s) Switch (rev ba)
0f:07.0 PCI bridge: PLX Technology, Inc. PEX 8608 8-lane, 8-Port PCI Express Gen 2 (5.0 GT/s) Switch (rev ba)
0f:08.0 PCI bridge: PLX Technology, Inc. PEX 8608 8-lane, 8-Port PCI Express Gen 2 (5.0 GT/s) Switch (rev ba)
0f:09.0 PCI bridge: PLX Technology, Inc. PEX 8608 8-lane, 8-Port PCI Express Gen 2 (5.0 GT/s) Switch (rev ba)
10:00.0 USB controller: ASMedia Technology Inc. ASM1042 SuperSpeed USB Host Controller
12:00.0 SATA controller: ASMedia Technology Inc. ASM1062 Serial ATA Controller (rev 01)
15:00.0 Network controller: Broadcom Corporation BCM43228 802.11a/b/g/n
17:00.0 SATA controller: ASMedia Technology Inc. ASM1062 Serial ATA Controller (rev 01)
关键的一行似乎是:
15:00.0 Network controller: Broadcom Corporation BCM43228 802.11a/b/g/n
如果我尝试检测蓝牙卡,我什么也看不到:
$ hcitool dev
Devices:
$ rfkill list all
$ lspci
$ lsusb
我终于找到了这张卡usb-devices
:
T: Bus=01 Lev=02 Prnt=02 Port=00 Cnt=01 Dev#= 3 Spd=12 MxCh= 0
D: Ver= 2.00 Cls=ff(vend.) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
P: Vendor=0b05 ProdID=17b5 Rev=01.12
S: Manufacturer=Broadcom Corp
S: Product=BCM20702A0
S: SerialNumber=############
C: #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr=0mA
I: If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=01 Prot=01 Driver=(none)
I: If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=(none)
I: If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
I: If#= 3 Alt= 0 #EPs= 0 Cls=fe(app. ) Sub=01 Prot=01 Driver=(none)
我正在运行内核3.2.0-34-generic
。
我听说这张卡需要注入固件才能运行。如果是这样,我该怎么做?
答案1
修补内核
根据这个帖子您的特定蓝牙模块无法被当前精确的内核识别。
您的命令usb-devices
会显示特定的蓝牙设备 - 供应商和 ProdID 值 -0b05:17b5
补丁已提交至主 Git 存储库。此补丁很可能(但不确定)会包含在下一个内核 - v3.8 中。但是,如果顺利的话,它可能会成为后续模块分期。
因此,目前,为了让您的蓝牙设备被识别,您应该在启动板上提交一个错误报告,询问是否可以反向移植此补丁 - 尽可能详细地说明补丁,如果可能的话,也提交补丁。
如果您想自行修补此问题,请遵循以下说明。
修补内核
- 下载构建环境、内核源代码和头文件
sudo apt-get 安装 build-essential apt-get 源 linux-source-3.2.0 sudo apt-get 安装 linux-headers-$(uname -r)
即不要使用,sudo apt-get source linux-source-3.2.0
因为这将以 root 身份下载源代码 - 如果您以 root 身份下载,这将导致稍后出现编译问题。
- 复制当前内核配置和源头模块版本文件
cd linux-3.2.0 cp /boot/config-$(uname -r).config cp /usr/src/linux-headers-$(uname -r)/Module.symvers 。
- 修补蓝牙模块
上面的 linux 指示补丁应该应用于btusb.c
使用您最喜欢的编辑器打开此内核模块
gedit 驱动程序/蓝牙/btusb.c
搜索并查找包含文本的行BCM20702A0
它看起来像:
/* 博通 BCM20702A0 */ {USB_DEVICE(0x0489,0xe042)}, {USB_DEVICE(0x13d3,0x3388),.driver_info = BTUSB_BCM_PATCHRAM}, {USB_DEVICE(0x13d3,0x3389),.driver_info = BTUSB_BCM_PATCHRAM}, {USB_DEVICE(0x413c,0x8197),.driver_info = BTUSB_BCM_PATCHRAM},
添加以下您的新蓝牙设备 - 即您的供应商和 ProdID{ USB_DEVICE(0x0b05, 0x17b5) },
即
/* 博通 BCM20702A0 */ {USB_DEVICE(0x0b05,0x17b5)}, {USB_DEVICE(0x0489,0xe042)}, {USB_DEVICE(0x13d3,0x3388),.driver_info = BTUSB_BCM_PATCHRAM}, {USB_DEVICE(0x13d3,0x3389),.driver_info = BTUSB_BCM_PATCHRAM}, {USB_DEVICE(0x413c,0x8197),.driver_info = BTUSB_BCM_PATCHRAM},
- 现在编译
制作 M=驱动程序/蓝牙模块
这应该可以成功编译包括您新修补的文件在内的内核模块。
最后将内核模块添加到当前内核驱动程序文件夹:
CD 驱动器/蓝牙 sudo cp btusb.ko /lib/modules/$(uname -r)/kernel/drivers/bluetooth sudo 服务蓝牙停止 sudo modprobe -r btusb sudo modprobe btusb sudo 服务蓝牙启动
rfkill list all
希望现在你的蓝牙设备已经被识别了——当你跑步时它应该是可见的lsusb
最后……
每次您的内核由 Canonical 更新时,您都需要重新执行上述过程,因为您的新蓝牙模块将被覆盖 - 如果您很幸运,您可能能够使用sudo modprobe
带有小内核更新的命令来运行。
答案2
我的 Acer Aspire R7 上的 BCM20702A0 也遇到了同样的问题,刚刚找到了另一个永久解决方案(无需在更新时重新编译驱动程序):
sudo echo btusb >> /etc/modules
- 这将强制加载btusb驱动程序;
将该行添加echo 0b05 17b5 > /sys/bus/usb/drivers/btusb/new_id
到/etc/rc.local
之前exit 0
- 这将强制驱动程序在启动时与指定的设备一起使用(这04ca 2004
在我的系统中,并且也可以工作)。
答案3
參閱WifiDocs/驱动程序/bcm43xx在 Ubuntu wiki 中了解如何为您的芯片组安装正确的驱动程序。