如何让蓝牙在我的联想 Yoga 3 上工作?

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.infWin64/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 匹配。

加载固件

加载固件的最简单方法是关闭计算机电源并再次打开。注意电脑要关机;简单的重启可能不足以重新加载此固件。

  • lenovo y50-70 的文件 https://drive.google.com/open?id=0B0LAE78KhmOmUXRPMGVranRPVzA Yoga 3 的文件相同吗? (2认同)

Sev*_*Raz 5

使用快捷方式跟随 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 是内部版本号。