Bluetooth Broadcom 43142 не працює


38

Bluetooth увімкнено, але його не можна знайти або знайти на інших пристроях.

Вихід sudo service bluetooth status:

● bluetooth.service - Bluetooth service
   Loaded: loaded (/lib/systemd/system/bluetooth.service; enabled; vendor preset: enabled)
   Active: active (running) since ხუთ 2015-06-04 22:33:18 GET; 13min ago
 Main PID: 26678 (bluetoothd)
   CGroup: /system.slice/bluetooth.service
           └─26678 /usr/sbin/bluetoothd -n

ივნ 04 22:39:14 Rangoo bluetoothd[26678]: Endpoint registered: sender=:1.63 path=/MediaEndpoint/BlueZ4/HFPAG
ივნ 04 22:39:14 Rangoo bluetoothd[26678]: Endpoint registered: sender=:1.63 path=/MediaEndpoint/BlueZ4/HFPHS
ივნ 04 22:39:14 Rangoo bluetoothd[26678]: Endpoint registered: sender=:1.63 path=/MediaEndpoint/BlueZ4/A2DPSource
ივნ 04 22:39:14 Rangoo bluetoothd[26678]: Endpoint registered: sender=:1.63 path=/MediaEndpoint/BlueZ4/A2DPSink
ივნ 04 22:39:14 Rangoo bluetoothd[26678]: bluetoothd[26678]: Endpoint registered: sender=:1.63 path=/MediaEndpoint/BlueZ4/HFPAG
ივნ 04 22:39:14 Rangoo bluetoothd[26678]: bluetoothd[26678]: Endpoint registered: sender=:1.63 path=/MediaEndpoint/BlueZ4/HFPHS
ივნ 04 22:39:14 Rangoo bluetoothd[26678]: bluetoothd[26678]: Endpoint registered: sender=:1.63 path=/MediaEndpoint/BlueZ4/A2DPSource
ივნ 04 22:39:14 Rangoo bluetoothd[26678]: bluetoothd[26678]: Endpoint registered: sender=:1.63 path=/MediaEndpoint/BlueZ4/A2DPSink
ივნ 04 22:39:14 Rangoo bluetoothd[26678]: Adapter /org/bluez/26678/hci0 has been enabled
ივნ 04 22:39:14 Rangoo bluetoothd[26678]: bluetoothd[26678]: Adapter /org/bluez/26678/hci0 has been enabled

Вихід lsusb:

Bus 003 Device 005: ID 0a5c:21d7 Broadcom Corp. BCM43142 Bluetooth 4.0

Як я можу це виправити?


Подібне запитання з відповіддю на карту 4352 askubuntu.com/questions/617513/…
Вільф

Відповіді:


78

Потрібно встановити прошивку.

