LINUX.ORG.RU

Избранные сообщения nZemekis

Broadcom Bluetooth

Форум — Linux-hardware

По мотивам этой темы решил создать отдельную т.к. блютуз устройства от Broadcom встречаются во многих моделях ноутбуков.

Важным условием работы блютуз от Broadcom, является пропатченный модуль ядра btusb на предмет поддержки Broadcom bluetooth и наличие прошивки(firmware) для вашего устройства. В ядрах с kernel.org я этого патча не обнаружил (может плохо искал). В Ubuntu этот патч имеется. В других дистрибутивах не смотрел.

Уникальную для каждого устройства прошивку можно найти в распакованных драйверах для Windows, в одном из файлов с расширением .hex (назовём его hex-firmware). Hex-firmware необходимо конвертировать в hcd-firmware с помощью утилиты hex2hcd.

Для поиска firmware в распакованных Windows-драйверах, разработал скрипт brcmbtefw. Загрузить можно отсюда.
Скрипт на основе результата lsusb, ищет hex-firmware соответствующий вашему устройству и конвертирует его в формат hcd с помощью утилиты hex2hcd.
Скрипту необходимо передать в качестве параметра имя inf-файла драйверов Broadcom bluetooth для Windows (XP, 7, 8).
Заметил, что на настоящее время, firmware x32 и x64 идентичны.

Итак нам понадобятся:

  1. Утилита hex2hcd (https://github.com/jessesung/hex2hcd)
    Скачать исходник https://github.com/jessesung/hex2hcd/archive/master.zip
    Распаковать архив, зайти в директорию и выполнить:
    $ make
    Копируем hex2hcd в директорию /usr/local/bin
    $ sudo cp hex2hcd /usr/local/bin

  2. Драйвера Broadcom bluetooth для Windows.
    Я cкачал для Windows 8.1 по ссылке: http://download.lenovo.com/ibmdl/pub/pc/pccbbs/mobiles/h9bn03ww.exe
    С помощью wine запускаем скачанный exe, чтобы распаковать драйвер на диск.
    Путь распаковки оставим по умолчанию, в моём случае это C:\DRIVERS\WIN\COMBT
    В конце распаковки снимаем флажок «Install Broadcom bluetooth Combo Driver for Windows now».

  3. Скрипт brcmbtefw
    Скачать, распаковать и выполнить:
    $ ./brcmbtefw /path/file.inf
    где вместо /path/file.inf укажите inf-файл драйверов Broadcom bluetooth для Windows.
    В моём случае так:
    $ ./brcmbtefw ~/.wine/dosdevices/c:/DRIVERS/WIN/COMBT/Win64/bcbtums-win8x64-brcm.inf
    В результате скрипт создаст в домашней директории пользователя файл с расширением hcd (hcd-firmware) вида:
    fw-vid_pid.hcd, где вместо vid и pid будут идентификатор производителя и идентификатор продукта вашего устройства полученного от lsusb.

  4. Необходимо скопировать полученный hcd-firmware в директорию /lib/firmware
    В моём случае было так:
    $ sudo cp fw-105b_e065.hcd /lib/firmware

Врезультате после перезагрузки, я получил работающий блютуз.

Замечены проблемы:
Иногда блютуз устройство не определяется при включении компьютера.
В dmesg появляются строки:

$ dmesg|grep -i blue
...
[   10.363287] Bluetooth: hci0 command 0xfc2e tx timeout
...
[   18.366106] Bluetooth: fail to load firmware
Помогает уход-выход из ждущего или спящего режима. Думаю что это баг ядра.

P.s.: Все действия производились на Xubuntu 12.04.4.
$ uname -a
Linux PCBL 3.11.0-19-generic #33~precise1-Ubuntu SMP Wed Mar 12 21:17:09 UTC 2014 i686 i686 i386 GNU/Linux

 , , ,

superuser
()