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

Как я могу это исправить?

Guja1501
источник
Аналогичный вопрос с ответом для карты 4352 askubuntu.com/questions/617513/…
Уилф

Ответы:

79

Вам необходимо установить прошивку.

Распространение прошивки 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. Теперь извлеките эту прошивку из того же файла cab.

    Затем вам нужно конвертировать этот файл из шестнадцатеричного формата в 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.

Но это не законно : - ((

Pilot6
источник
6
В большинстве случаев, когда я просыпался от своего ноутбука, перезагрузка модуля bluetooth завершалась неудачно с трассировкой стека ядра. Если вам нужен bluetooth без перезагрузки, вам нужно выгрузить модуль bluetooth ( sudo modprobe -r btusb) и перезагрузить его ( sudo modprobe btusb), чтобы blueooth снова заработал. bugzilla.kernel.org/show_bug.cgi?id=81821
solsTiCe
1
На шаге 6 для hex2hcd должен быть задан выходной файл, например: hex2hcd [input-file] -o [output-file] Не могли бы вы обновить ответ?
Минас Мина
В ответе есть выходной файл. Или автор изменил это. Раньше это был выходной файл `hex2hcd input-file
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
DUALBOOT USERS: обратите внимание, что вы можете извлечь правильную прошивку из вашей ОС Windows. Для этого перейдите в диспетчер устройств Windows, найдите ваше устройство Bluetooth, щелкните правой кнопкой мыши, Свойства, Драйвер, Сведения о драйвере. Там вы найдете путь к вашему .hexфайлу, который вы можете скопировать в вашу систему Linux. После этого выполните шаги 5-8. Этот ответ, кстати, отличный.
Ману Си Джей
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 Device id: 0a5c: 21e8) драйверы winterheart загрузились, но hcitool devвсе еще не показывали никаких устройств, и в системном журнале произошла ошибка. На сайте plugable.com/2014/06/23/… нашел другой драйвер, который работал.
Грег Брей,
8

Это все, что вам нужно: https://github.com/winterheart/broadcom-bt-firmware

В этом хранилище вы можете найти дополнительную информацию и все необходимые драйверы беспроводных карт Broadcom .


Чтобы быть более конкретным, я даю вам инструкции, которые я написал для себя:

Это руководство предназначено для того, чтобы беспроводная / Bluetooth-сетевая сетевая карта Broadcom Corporation BCM43142 802.11b / g / n (версия 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, и она работала!
Шрирам Каннан