Оригинал взят у
klink0v в
Bluetooth от Broadcom в Debian Jessie В Linux-е поддержка нового железа традиционно отстает от выпуска на рынок новых моделей различных устройств. Поэтому нельзя просто так взять и подключить к стабильному релизу какую-нибудь Bluetooth-гарнитурку, чтобы потом "потрещать" по Skype с её использованием.
Основная проблема заключается в том, что USB-свистки на Broadcom-овских чипах, кои сегодня весьма популярны, после инициализации (подачи питания) требуют загрузки унутрь себя патча для своей прошивки (Firmware). И если какой-нибудь A2DP скорее всего "заведётся" из коробки даже без патченной прошивки, то вот HFP/HSP точно работать не будут. Таким образом, этот самый firmware patch надо ещё где-то взять и как-то загрузить его в bluetooth-модуль.
Вот как раз в процессе загрузки поджидает вторая засада. По-хорошему, этим должен заниматься модуль ядра под названием "btusb". Однако входящий в состав стабильного дистрибутива экземпляр просто не воспринимает львиной доли существующих сегодня устройств как нуждающихся в обновлении прошивки. Поэтому приходится либо патчить и пересобирать сам модуль, либо тупо вкорячить более свежее ядро.
Ну и довершает картину маслом факт, что pulseaudio в Jessie слишком тухлый для того, чтобы уметь переключать профили на беспроводном аудиоустройстве. Надо обновлять и его тоже. Благо, пересобирать не обязательно, можно просто взять из backports.
Итого, пошаговый алгоритм будет примерно следующим. Большую его часть я подглядел
здесь. Итак.
- Ставим / обновляем из jessie-backports более свежее ядро. На момент написания этого псто актуальная версия была "4.4".
- Ставим / обновляем из jessie-backports пакет "pulseaudio-module-bluetooth" со всеми его зависимостями.
- При помощи утилиты "lsusb" находим VID и PID нашего "свистка".
- Скачиваем с офсайта виндовые (!) драйвера для этого устройства, например, для Win 7 x64 (по большому счёту это не важно, firmware будет везде одинаковой). Распаковываем архив. Находим там внутри файл с именем "bcbtums-win7x64-brcm.inf". Открываем его.
- Внутри этого файла находим наш VID и PID, полученные на шаге номер 3. Напротив него будет значиться некое "кодовое имя" устройства. Например, для моего "VID_0B05&PID_17CB" кодовое имя звучит как "RAMUSB17CB".
- Находим ниже в том же файле секцию с таким кодовым именем. Видим там отсылку к файлу с прошивкой вида "*.hex". В моём примере это "BCM20702A1_001.002.014.0889.0928.hex".
- Находим hex-файл с таким именем в папке с распакованным на шаге номер 4 драйвером, копируем его куда-нибудь в тёплое укромное место.
- Скачиваем вот отсюда исходный код утилитки для конвертации HEX-файла в HCD-файл. Сохраняем её в в то же укромное место, компилируем (там один-единственный сишный текстовый файл с кодом, транслируется на "раз-два").
- При помощи скомпилированной на предыдущем шаге бинарной утилитки конвертируем наш HEX-файл в HCD-файл, понятный модулю btusb.
- Перезагружаем компьютер. Находим в логах строчку, связанную с bluetooth. Например, так: "dmesg | grep -i blue". Ищем там ругательства типа "firmware: direct-loading firmware brcm/BCM20702A1-0b05-17cb.hcd", "file not found" и всё в этом духе. Запоминаем название файла, который он так долго и так безуспешно пытался найти.
- Переименовываем сгенерированный на шаге номер 9 HCD-файл в соответствии с полученным на шаге номер 10 тайным знанием. Помещаем этот файл в папку "/lib/firmware/brcm".
- Снова перезагружаем компьютер. Теоретически можно сделать "rmmod btusb && modprobe btusb", но у меня он почему-то всё равно упорно не желал "подхватывать" файл с прошивкой вплоть до ребута.
- Запускаем утилиту управления bluetooth-ом (например, апплет "gnome-bluetooth"), пытаемся "спарить" нашу гарнитуру или что там у нас есть, настроить. По идее должно заработать.
Вот такая нелёгкая жизнь у любителей самостоятельно делать гамбургеры из мяса и булок.