Мобильные юниксы vol. 3 Anton Karpov Хакер, номер #071, стр. 071-098-1 (toxa@real.xakep.ru) Синезубые демоны В первых двух частях «Мобильных юниксов» мы подробно рассмотрели расширенное управление электропитанием (ACPI), подключение PCMCIA-карт, обработку внешних событий (подключение батареи, закрытие крышки ноутбука), выход в интернет с помощью связки «мобильный телефон + GPRS + USB-шнурок + ноутбук», а также создание собственной Wi-Fi точки доступа. Однако без внимания осталась технология беспроводной связи Bluetooth. Третья часть нашей саги призвана восполнить этот информационный пробел. Текущее положение дел Технологии не стоят на месте - новые появляются, текущие становятся доступными для широких масс, старые отходят в небытие. Так и с портативными девайсами: если год-два назад большинство мобильников или PDA подключали к компьютеру/ноутбуку через инфракрасный порт или USB (а то и serial) кабель, то нынче все большие обороты набирает Bluetooth. BT-адаптеры постепенно превращаются из фишек, которыми оборудуют исключительно топовые модели мобил и карманников, в такой же обязательный атрибут средств коммуникации, каким уже давно стал USB или не так давно FireWire. Рассмотрим типичную ситуацию: ты проапгрейдил свой мобильник, и твоя новая трубка имеет встроенную поддержку Bluetooth. Для ноутбука ты купил USB'шный BT-адаптер (все-таки не во все лаптопы их пока встраивают), к которому прилагается диск с софтом для Windows и красочная инструкция о том, как вставить этот диск в CD-привод и запустить. Но вот незадача - ты предпочитаешь никсы ;-). Можешь смело выкинуть диск в ведро, он нам не понадобится. Bluetooth и FreeBSD FreeBSD, как правильная ОС, имеет встроенную полноценную поддержку BT-стэка. Никаких патчей не понадобится. Учитывая, что у нас 5-я ветка фряхи, просто загружаем драйвер BT-стэка: # kldload ng_ubt Чтобы не делать этого каждый раз, пропишем его в автозагрузку: # echo 'ng_ubt_load="YES"' > > /boot/loader.conf Теперь втыкаем наш USB-адаптер. Ядро обрадует нас сообщением вида: ubt0: Cambridge Silicon Radio Ltd. Bluetooth USB dongle, rev 1.10/3.73, addr 2 ubt0: Interface 0 endpoints: interrupt=0x81, bulk-in=0x82, bulk-out=0x2 ubt0: Interface 1 (alt.config 5) endpoints: isoc-in=0x83, isoc-out=0x3; wMaxPacketSize=49; nframes=6, buffer size=294 Отлично, теперь осталось запустить сам BT-стэк. Это делается с помощью скрипта rc.bluetooth, расположенного в /usr/share/examples/netgraph/bluetooth/. Скопируем его в /etc для порядка: # cp /usr/share/examples/netgraph/bluetooth/rc.bluetooth /etc/ Теперь только осталось его запустить: # /etc/rc.bluetooth start ubt0 BD_ADDR: 00:09:dd:10:14:f6 Features: 0xff 0xff 0xf 00 00 00 00 00 [snip] Однако каждый раз выполнять эту команду как-то лениво. Но мы помним, что у нас есть devd(8) - демон устройств, который умеет мониторить состояние девайсов и выполнять указанные действия. Подключение BT-адаптера влечет за собой создание устройства /dev/ubt0 (FreeBSD 5 использует devfs). Ассоциируем этот процесс с запуском скрипта, предварительно убедившись, что devd(8) отконфигурирован на автозапуск: # /etc/rc.d/devd rcvar |