Bluetooth в OpenWrt.

Работу Bluetooth адаптера рассмотрим на примере подключения мобильного телефона к роутеру через Bluetooth интерфейс. Телефон буду использовать nokia 6230i, но думаю, что модель телефона никакой роли не играет и процесс подключения одинаковый для всех.

На этапе конфигурации нужно отметить следующие модули:
Utilities:
<M> bluez-utils
Kernel modules:
Other modules:
<M> kmod-bluetooth
Libraries:
<M> libusb
Filesystem:
<M> libfuse

Загружаемся и устанавливаем пакеты:

root@OpenWrt:/# opkg install kmod-bluetooth bluez-utils
Installing kmod-bluetooth (2.6.36.4-1) to root...
Downloading ftp://ftp:ftp@192.168.0.9/kmod-bluetooth_2.6.36.4-1_brcm47xx.ipk.
Installing kmod-crc16 (2.6.36.4-1) to root...
Downloading ftp://ftp:ftp@192.168.0.9/kmod-crc16_2.6.36.4-1_brcm47xx.ipk.
Installing kmod-hid (2.6.36.4-1) to root...
Downloading ftp://ftp:ftp@192.168.0.9/kmod-hid_2.6.36.4-1_brcm47xx.ipk.
Installing kmod-input-core (2.6.36.4-1) to root...
Downloading ftp://ftp:ftp@192.168.0.9/kmod-input-core_2.6.36.4-1_brcm47xx.ipk.
Installing kmod-rfkill (2.6.36.4-1) to root...
Downloading ftp://ftp:ftp@192.168.0.9/kmod-rfkill_2.6.36.4-1_brcm47xx.ipk.
Installing bluez-utils (3.36-7) to root...
Downloading ftp://ftp:ftp@192.168.0.9/bluez-utils_3.36-7_brcm47xx.ipk.
Installing bluez-libs (3.36-3) to root...
Downloading ftp://ftp:ftp@192.168.0.9/bluez-libs_3.36-3_brcm47xx.ipk.
Installing libpthread (0.9.32-68) to root...
Downloading ftp://ftp:ftp@192.168.0.9/libpthread_0.9.32-68_brcm47xx.ipk.
Installing dbus (1.2.4.6permissive-2) to root...
Downloading ftp://ftp:ftp@192.168.0.9/dbus_1.2.4.6permissive-2_brcm47xx.ipk.
Installing libexpat (2.0.1-1) to root...
Downloading ftp://ftp:ftp@192.168.0.9/libexpat_2.0.1-1_brcm47xx.ipk.
Installing libdbus (1.2.4.6permissive-2) to root...
Downloading ftp://ftp:ftp@192.168.0.9/libdbus_1.2.4.6permissive-2_brcm47xx.ipk.
Configuring libpthread.
Configuring libdbus.
Configuring kmod-input-core.
Configuring bluez-libs.
Configuring libexpat.
Configuring dbus.
Configuring kmod-crc16.
Configuring kmod-hid.
Configuring kmod-rfkill.
Configuring kmod-bluetooth.
Configuring bluez-utils.

root@OpenWrt:/# opkg install libfuse
Installing libfuse (2.8.5-1) to root...
Downloading ftp://ftp:ftp@192.168.0.9/libfuse_2.8.5-1_brcm47xx.ipk.
Installing kmod-fuse (2.6.36.4-1) to root...
Downloading ftp://ftp:ftp@192.168.0.9/kmod-fuse_2.6.36.4-1_brcm47xx.ipk.
Configuring kmod-fuse.
Configuring libfuse.

root@OpenWrt:/# opkg install libusb
Installing libusb (0.1.12-2) to root...
Downloading ftp://ftp:ftp@192.168.0.9/libusb_0.1.12-2_brcm47xx.ipk.
Configuring libusb.

Чтобы получить доступ к файловой системе мобильника, обычно используют приложения openopbex, obexftp, obexfs. На момент написания этой статьи данные приложения не входят в состав openwrt. Поэтому добавим их самостоятельно.

Добавлять новые пакеты в openwrt достаточно просто. Нужно создать директорию с названием пакета в директории openwrt/package. В новой директории нужно создать Makefile. Makefile очень удобно создавать, если взять за основу какой-нибудь подобный из директории openwrt/package.

Если вам интересно, то можете самостоятельно добавить приложения openopbex, obexftp, obexfs в состав openwrt. Или взять мои версии из раздела «Скачать».

После того, как создали в openwrt/package новые директории, запускаем make menuconfig и отмечаем их для последующей сборки.

Доустановим новые пакеты:

root@OpenWrt:/# opkg install openobex
Installing openobex (1.3-1) to root...
Downloading ftp://ftp:ftp@192.168.0.9/openobex_1.3-1_brcm47xx.ipk.
Configuring openobex.

root@OpenWrt:/# opkg install obexftp
Installing obexftp (0.22-1) to root...
Downloading ftp://ftp:ftp@192.168.0.9/obexftp_0.22-1_brcm47xx.ipk.
Configuring obexftp.

