Bluetooth от Broadcom в Debian Jessie

Apr 15, 2016 21:36

Оригинал взят у klink0v в Bluetooth от Broadcom в Debian Jessie

В Linux-е поддержка нового железа традиционно отстает от выпуска на рынок новых моделей различных устройств. Поэтому нельзя просто так взять и подключить к стабильному релизу какую-нибудь Bluetooth-гарнитурку, чтобы потом "потрещать" по Skype с её использованием.

Основная проблема заключается в том, что USB-свистки на Broadcom-овских чипах, кои сегодня весьма популярны, после инициализации (подачи питания) требуют загрузки унутрь себя патча для своей прошивки (Firmware). И если какой-нибудь A2DP скорее всего "заведётся" из коробки даже без патченной прошивки, то вот HFP/HSP точно работать не будут. Таким образом, этот самый firmware patch надо ещё где-то взять и как-то загрузить его в bluetooth-модуль.

Вот как раз в процессе загрузки поджидает вторая засада. По-хорошему, этим должен заниматься модуль ядра под названием "btusb". Однако входящий в состав стабильного дистрибутива экземпляр просто не воспринимает львиной доли существующих сегодня устройств как нуждающихся в обновлении прошивки. Поэтому приходится либо патчить и пересобирать сам модуль, либо тупо вкорячить более свежее ядро.

Ну и довершает картину маслом факт, что pulseaudio в Jessie слишком тухлый для того, чтобы уметь переключать профили на беспроводном аудиоустройстве. Надо обновлять и его тоже. Благо, пересобирать не обязательно, можно просто взять из backports.

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

diy, хозяйке на заметку, linux

Previous post Next post
Up