drs*_*drs 6 hardware broadcom bluetooth
我有一台联想 Yoga 3,它显然有一个新的 Broadcom 蓝牙设备。
蓝牙在启动时被检测到,当我尝试在 gnome 中配对某个东西时,我可以看到一个设备列表,但没有一个配对。
我怎样才能让这个设备工作?
lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 004: ID 048d:8386 Integrated Technology Express, Inc.
Bus 001 Device 003: ID 5986:0535 Acer, Inc
Bus 001 Device 002: ID 0489:e07a Foxconn / Hon Hai
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Run Code Online (Sandbox Code Playgroud)
usb-devices
T: Bus=01 Lev=01 Prnt=01 Port=03 Cnt=02 Dev#= 2 Spd=12 MxCh= 0
D: Ver= 2.00 Cls=ff(vend.) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
P: Vendor=0489 ProdID=e07a Rev=01.12
S: Manufacturer=Broadcom Corp
S: Product=BCM20702A0
S: SerialNumber=38B1DBE337E4
C: #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr=0mA
I: If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=01 Prot=01 Driver=btusb
I: If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=btusb
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)
drs*_*drs 13
从 3.19 版本开始,Linux 内核支持此设备,但您需要手动将设备的固件提供给内核。
您可以在设备的 Windows 驱动程序中找到固件,您可以从 Lenovo(或您的计算机制造商的网站)下载该驱动程序。许多驱动程序可以直接解压缩,但对于这台特定的计算机,驱动程序是一个.exe文件,必须使用wine.
wine 4ab802rf.exe
Run Code Online (Sandbox Code Playgroud)
按照“安装”说明进行操作。向导将解压缩.exe文件,并在最后一步要求安装它。取消选中“立即安装 Broadcom 蓝牙驱动程序”:

驱动文件已经解压到 ~/.wine/driver_c/drivers/Broadcom Bluetooth Driver/
就我而言,解压缩的包中有 20 - 30 个固件文件。哪一个对应于您的设备在驱动程序inf文件之一中显示。查找的输出设备ID lsusb,或者说不清楚,usb-devices。在这种情况下,它是e07a. 然后 grepinf文件以找出哪个是关于该设备的:
grep -c E07A -r --include \*.inf
Win32/LD/bcbtumsLD-win7x86.inf:0
Win32/bcmhidnossr.inf:0
Win32/btwl2cap.inf:0
Win32/btwavdt.inf:0
Win32/btwrchid.inf:0
Win32/bcbtums-win8x86-brcm.inf:17
Win32/btwaudio.inf:0
Win64/LD/bcbtumsLD-win7x64.inf:0
Win64/bcmhidnossr.inf:0
Win64/btwl2cap.inf:0
Win64/btwavdt.inf:0
Win64/btwrchid.inf:0
Win64/bcbtums-win8x64-brcm.inf:17
Win64/btwaudio.inf:0
Autorun.inf:0
Run Code Online (Sandbox Code Playgroud)
因此,在此驱动程序中,您可以查看Win32/bcbtums-win8x86-brcm.inf或Win64/bcbtums-win8x64-brcm.inf。查看文件并找到附近提到的十六进制文件E07A:
;;;;;;;;;;;;;RAMUSBE07A;;;;;;;;;;;;;;;;;
[RAMUSBE07A.CopyList]
bcbtums.sys
btwampfl.sys
BCM20702A1_001.002.014.1443.1496.hex
Run Code Online (Sandbox Code Playgroud)
因此,固件在同一目录中并命名为BCM20702A1_001.002.014.1443.1496.hex.
下载并编译该hex2hcd工具。
git clone https://github.com/jessesung/hex2hcd.git
cd hex2hcd
make
Run Code Online (Sandbox Code Playgroud)
将固件转换为hcd:
hex2hcd BCM20702A1_001.002.014.1443.1496.hex firmware.hcd
Run Code Online (Sandbox Code Playgroud)
重命名固件并将其移动到系统的固件子目录:
su -c 'mv firmware.hcd /lib/firmware/brcm/BCM20702A0-0489-e07a.hcd'
Run Code Online (Sandbox Code Playgroud)
此文件的名称至关重要。在本例中0489-e07a,两组四个字符应与您设备的供应商 ID 和产品 ID 匹配。
加载固件的最简单方法是关闭计算机电源并再次打开。注意电脑要关机;简单的重启可能不足以重新加载此固件。
使用快捷方式跟随 drs',我设法获取了文件并获得了积极的结果。我的蓝牙设备无法检测到附近的可见设备,但现在可以了。
我使用的shortut是由于我的计算机没有光驱并且预装了Windows,因此它带有一个装满驱动程序的分区。我找到了一个包含大量蓝牙驱动程序的目录,但查看了 drs 建议的 INF 文件,我发现 E07A 设备已链接到驱动程序文件BCM20702A1_001.002.014.1483.1651.hex
之后我编译了dehex2hcd程序并将文件转换为HCD。我必须保留 BCM20702A1 名称部分,而不是根据 dmesg“未找到补丁”消息将其替换为 BCM2070A0。
我无法配对我的设备,但能够扫描绝对是向前迈出的一步。
如果您需要 HCD 文件,请给我发消息,希望我尽快将其发送给您。我也会把它发送到 linux 蓝牙邮件列表。
编辑。显然,Windows HEX 驱动程序文件名中的 1651 指的是内部版本号。通过 dmesg 我可以看到内核声明 1651 是内部版本号。