Hinweis für Betrieb über USB unter Mac OS X und Linux Kernel ab 2.6

Zugriff auf Auerswald-Geräte über USB für Mac OS X und Linux Kernel ab 2.6


In der Vergangenheit erfolgte der Zugriff auf Auerswald-Geräte (Tk-Anlagen oder Telefone) über DLLs (Windows) oder über ein Kernel Treiber Modul (Linux). Für Macintosh, BSD oder andere Betriebssysteme bestand leider keine Zugriffsmöglichkeit über USB.

Seit Kurzem gibt es ein "open source" Projekt "LIBUSB" unter http://libusb.sourceforge.net

LIBUSB ist eine Systembibliothek, die den Zugriff auf USB im Userspace ermöglicht. Die Auerswald-Java-Programme greifen mittels JNI (Java Native Interface) auf diesen Treiber zu.

Voraussetzungen

  • auf dem Betriebssystem installierte LIBUSB

    Auf aktuellen Distributionen wie beispielsweise OpenSuse 10.3 ist die LIBUSB bereits vorinstalliert.
    Unter Mac OS X muss die Library den Programmen beigefügt werden (wird durch Installation hinzugefügt).

  • eine Java Version 1.6 (zu beziehen u.a. unter www.java.com)

    Zurzeit wird die LIBUSB Version 0.1.x unterstützt. Andere Versionen können eine Neukompilierung des sogenannten JNI Stubs, einem kleinen Teil eines Java-Programms, der den JNI-Zugriff übernimmt, erfordern (siehe weiter unten).

    Die Bedienprogramme (Java) werden mit einem vorkompilierten JNI Stub ausgeliefert (AuerUsbJNINative).
    Je nach Betriebssystem heißt dieser JNI Stub etwas anders:
    Linux: libAuerUsbJNINative.so
    Mac OS X: libAuerUsbJNINative.jnilib

Zugriffsrechte

In den meisten Unix-basierten Systemen ist der Zugriff auf USB-Geräte für nicht-Root-Benutzer verboten. Aufgrund dessen gibt es verschiedene Ansätze, Zugriff auf USB-Geräte zu erlangen:

  • Start der Java-Programme als Root-Benutzer

    Generell ist diese Vorgehensweise problemlos durchführbar.
    Dennoch ist sie nicht zu empfehlen, da sie ein beachtliches Sicherheitsrisiko darstellt.

  • allen Benutzern Zugriff auf alle USB-Geräte erlauben

    Diese Vorgehensweise ist distributionsabhängig.
    Unter der Distribution OpenSuse 10.3 beispielsweise wird udev genutzt, um den Zugriff auf USB-Geräte einzuschränken. Gehen Sie in diesem Fall folgendermaßen vor:

    - Unter dem Pfad /etc/udev/rules.d finden Sie die Datei "50-udev-default.rules"
    - Öffnen Sie die Datei 50-udev-default.rules mit einem Editor.
    - Suchen Sie in der Datei den folgenden Text:

    libusb device access
    SUBSYSTEM=="usb_device", ACTION=="add", PROGRAM="/bin/sh -c 'K=%k;\K=$${K#usbdev}; printf bus/usb/%%03i/%%03i $${K%%%%.*} $${K#*.}'",\NAME="%c", MODE="0664"

    - Stellen Sie sicher, dass Sie Schreibleserechte haben.
    - Ändern Sie die Zahl hinter "MODE=" von "0664" (siehe oben) auf "0666". Dadurch wird allen Benutzern der Zugriff auf sämtliche USB-Geräte gewährt.

  • Zugriff nur auf Auerswald-Geräte für eine oder beliebige Gruppen/Benutzer

    Diese Vorgehensweise ist distributionsabhängig und bedarf diverser Anpassungen. Wir empfehlen hier die Suche über eine Suchmaschine (z. B. Google) mit den Suchworten "libusb" und "non-root". Sie werden viele nützliche Informationen zum Setzen der Konfigurationsparameter und Zugriffsrechte finden.

Neukompilierung

Der Source Code für die JNI Library wird jedem Java Programm beigefügt.
Sollten Sie ein Betriebssystem haben, das nicht direkt unterstützt wird, können Sie sich durch Kompilierung eine eigene JNI Library erzeugen.

Sie benötigen dazu ein JAVA JDK für die JNI Header und einen C++ Compiler zum Kompilieren der Bibliothek. Außerdem muss die LibUsb und deren Header ("usb.h") installiert sein.

Zwei Makefiles sind bereits beigefügt. Für nicht unterstützte Betriebssysteme kopieren Sie sich ein Makefile und passen Sie den JDK_PATH und den Pfad zu dem LibUsb Header (usb.h) im Makefile an.

Kompilieren Sie die Library mit "make -f Makefile.<platform>" und kopieren Sie das Ergebnis in das Verzeichnis Ihres Java Programms. Überschreiben Sie die bereits vorhandene JNI Library.

HINWEIS:
Die hier beschriebene Neukompilierung ist ausschließlich unter Linux durchzuführen.
Um Schäden am System zu vermeiden, sollte eine Neukompilierung nur von einem Sachkundigen durchgeführt werden.