klink0v (klink0v) wrote,
klink0v
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"), пытаемся "спарить" нашу гарнитуру или что там у нас есть, настроить. По идее должно заработать.

Вот такая нелёгкая жизнь у любителей самостоятельно делать гамбургеры из мяса и булок.
Tags: bluetooth, debian, администрирование
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 3 comments