在 BCM43228 上找不到蓝牙

Naf*_*Kay 5 bluetooth

我有一个 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)
Run Code Online (Sandbox Code Playgroud)

关键线似乎是:

15:00.0 Network controller: Broadcom Corporation BCM43228 802.11a/b/g/n
Run Code Online (Sandbox Code Playgroud)

如果我尝试检测蓝牙卡,则看不到任何内容:

$ hcitool dev
Devices:

$ rfkill list all
Run Code Online (Sandbox Code Playgroud)

输出

$ lspci 
Run Code Online (Sandbox Code Playgroud)

输出

$ lsusb
Run Code Online (Sandbox Code Playgroud)

输出

我终于找到了这张卡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)
Run Code Online (Sandbox Code Playgroud)

我正在运行 kernel 3.2.0-34-generic

我听说这张卡需要注入固件才能运行。如果是这种情况,我该怎么做?

fos*_*dom 5

修补内核

根据这篇文章,当前的精确内核无法识别您的特定蓝牙模块。

您的命令会usb-devices显示特定的蓝牙设备 - 供应商和 ProdID 值 -0b05:17b5

补丁已提交到主 Git 存储库。很可能(但不确定)此补丁将包含在下一个内核 - v3.8 中。但是,如果这通过staging 进行,它可能是以后的模块。

因此,目前,为了让您的蓝牙设备被识别,您应该在启动板上提交错误报告,询问是否可以向后移植此补丁 - 尽可能详细地提供补丁,并在可能的情况下将补丁提交为好。

如果你想自己修补这个,这里有一些你可以遵循的注意事项。

修补内核

  • 下载构建环境、内核源代码和头文件
sudo apt-get install build-essential 
apt-get 源 linux-source-3.2.0
sudo apt-get install 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 },
  • 现在编译
make M=驱动程序/蓝牙模块
  • 这应该成功编译内核模块,包括您新修补的文件。

  • 最后将内核模块添加到您当前的内核驱动程序文件夹中:

光驱/蓝牙
须藤cp btusb.ko /lib/modules/$(uname -r)/kernel/drivers/bluetooth
须藤服务蓝牙停止
须藤 modprobe -r btusb
须藤 modprobe btusb
须藤服务蓝牙启动

希望现在你的蓝牙设备被识别-当你运行它应该是可见的rfkill list all,以及lsusb

最后...

每次您的内核被 Canonical 更新时,您都需要重新运行上述过程,因为您的新蓝牙模块将被覆盖 - 如果幸运的话,您可以使用运行sudo modprobe命令进行较小的内核更新。