root@OpenWrt:/# opkg install obexfs
Installing obexfs (0.12-1) to root...
Downloading ftp://ftp:ftp@192.168.0.9/obexfs_0.12-1_brcm47xx.ipk.
Configuring obexfs.

Подключаем Bluetooth адаптер и смотрим вывод dmesg:

root@OpenWrt:/# dmesg
Bluetooth: Core ver 2.15
NET: Registered protocol family 31
Bluetooth: HCI device and connection manager initialized
Bluetooth: HCI socket layer initialized
Bluetooth: L2CAP ver 2.15
Bluetooth: L2CAP socket layer initialized
Bluetooth: SCO (Voice Link) ver 0.6
Bluetooth: SCO socket layer initialized
Bluetooth: RFCOMM TTY layer initialized
Bluetooth: RFCOMM socket layer initialized
Bluetooth: RFCOMM ver 1.11
Bluetooth: BNEP (Ethernet Emulation) ver 1.3
Bluetooth: BNEP filters: protocol multicast
Bluetooth: HIDP (Human Interface Emulation) ver 1.2
Bluetooth: HCI UART driver ver 2.2
Bluetooth: HCI H4 protocol initialized
Bluetooth: HCI BCSP protocol initialized
Bluetooth: Generic Bluetooth USB driver ver 0.6
usbcore: registered new interface driver btusb
usb 1-1.4.3: new full speed USB device using ohci_hcd and address 5

Для работы с Bluetooth адаптером есть свои утилиты. Давайте рассмотрим некоторые из них. Утилилита hciconfig чем-то похожа на утилиту ifconfig.

Выполним её:

root@OpenWrt:/# hciconfig
hci0: Type: USB
BD Address: 00:00:00:00:00:00 ACL MTU: 0:0 SCO MTU: 0:0
DOWN
RX bytes:0 acl:0 sco:0 events:0 errors:0
TX bytes:0 acl:0 sco:0 commands:0 errors:0

Обнаружено устройство hci0, которое находится в состоянии down. Аналогично ifconfig выполним hciconfig hci0 up.

root@OpenWrt:/# hciconfig hci0 up
root@OpenWrt:/# hciconfig
hci0: Type: USB
BD Address: 00:0A:3A:5C:88:60 ACL MTU: 192:8 SCO MTU: 64:8
UP RUNNING
RX bytes:340 acl:0 sco:0 events:11 errors:0
TX bytes:38 acl:0 sco:0 commands:11 errors:0

Еще одна полезная утилита - это hcitool. Включим Bluetooth на телефоне и выполним:

root@OpenWrt:/# hcitool scan
Scanning ...
00:13:FD:80:F9:F5 Нокия6230ай

Теперь, когда нам известен адрес телефона, давайте попробуем получить доступ к его файловой системе. Использовать будем утилиту obexfs. При вызове необходимо указать адрес телефона и директорию, куда будет примонтирована файловая система мобильника:

root@OpenWrt:/# obexfs -b00:13:FD:80:F9:F5 /mnt/nokia/

После выполнения этой команды на телефоне появится предложение для соединения, и необходимо будет ввести Pin код. Введя pin код на телефоне, необходимо ввести такой же и на стороне роутера.... Как это сделать, я не знаю )))

Обойти эту проблему очень просто. Смотрим содержимое следующей директории:

root@OpenWrt:/# ls -l /var/lib/bluetooth/00\:0A\:3A\:5C\:88\:60/
-rw-r--r-- 1 root root 27 Jan 1 00:04 classes
-rw-r--r-- 1 root root 26 Jan 1 01:40 config
-rw-r--r-- 1 root root 38 Jan 1 00:02 did
-rw-r--r-- 1 root root 35 Jan 1 00:02 features
-rw-r--r-- 1 root root 42 Jan 1 00:10 lastseen
-rw-r--r-- 1 root root 42 Jan 1 01:41 lastused
-rw------- 1 root root 55 Jan 1 00:11 linkkeys
-rw-r--r-- 1 root root 27 Jan 1 00:02 manufacturers
-rw-r--r-- 1 root root 37 Jan 1 00:02 names
-rw-r--r-- 1 root root 499 Jan 1 00:02 profiles
-rw-r--r-- 1 root root 2658 Jan 1 00:02 sdp

В ней находятся системные файлы, отвечающие за Bluetooth соединение. Добавим сюда файл pincodes, в котором укажем адрес и соответствующий ему pin код. У меня он выглядит следующим образом: 00:13:FD:80:F9:F5 1

После того, как создали этот файл, pin кода со стороны роутера уже не будет требоваться. Пробуем снова:

root@OpenWrt:/# obexfs -b00:13:FD:80:F9:F5 /mnt/nokia/
root@OpenWrt:/# ls -l /mnt/nokia/
GETDIR:Mem. card
GETDIR:Фото
GETDIR:Клипы
GETDIR:Музыка
GETDIR:Темы
GETDIR:Графика
GETDIR:Мелодии
GETDIR:Аудиозаписи
GETDIR:Ww
GETDIR:0017.GIF

Отмонтровать файловую систему можно так:

root@OpenWrt:/# umount /mnt/nokia/



Купить Bluetooth адаптер у нас:

Bluetooth адаптер