Поширення програмного забезпечення Broadcom заборонено ліцензією Broadcom. Тож потрібно дістати його самостійно. Це трохи складно, але іншого законного шляху немає.

  1. Завантажте драйвер Broadcom Windows 8 або З ТУТ .

    Якщо ваш пристрій не вказаний у цих драйверах, вам потрібно десь знайти нову його версію. Broadcom видалив останніх драйверів зі свого сайту, щоб зробити це складніше.

    Деякі виробники ноутбуків мають драйвери Bluetooth на своїх сайтах, але деякі з них не можна розпізнати. Отже, це якийсь квест. Я міг би завантажити останні драйвери Broadcom зі свого сайту, але його вже немає.

  2. Відкрийте цей файл менеджером архівів і знайдіть там bcbtums-win8x86-brcm.infфайл. Ім'я файлу може відрізнятися в деяких драйверах. Він може бути bcbtums.infрозташований у каталогах Win32 або Win64. 32 або 64 біт для завантаження не має значення.

  3. Шукайте цей файл за VID_ 0A5C та PID_ 21D7 . Ці цифри від вашого lsusbрезультату

    0a5c: 21d7 Broadcom Corp. BCM43142 Bluetooth 4.0.

    Коментар: Деякі пристрої не розпізнаються як Broadcom BT в lsusb. Якщо ви не впевнені, який із пристроїв BT, запустіть usb-devicesкоманду, вона дасть більш детальну інформацію. Там ви можете знайти ідентифікатори товару та постачальника.

    Ви побачите рядок, що закінчується на RAMUSB21D7

    Шукайте у цьому файлі RAMUSB21D7. Ви знайдете там такий розділ:

    [RAMUSB21D7.CopyList]
    bcbtums.sys
    btwampfl.sys
    BCM43142A0_001.001.011.0122.0126.hex
    

    Це те, що ми шукаємо. Назва файлу прошивки. BCM43142A0_001.001.011.0122.0126.hex

  4. Тепер витягніть цю прошивку з того самого файлу кабіни.

    Тоді вам потрібно конвертувати цей файл із шістнадцяткового у формат hcd.

  5. Завантажте інструмент для цього

    git clone git://github.com/jessesung/hex2hcd.git
    cd hex2hcd
    make
    

    Ви отримаєте папку hex2hcd у своєму домашньому каталозі.

  6. Помістіть файл прошивки у домашню папку та запустіть

    ~/hex2hcd/hex2hcd ~/BCM43142A0_001.001.011.0122.0126.hex ~/BCM43142A0-0a5c-21d7.hcd
    

    Ви бачите, що 0a5c-21d7 є ідентифікатором вашого адаптера від lsusb .

    Важливо: Для ядер 4.2+ ви називаєте цей файл BCM.hcdзамість цього.

    ~/hex2hcd/hex2hcd ~/BCM43142A0_001.001.011.0122.0126.hex ~/BCM.hcd
    

    Для ядер 4.8+ імені файлу повинно бути BCM-<VID>-<PID>.hcd, як BCM-0a5c-21d7.

    Для ядра 5.0 ім'я файлу знову BCM43142A0-0a5c-21d7.hcd

    Тепер просто скопіюйте BCM43142A0-0a5c-21d7.hcdабо інший файл відповідно до версії ядра в /lib/firmware/brcmкаталог

    sudo cp ~/BCM43142A0-0a5c-21d7.hcd /lib/firmware/brcm
    

    Для ядер 4.2+

    sudo cp ~/BCM.hcd /lib/firmware/brcm
    

    Для ядер 4.8+

    sudo cp ~/BCM-0a5c-21d7.hcd  /lib/firmware/brcm
    

    Ви завжди можете перевірити, чи правильно вказано ім'я файлу, запустивши dmesg | grep -i blue. Якщо файл не знайдено, з’явиться повідомлення про помилку.

    Якщо запитуване ім’я файлу не відповідає створеному файлу, перейменуйте його hcd.

  7. Вимкніть і ввімкніть комп’ютер знову. Не просто перезавантажуйте!

    Ваш адаптер отримає прошивку, і Bluetooth повинен працювати.

Все це виглядає складно, але в цьому винні юристи Broadcom . Більшість інших постачальників дозволяють повторно поширювати прошивку за умови, що це робиться разом із ліцензією.

Це дозволяє обслуговуючим особам Linux включати в розповсюдження прошивку.

Але не у випадку з Broadcom. Ось чому це робиться не просто.

Багато людей могли перетворити всі шістнадцяткові файли в hcd та зробити їх доступними. Або просто додати їх до linux-firmwareпакету Ubuntu.

