Я использую версию ядра 2.6.21. Более поздними версиями я пользоваться не могу, т.к. с ними несовместим один из патчей. Для нормальной работы беспроводной bluetooth-гарнитуры (headset) необходимо наладить работу alsa-sco (протокола для звуковых bluetooth-устройств). Замечу: есть два типа звуковых bluetooth-устройств: sco (моно всякие там наушники-гарнитуры, надеваемые на ухо) и a2dp (стерео). Здесь речь идёт о sco-устройствах. Для начала установим необходимые для дальнейшей работы пакеты:
aptitude install lftp build-essential libbluetooth2-dev automake autoconf cvs libtool libasound2-dev libdbus-1-dev libdbus-glib-1-dev bluez-gnome
Скачиваем СТАНДАРТНОЕ ядро (для более новых и/или нестандартных ядер патч, возможно, не будет работать):
cd /usr/src/
lftp -e "get pub/linux/kernel/v2.6/linux-2.6.21.tar.bz2 ; quit" ftp.ch.kernel.org
tar xjf linux-2.6.21.tar.bz2
Налагаем на ядро патч /usr/share/doc/bluetooth-alsa/patches/sco-flowcontrol-v4.0.diff.gz:
ln -sf linux-2.6.21 a
ln -sf linux-2.6.21 linux
cp /usr/share/doc/bluetooth-alsa/patches/sco-flowcontrol-v4.0.diff.gz .
gunzip sco-flowcontrol-v4.0.diff.gz
patch -p0 < sco-flowcontrol-v4.0.diff
К файлу /usr/src/linux/drivers/media/video/bt8xx/bttv-input.c
вручную применяем lirc-patch.diff
(ну что делать, если команда patch
применять его отказывается?) Это нужно для того, чтобы заработал мой пульт ДУ (который входит в комплект поставки
ТВ-тюнера). На пульте работают не все кнопки, но и работающих мне вполне хватает.
Ещё ядро не хочет просто так распознавать мой ТВ-тюнер Leadtek Winfast. Я заставляю его это сделать,
меняя .tuner_type
в файле /usr/src/linux/drivers/media/video/bt8xx/bttv-cards.c
:
Было: .tuner_type = 5, /* default for now, gpio reads BFFF06 for Pal bg+dk */
Стало: .tuner_type = 38, /* default for now, gpio reads BFFF06 for Pal bg+dk */
Сохраняем мою конфигурацию ядра в файл /usr/src/linux/.config
Ну всё, теперь можно компилировать ядро командами
cd /usr/src/linux/ && \
make oldconfig && make menuconfig && make-kpkg --rootcmd=fakeroot clean && \
make-kpkg --rootcmd=fakeroot kernel_headers kernel_image modules_image && \
make clean
(Перед компиляцией откроется меню, где вы должны изменить конфигурацию ядра в соответствии с запросами вашего компьютера.)
По окончании процесса в /usr/src появляются два новых deb-файла, которые надо установить с помощью dpkg -i
Перезагружаемся под новым ядром.
Втыкаем bluetooth-антенну в компьютер. Внимание: в моём компьютере не все usb-порты одинаковы в том смысле, что некоторые не чувствуют, когда я втыкаю в
них мою bluetooth-антенну. Если я воткнул антенну в "правильный" порт, то последующая команда hcitool dev
выдаст мне строчку видаDevices:
hci0 00:1F:81:00:02:00
После апрейда lenny (дело было где-то между сентябрём 2008 и февралём 2009) мой bluetooth-наушник вдруг перестал работать. Долго не мог понять, в чём
дело. Оказалось, надо было просто добавить пользователя (меня то есть) в группу netdev
командой
adduser shalaev netdev
hcitool scan
, которая выдаёт нам адрес наушника (что-то вроде 00:11:22:33:44:55
). Прописываем этот адрес в файл ~/.asoundrc
и
запускаем из-под обычного пользователя:
bluetooth-applet &
hcitool cc 00:11:22:33:44:55
На экране появится окошечко, предлагающее ввести пароль для связи с наушником. В моём случае это "1234", но бывает ещё
"0000". Однажды введённый пароль запоминается и больше вводить его уже никогда не придётся.
Далее компилируем драйвер для sco-наушника и создаём файл ~/.asoundrc
, следуя инструкциям
из файла /usr/share/doc/bluetooth-alsa/build.html
или отсюда.
Файл ~/.a2dprc
для sco-устройства не нужен.
headsetd
aplay -Dplug:headset file.wav
где file.wav
какой-нибудь звуковой файл.
Если все предыдущие процедуры прошли удачно, то эта команда подсоединит наушник и сыграет в него файл.
Всё, настройка закончена. Можно запускать twinkle (звонить родным и знакомым).
Примечания:
rm -r /var/lib/bluetooth/*
/usr/share/doc/bluetooth-alsa/patches/sco-flowcontrol-v4.0.diff.gz
в этом случае следует использовать
plugz/patches/sco-flowcontrol-v4.3.diff
(Этот файл появился у вас на диске после выполнения
вышеупомянутых инструкций.)Выше описан новый метод подключения bluetooth-гарнитуры. В своё время я написал про старый метод.
У меня есть 2 usb-bluetooth адаптера. Один работает с гарнитурой, а второй -- нет. В чём дело -- не знаю! Хороший адаптер по команде hciconfig -a
выдаёт:
Плохой (более новый) адаптер выводит
hci0: Type: USB
BD Address: 00:04:61:85:8E:2B ACL MTU: 192:8 SCO MTU: 64:8
UP RUNNING PSCAN ISCAN
RX bytes:786151 acl:22 sco:15351 events:105 errors:0
TX bytes:574203 acl:18 sco:11236 commands:60 errors:0
Features: 0xff 0xff 0x8b 0xf8 0x18 0x18 0x00 0x80
Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
Link policy: RSWITCH HOLD SNIFF PARK
Link mode: SLAVE ACCEPT
Name: 'gogol-0'
Class: 0x080104
Service Classes: Capturing
Device Class: Computer, Desktop workstation
HCI Ver: 1.1 (0x1) HCI Rev: 0x639 LMP Ver: 1.1 (0x1) LMP Subver: 0x639
Manufacturer: Cambridge Silicon Radio (10)
В чём дело -- не знаю, надо разбираться. Может быть стоит попробовать изменить класс...
hci0: Type: USB
BD Address: 00:1F:81:00:02:00 ACL MTU: 339:6 SCO MTU: 180:1
UP RUNNING PSCAN
RX bytes:1318 acl:0 sco:0 events:40 errors:0
TX bytes:410 acl:0 sco:0 commands:39 errors:0
Features: 0xef 0x3e 0x09 0x70 0x00 0x08 0x00 0x80
Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
Link policy: RSWITCH HOLD SNIFF PARK
Link mode: SLAVE ACCEPT
Name: 'sputnik-0'
Class: 0x02010c
Service Classes: Networking
Device Class: Computer, Laptop
HCI Ver: 2.0 (0x3) HCI Rev: 0x3 LMP Ver: 2.0 (0x3) LMP Subver: 0x3
Manufacturer: R F Micro Devices (40)
# Get the output from hciconfig -a
# For using SCO, get the output from hciconfig hci0 revision
is helpful (Run hciconfig as root)
* If it prints "SCO mapping: HCI" then your adapter should work.
* If it prints "SCO mapping: PCM" then you might permanently change the setting using a command like "pskey mapsco 0" or "bccmd psset -s default 0x1ab 0" using bluez-utils-cvs but this is at your own risk.
* If it doesn't print either of those, you probably need a different bluetooth adapter (preferably "CSR" based). You might be able to get a broadcom adapter to work but it may require that you boot with a kernel argument (the force_scofix parameter of the hci_usb driver?) to force sco mtu values
* If the adapter is made by Silicon Wave, it will not work. No one has gotten these things to do audio in linux.
Результаты команды hciconfig hci0 revision
:
hci0: Type: USB
BD Address: 00:04:61:85:8E:2B ACL MTU: 192:8 SCO MTU: 64:8
HCI 18.2.1
Chip version: BlueCore3-ROM
Max key size: 128 bit
SCO mapping: HCI
Для "плохого" адаптера:
hci0: Type: USB
BD Address: 00:1F:81:00:02:00 ACL MTU: 339:6 SCO MTU: 180:1
Unsupported manufacturer
Вывод: "плохой" адаптер безнадёжен, его можно кому-нибудь подарить или выкинуть...
После этого я купил новый адаптер у китайцев на ebay за $2.19 (доставка по США бесплатно). Свидетельствую: он хороший, работает на Debian нормально. Осталось ещё понять, как запустить его на Ubuntu с новым ядром (который стоит на моём EEE-неттопе).
Олег Шалаев Last modified: Sun Mar 28 12:29:48 CDT 2010