新しいBroadcom Bluetoothデバイスが搭載されているように見えるLenovo Yoga 3を持っています。
Bluetoothは起動時に検出され、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)
バージョン3.19以降、このデバイスはLinuxカーネルでサポートされていますが、デバイスのファームウェアをカーネルに手動で提供する必要があります。
ファームウェアは、Lenovo(またはコンピューターの製造元のWebサイト)からダウンロードできるデバイスのWindowsドライバーにあります。多くのドライバーは単に解凍できますが、この特定のコンピューターでは、ドライバーは.exe
ファイルであり、wine
で抽出する必要があります。
wine 4ab802rf.exe
「インストール」の指示に従ってください。ウィザードは.exe
ファイルを抽出し、最後のステップでインストールを要求します。 [今すぐBroadcom Bluetoothドライバをインストールする]をオフにします。
ドライバファイルが~/.wine/driver_c/drivers/Broadcom Bluetooth Driver/
に抽出されました
私の場合、解凍したパッケージには20〜30個のファームウェアファイルがあります。デバイスに対応するものは、ドライバーのinf
ファイルの1つで明らかにされます。 lsusb
の出力からデバイスIDを見つけます。不明な場合は、usb-devices
を見つけます。この場合はe07a
です。次に、inf
ファイルをgrepして、そのデバイスについて話しているファイルを見つけます。
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
の近くに記載されているhexファイルを見つけます。
;;;;;;;;;;;;;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'
このファイルの名前は重要です。 4文字の2つのセット(この場合は0489-e07a
)は、デバイスのベンダーIDおよび製品IDと一致する必要があります。
ファームウェアをロードする最も簡単な方法は、コンピューターの電源をオフにして、再度オンにすることです。コンピュータの電源を切る必要があることに注意してください。このファームウェアをリロードするには、単純な再起動では不十分な場合があります。
Drsがショートカットを使用した後、私はなんとかファイルを取得し、肯定的な結果を得ました。私のBluetoothデバイスは近くにある目に見えるデバイスを検出できませんでしたが、現在は検出されています。
私が使用したショートカットは、私のコンピューターには光学ドライブがなく、Windowsがプリインストールされているため、ドライバーでいっぱいのパーティションが付属しているということです。 bluetoothドライバーのヒープがあるディレクトリを見つけましたが、INF drsが提案したファイルを調べたところ、E07AデバイスがドライバーファイルBCM20702A1_001.002.014.1483.1651.hex
にリンクされていました。
その後、de hex2hcd
プログラムをコンパイルして、ファイルをHCDに変換しました。 dmesgの「patch not found」メッセージに従って、BCM2070A0の代わりにBCM20702A1の名前部分を保持する必要がありました。
デバイスをペアリングできませんでしたが、スキャンできることは間違いなく一歩前進です。
HCDファイルが必要な場合は、メッセージを送ってください。できれば、すぐに送信します。また、linux bluetoothメーリングリストにも送信します。
編集。どうやら、Windows HEXドライバのファイル名の1651はビルド番号を指します。 dmesgを通して、1651がビルド番号であるというカーネルの状態を確認できます。