查找固件:

查找固件:

我有一台 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.infWin64/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 是内部版本号。

相关内容