Але це не законно : - ((


6
У більшості випадків, коли я прокидався на своєму ноутбуці, перезавантаження модуля Bluetooth не вдається зі слідом стека ядра. Якщо вам потрібен Bluetooth без перезавантаження, вам потрібно буде вивантажити модуль bluetooth ( sudo modprobe -r btusb) і перезавантажити його ( sudo modprobe btusb), щоб bluetooth знову працював. bugzilla.kernel.org/show_bug.cgi?id=81821
solsTiCe

1
На кроці 6 hex2hcd потрібно надати вихідний файл, наприклад: hex2hcd [input-file] -o [output-file] Чи можете ви, будь ласка, оновити відповідь?
Мінас Міна

У відповіді є вихідний файл. Або автор це змінив. Раніше це був "hex2hcd вихідний файл-вихідний файл
Pilot6

4
Дякуємо @ Pilot6 за оновлення основної публікації. У моєму випадку я переглянув помилку, dmesgщоб знати свій правильний файл. Приклад dmesg вихід:[ 3.479417] bluetooth hci0: Direct firmware load for brcm/BCM-0a5c-6410.hcd failed with error -2 [ 3.479421] Bluetooth: hci0: BCM: Patch brcm/BCM-0a5c-6410.hcd not found
morhook

5
ДУАЛЬБОТИ КОРИСТУВАЧІ: Зауважте, що ви можете витягти правильну прошивку зі своєї ОС Windows. Для цього перейдіть до Диспетчера пристроїв Windows, знайдіть свій пристрій Bluetooth, клацніть правою кнопкою миші, Властивості, Драйвер, Інформація про драйвер. Там ви знайдете шлях до свого .hexфайлу, який ви можете скопіювати у вашу систему Linux. Після цього виконайте кроки 5-8. Ця відповідь, до речі, відмінна.
Ману CJ

18

Ось проект, який має на меті трохи автоматизувати процес: https://github.com/winterheart/broadcom-bt-firmware

скопіюйте BCM в правий каталог / ім'я залежно від ядра (як описано вище).

4.8 мені не потрібна перезавантаження, просто в терміналі:

sudo modprobe -r btusb
sudo modprobe btusb

dmesg | grep -i blu

повинен показувати, чи завантажений він. Переконайтесь, що ідентифікатор обладнання відповідає файлу. Його можна знайти за допомогою:

lsusb

що показує це на моєму Lenovo (лише в цьому рядку):

Bus 001 Device 006: ID 105b:e065 Foxconn International, Inc. BCM43142A0 Bluetooth module

Я сподіваюся, що це допомагає :)


1
У моєму випадку (UtechSmart USB Bluetooth 4.0 ідентифікатор пристрою: 0a5c: 21e8) драйвери зимнього серця завантажені, але hcitool devвсе ще не показали жодних пристроїв, і в syslog сталася помилка. Знайдено іншого драйвера на plugable.com/2014/06/23/…, який спрацював.
Грег Брей

8

Це все, що вам потрібно: https://github.com/winterheart/broadcom-bt-firmware

У цьому сховищі ви можете знайти більше інформації та всі необхідні драйвери бездротової картки Broadcom .


Щоб бути більш конкретним, я даю вам інструкції, які я написав для себе:

Цей підручник призначений для того, щоб зробити мережеву карту бездротової / bluetooth мережі Broadcom Corporation BCM43142 802.11b / g / n (rev 01) (ідентифікатор пристрою: 0a5c: 216d), що працює в системах Linux (я спробував це на Elementary OS 0.4.1 Loki, на основі на Ubuntu 16.04.3 LTS).

Він не може працювати для інших пристроїв, але він не повинен занадто сильно відрізнятися від цієї процедури для інших пристроїв Broadcom. Необхідні драйвери Broadcom знаходяться у цій папці репозиторії GitHub у форматі .hcd.

  1. Введіть наступну команду, щоб дізнатися, яке ім'я драйвера шукає ядро ​​під час завантаження дисків під час завантаження:

    dmesg | grep -i 'firmware load'
    

    Спробуйте це, якщо він нічого не знайде:

    dmesg | grep -i 'bluetooth'
    

    Результат повинен бути приблизно таким:

    bluetooth hci0: Direct firmware load for brcm/BCM.hcd failed with error -2
    

    Пояснення: у моєму випадку ядро ​​шукає файл BCM.hcdу каталозі, /lib/firmware/brcmде очікуються драйвери Broadcom. Якщо ядро ​​шукає інше ім'я драйвера, ви повинні перейменувати файл драйвера ( BCM43142A0-0a5c-216c.hcdв моєму випадку для BCM43142 (0a5c: 216d)) до потрібного імені ядра.

  2. Перемістіть перейменований драйвер (BCM.hcd) у свій домашній каталог (/ home / YourUsername /) та запустіть наступну команду, щоб перемістити його в папку, в якій знаходиться ядро ​​під час завантаження:

    sudo mv ~/BCM.hcd /lib/firmware/brcm
    

    Ви повинні використовувати відповідний драйвер залежно від вашого пристрою та перейменовувати його, якщо його вимагають для ядра.

  3. Перезавантажте комп'ютер і він повинен працювати! * (Ви можете dmesg | grep -i 'bluetooth'ще раз ввести, щоб побачити, чи драйвер завантажений)


Це спрацювало! Дуже дякую! У моєму випадку "BCM43142 802.11b / g / n [14e4: 4365] (rev 01)" версія не була доступна в папці github, але я просто спробував її з BCM43142A0-185f-2167.hcd, і вона працювала!
Шрірам Каннан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.