Crmgo Blog

Bluetooth w OpenWrt.

Bluetooth w OpenWrt.

Pracę adaptera Bluetooth omówimy na przykładzie podłączenia telefonu komórkowego do routera przez interfejs Bluetooth. Będę używał telefonu Nokia 6230i, ale uważam, że model telefonu nie ma znaczenia, a proces podłączania jest taki sam dla wszystkich urządzeń. Na etapie konfiguracji należy zaznaczyć następujące…

Bluetooth w OpenWrt.

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
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.

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
Instalowanie obexftp (0.22-1) do root...
Pobieranie ftp://ftp:ftp@192.168.0.9/obexftp_0.22-1_brcm47xx.ipk.
Konfigurowanie obexftp.

root@OpenWrt:/# opkg install obexfs
Instalowanie obexfs (0.12-1) do root...
Pobieranie ftp://ftp:ftp@192.168.0.9/obexfs_0.12-1_brcm47xx.ipk.
Konfigurowanie 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:

Uwaga: wpis mógł powstać z pomocą AI i redakcji. Odpowiedzialny: Dmytro Lomaka, Kaltenkirchen.