Pracę adaptera Bluetooth omówimy na przykładzie podłączenia telefonu komórkowego do routera przez interfejs Bluetooth. Do testów użyję telefonu Nokia 6230i, ale uważam, że model telefonu nie ma znaczenia, a proces parowania jest taki sam dla wszystkich urządzeń.
Na etapie konfiguracji należy zaznaczyć następujące moduły:
Utilities:
<M> bluez-utils
Kernel modules:
Other modules:
<M> kmod-bluetooth
Libraries:
<M> libusb
Filesystem:
<M> libfuse
Uruchamiamy system i instalujemy pakiety:
| 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 root@OpenWrt:/# opkg install libusb |
Aby uzyskać dostęp do systemu plików telefonu komórkowego, zwykle używa się aplikacji openobex, obexftp lub obexfs. W momencie pisania tego artykułu aplikacje te nie były częścią dystrybucji OpenWrt. Dlatego dodamy je ręcznie.
Dodawanie nowych pakietów do OpenWrt jest stosunkowo proste. Należy utworzyć katalog o nazwie odpowiadającej nazwie pakietu w katalogu openwrt/package. W nowo utworzonym katalogu trzeba stworzyć plik Makefile. Tworzenie pliku Makefile jest wygodne, jeśli weźmie się za wzór podobny plik z katalogu openwrt/package.
Jeśli chcesz, możesz samodzielnie dodać aplikacje openobex, obexftp i obexfs do składu OpenWRT. Możesz również pobrać moje wersje z sekcji „Pobierz”.
Po utworzeniu nowych katalogów w openwrt/package, uruchom make menuconfig i zaznacz je do późniejszej kompilacji.
Zainstalujmy nowe pakiety:
| root@OpenWrt:/# opkg install openobex
Instalowanie openobex (1.3-1) do root...
Pobieranie ftp://ftp:ftp@192.168.0.9/openobex_1.3-1_brcm47xx.ipk.
Konfigurowanie openobex.
root@OpenWrt:/# opkg install obexftp root@OpenWrt:/# opkg install obexfs |
Podłącz adapter Bluetooth i sprawdź wyjście 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 |
Istnieją specjalne narzędzia do pracy z adapterem Bluetooth. Przyjrzyjmy się niektórym z nich. Narzędzie hciconfig jest podobne do ifconfig.
Wykonajmy je:
| 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 |
Wykryto urządzenie hci0, które jest w stanie down. Podobnie jak w przypadku ifconfig, wykonaj 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 |
Kolejnym przydatnym narzędziem jest hcitool. Włącz Bluetooth na telefonie i wykonaj:
| root@OpenWrt:/# hcitool scan Scanning ... 00:13:FD:80:F9:F5 Nokia6230i |
Teraz, gdy znamy adres telefonu, spróbujmy uzyskać dostęp do jego systemu plików. Użyjemy narzędzia obexfs. Podczas wywołania należy podać adres telefonu oraz katalog, do którego zostanie zamontowany system plików telefonu:
| root@OpenWrt:/# obexfs -b00:13:FD:80:F9:F5 /mnt/nokia/ |
Po wykonaniu tej komendy na telefonie pojawi się prośba o połączenie, a następnie będzie trzeba wprowadzić kod PIN. Wprowadziwszy kod PIN na telefonie, należy wpisać ten sam kod po stronie routera... Jak to zrobić, nie wiem :))
Omijanie tego problemu jest bardzo proste. Sprawdzamy zawartość następującego katalogu:
| 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 |
Znajdują się w nim pliki systemowe odpowiedzialne za połączenie Bluetooth. Dodajemy tutaj plik pincodes, w którym podajemy adres oraz odpowiadający mu kod PIN. U mnie wygląda to następująco: 00:13:FD:80:F9:F5 1
Po utworzeniu tego pliku, kod PIN po stronie routera nie będzie już wymagany. Spróbujmy ponownie:
