Login
Newsletter
Werbung

So, 4. September 2005, 00:00

Mobiltelefone und Linux

Bluetooth

Ähnlich wie im Falle von IrDA kommt die BlueTooth-Schnittstelle wesentlich öfter in Mobiltelefonen als in unseren Rechnern vor. Ein BlueTooth-Controller, der über die USB-Schnittstelle an den Rechner angeschlossen wird, ist bereits mindestens dreimal so teuer wie IrDA. Die meisten dieser Geräte funktionieren zwar unter Linux, aber wir können uns vor dem Einkauf da nicht sicher sein - wir finden auf diesen Geräten keine Informationen über die verwendeten Schaltkreise.

Die BlueTooth-Technologie ist wesentlich komplexer als IrDA - wir haben hier höher entwickelte Sicherheitsmechanismen, mehr Möglichkeiten im Bereich des dynamischen Anlegens von Netzwerken oder der Stimmenversendung. In diesem Artikel interessiert uns ausschließlich die Realisierung der Verbindung mit einem Telefon.

Die BlueTooth-Adapter für USB benötigen das Kernelmodul hci_usb oder - wenn wir ein Gerät mit Schaltkreisen der Firma Broadcom haben - das Modul bcm203x. Im zweiten Fall brauchen wir neben dem Kernelmodul auch noch die Firmware. Sie ist oft eine Problemquelle, deshalb schauen wir sie uns genauer an. Die Firmware sind zwei Dateien (BCM2033-FW.bin und BCM2033-MD.hex), die im Moment des Anschlusses in das Gerät geladen werden müssen. Unter Linux kann dies mit zwei Methoden realisiert werden:

  • Der Daemon hotplug startet das Skript firmware.agent, und es wird in /usr/lib/hotplug/firmware oder in /lib/firmware nach Firmware-Dateien gesucht
  • Der Daemon hotplug startet ein spezielles Programm zur Suche nach der Firmware mit dem Namen bluefw, und nach den Dateien wird im Verzeichnis /etc/bluetooth/firmware gesucht

Aus Lizenzgründen enthalten nicht alle Distributionen Dateien mit Firmware. Wir müssen sie oft aus dem Internet herunterladen oder von der Partition mit Treibern für MS Windows kopieren und an einem entsprechenden Ort plazieren. Wenn wir nicht wissen, welcher Ort der richtige ist, können wir sie einfach überall hinkopieren.

Abgesehen von der eventuellen Notwendigkeit des Ladens der Firmware-Dateien besitzen moderne Distributionen alles, was für die Arbeit mit BlueTooth notwendig ist. Nach dem Anschluss unseres Adapters zeigen das Kommando dmesg und Systemlogs, ob das entsprechende Kernelmodul automatisch geladen wurde. Wenn wir Geräte mit einem Broadcom-Schaltkreis anschließen, soll die Firmware geladen werden, man kann dies in Systemlogs daran erkennen, dass das Gerät quasi getrennt und sofort wieder mit einer neuen Adresse angeschlossen wird. Es erscheinen drei Zeilen, die z.B. wie folgt aussehen können:

usb 1-1: new full speed USB device using uhci_hcd and address 5
usb 1-1: USB disconnect, address 5
usb 1-1: new full speed USB device using uhci_hcd and address 6

Neben den Kernelmodulen (rfcomm, l2cap, hci_usb) brauchen wir noch einige weitere Pakete. Um die Aufgabe zu vereinfachen, können wir alles installieren, was bluez im Namen hat - meistens sind dies die Pakete bluez-bluefw, bluez-libs, bluez-pan, bluez-pin und bluez-utils. Nach deren Installation im System finden wir das Verzeichnis /etc/bluetooth mit einigen Konfigurationsdateien und die Datei /etc/init.d/bluetooth (oder bluez, bluez-utils), dessen Aufgabe es ist, die BlueTooth-Schnittstelle beim Systemstart zu aktivieren. Auf meinem Rechner - in einigen Distributionen - funktioniert das nicht automatisch. Stattdessen führe ich nach dem Anschluss des BlueTooth-Adapters die Anweisung /etc/init.d/bluez-utils restart aus. Damit soll die Schnittstelle aktiviert werden. Wir überprüfen dies mit der Anweisung hciconfig. In meinem System bekomme ich folgendes:

hci0: Type: USB
 BD Address: 00:03:C9:2E:65:5A ACL MTU: 377:10 SCO MTU: 16:0
 UP RUNNING PSCAN ISCAN
 RX bytes:101 acl:0 sco:0 events:13 errors:0
 TX bytes:300 acl:0 sco:0 commands:13 errors:0

Wenn wir sehen, dass unsere Schnittstelle irgendeine Hardware-Adresse hat, sollte alles in Ordnung sein. Wenn diese Anweisung nichts anzeigt oder wir anstelle der Adresse nur Nullwerte haben, bedeutet das, dass es ein Problem mit dem Laden von entsprechenden Kernelmodulen gibt oder unser Adapter einfach nicht unterstützt wird. Mit Hilfe von weiteren Kommandos überprüfen wir die Verbindung mit unserem Telefon. Vergessen wir nicht, dort die BlueTooth-Schnittstelle zu aktivieren und eventuell die Option der Sichtbarkeit des Gerätes einzuschalten. Wir führen jetzt die Anweisung hcitool scan aus. Bei mir zeigt sie folgendes:

Scanning ...
 00:01:E3:38:BF:CF Handy

Wir sehen die Hardware-Adresse unseres Gerätes und dessen Namen. Diese Hardware-Adresse kann nützlich sein, weil nicht alle Programme deren automatische Suche bieten. Mein Apparat ermöglicht, den Namen selbst zu definieren, deshalb habe ich hier "Handy" angegeben.

Mit Hilfe einer weiteren Anweisung stellen wir fest, ob das Telefon mit uns kommunizieren will. Zuerst tragen wir in die Datei /etc/bluetooth/pin eine PIN-Nummer ein, z.B. 1234. Dann verwenden wir die vorher notierte Adresse, um die Anweisung l2ping 00:01:E3:38:BF:CF auszuführen. Somit testen wir die Verbindung, ähnlich wie die Anweisung ping TCP/IP-Netze testet. Wir können sogar die Option -f verwenden, um »flood ping« auszuführen - dies kann eine Methode für ein schnelleres Entladen des Akkus sein.

Im Moment der ersten Kontaktaufnahme können wir auf dem Bildschirm des Rechners und dann auf der Anzeige des Telefons die Frage nach der PIN-Nummer sehen. Dann kann der Apparat zusätzlich fragen, ob er den Rechner zu den bekannten BT-Geräten hinzufügen soll. Es ist gut, mit "ja" zu antworten, wichtig ist aber, dass wir später die Liste der bekannten Geräte löschen, bevor wir uns mit einem anderen Rechner oder unter der Kontrolle einer anderen Distribution verbinden möchten. In einigen Distributionen müssen wir zuerst vom Konto eines gewöhnlichen Benutzers aus die Anweisung xhost + ausführen, damit das Fenster mit der Frage nach PIN auf dem Bildschirm auftauchen kann. Zum Schluss überprüfen wir mit der Anweisung sdptool browse, welche Möglichkeiten unser Telefon hat. Bemerkenswert ist, auf welchen Kanälen populäre BT-Dienste vorhanden sind, wie Serial Port, Dial-up-Networking oder OBEX Filetransfer.

Gerät /dev/rfcomm0

Mit Hilfe des Gerätes /dev/rfcomm0 können wir uns über die BlueTooth-Schnittstelle mit einem Telefon verbinden. In der Praxis brauchen wir es vor allem für GPRS-Verbindungen. Damit es funktionieren kann, müssen wir eine entsprechende Anweisung ausführen, z.B. rfcomm connect rfcomm0 00:01:E3:38:BF:CF 1. Die Adresse in dieser Anweisung haben wir mit Hilfe von hcitool scan festgestellt, die Eins am Ende ist die Nummer des Kanals für serielle Verbindungen. Die Liste aller Kanäle bekommen wir mit der Anweisung sdptool browse - für Internetverbindungen über die BlueTooth-Schnittstelle verwendet man den Kanal serial oder dial-up, also meistens 1. Nach der Ausführung dieser Anweisung sollten wir folgendes sehen:

Connected /dev/rfcomm0 to 00:01:E3:38:BF:CF on channel 1;
Press CTRL-C for hangup

Natürlich drücken wir jetzt [Ctrl]+[c] nicht, weil wir noch das Ergebnis der Anweisung rfcomm ohne irgendwelche Parameter überprüfen können. Sie zeigt bei mir die Adressen beider Geräte:

rfcomm0: 00:03:C9:2E:65:5A -> 00:01:E3:38:BF:CF channel 1
connected [reuse-dlc release-on-hup tty-attached].

Kommentare (Insgesamt: 0 )
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung