По мотивам этой темы
решил создать отдельную т.к. блютуз устройства от 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 идентичны.
Итак нам понадобятся:
- Утилита hex2hcd (https://github.com/jessesung/hex2hcd)
Скачать исходник https://github.com/jessesung/hex2hcd/archive/master.zip
Распаковать архив, зайти в директорию и выполнить:Копируем hex2hcd в директорию /usr/local/bin$ make
$ sudo cp hex2hcd /usr/local/bin
- Драйвера 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».
- Скрипт brcmbtefw
Скачать, распаковать и выполнить:
где вместо /path/file.inf укажите inf-файл драйверов Broadcom bluetooth для Windows.$ ./brcmbtefw /path/file.inf
В моём случае так:В результате скрипт создаст в домашней директории пользователя файл с расширением hcd (hcd-firmware) вида:$ ./brcmbtefw ~/.wine/dosdevices/c:/DRIVERS/WIN/COMBT/Win64/bcbtums-win8x64-brcm.inf
fw-vid_pid.hcd, где вместо vid и pid будут идентификатор производителя и идентификатор продукта вашего устройства полученного от lsusb.
- Необходимо скопировать полученный 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