我有一台 Lenovo 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
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)
答案1
从版本 3.19 开始,Linux 内核支持该设备,但您需要手动向内核提供设备的固件。
查找固件:
您可以在设备的 Windows 驱动程序中找到固件,该驱动程序可以从 Lenovo(或计算机制造商的网站)下载。许多驱动程序可以直接解压缩,但对于这台特定的计算机,驱动程序是一个.exe
文件,必须使用wine
.
wine 4ab802rf.exe
按照“安装”说明进行操作。向导将提取该.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
因此,在此驱动程序中,您可以查看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
因此固件位于同一目录中并命名为BCM20702A1_001.002.014.1443.1496.hex
.
转换和放置固件
下载并编译hex2hcd
工具。
git clone https://github.com/jessesung/hex2hcd.git
cd hex2hcd
make
将固件转换为hcd
:
hex2hcd BCM20702A1_001.002.014.1443.1496.hex firmware.hcd
重命名固件并将其移动到系统的固件子目录中:
su -c 'mv firmware.hcd /lib/firmware/brcm/BCM20702A0-0489-e07a.hcd'
该文件的名称至关重要。在本例中,两组四个字符0489-e07a
应与您设备的供应商 ID 和产品 ID 匹配。
加载固件
加载固件的最简单方法是关闭计算机电源并再次打开。注意电脑要关闭;简单的重新启动可能不足以重新加载此固件。
答案2
按照 drs' 使用快捷方式,我设法获取该文件并得到积极的结果。我的蓝牙设备无法检测附近的可见设备,但现在可以了。
我使用的快捷方式是,由于我的计算机没有光驱并且预装了 Windows,因此它带有一个装满驱动程序的分区。我找到了一个包含大量蓝牙驱动程序的目录,但是查看 drs 建议的 INF 文件,我发现 E07A 设备已链接到驱动程序文件BCM20702A1_001.002.014.1483.1651.hex
之后我编译了dehex2hcd
程序并将文件转换为HCD。根据 dmesg“未找到补丁”消息,我必须保留 BCM20702A1 名称部分,而不是将其替换为 BCM2070A0。
我无法配对我的设备,但能够扫描绝对是向前迈出的一步。
如果您需要 HCD 文件,请给我留言,希望我会尽快发送给您。我还将它发送到 linux 蓝牙邮件列表。
编辑。显然,Windows HEX 驱动程序文件名中的 1651 指的是内部版本号。通过 dmesg 我可以看到内核声明 1651 是内部版本号。