Login
Newsletter
Werbung

So, 17. Dezember 2000, 00:00

Installation einer USB-Komponente am Beispiel einer Digitalkamera

Vorwort

Dieser kleine Artikel richtet sich vornehmlich an bereits fortgeschrittene Linux-Anwender, die sich mit dem Laden von Modulen und deren Kompilieren auskennen. Betrachtet wird übrigens nur der Kernel 2.4. Im Kernel 2.2 ist USB-Unterstützung erst seit Version 2.2.18 vorhanden. Allerdings kann man auch älteren Versionen durch einen Patch zu einem USB-Stack verhelfen, der fast auf dem aktuellen Stand von 2.4.x ist. Die meisten Distributionen haben diesen Patch bereits integriert.

Vorbereitung

Als erstes wird das mitgelieferte USB-Adapterkabel zur Kamera an den ersten USB-Slot gesteckt und mit der Kamera verbunden.

Kernel-Konfiguration und -Erstellung

Danach wechselt man in das Verzeichnis, wo sich die Kernel-Quellen befinden (normalerweise /usr/src/linux) und gibt make xconfig oder make menuconfig ein. Es wird das bekannte Menü gestartet, welches sich für die Konfiguration des Kernels und seiner Module verantwortlich zeigt. Man klickt auf den Eintrag USB support und schon klappt das Fenster auf. Folgende Optionen müssen auf jeden Fall aktiviert werden:

  • "Support for USB" (Je nach Wahl als Modul oder direkt in den Kernel. Ich empfehle die Umsetzung in ein Modul)
  • "USB verbose debug messages" (Hiermit werden alle vom Kernel generierten Meldungen ausführlicher angezeigt, wenn auch manchmal etwas kryptisch)
  • "Preliminary USB device filesystem" (Hiermit kann man später Zugriff auf die entsprechenden Gerätedateien erlangen)

Die nachfolgenden Optionen stellen die Art des USB-Controllers ein. Je nach Motherboard sind diese unterschiedlich. Ich empfehle alle zu aktivieren, also "UHCI" und "OHCI". Als nächstes folgen die entsprechenden Geräte, welche angeschlossen werden sollen. In unserem Beispiel wählen wir die Option USB Kodak DC-2xx Camera support aus, da dies das Modul für unsere Kamera erzeugt. Je nach Gerät differiert natürlich die Wahl.

Danach speichern wir die Konfiguration ab und geben ein:

make dep
make modules
make modules_install

Wenn man die USB-Unterstützung direkt in den Kernel kompiliert haben möchte (je nach Auswahl, siehe oben), dann muß man zusätzlich noch make bzImage eingeben und das Kernel-Image kopieren, anschließend LILO ausführen (wer einen andern Bootloader verwendet, muß natürlich die entsprechenden Schritte ausführen) und den Computer neu starten. (Siehe auch diesen Pro-Linux-Artikel zur Kernel-Compilierung.) Bei der Variante, in der nur Module erzeugt werden, ist das nicht notwendig.

Laden und Einrichten des Treibers

Laden der Module

Nun kontrollieren wir mit der Eingabe von dmesg, ob alles funktioniert. Dann werden die Module geladen. Als erstes laden wir die allgemeine USB-Unterstützung:

insmod usbcore

Als nächstes folgt dann der USB-Typ. Je nach Mainboard unterscheidet sich das Modul. Das gängigste wird wohl usb-uhci sein:

insmod usb-uhci

Als letztes laden wir dann den Treiber für unsere Kamera. Bei Scannern oder anderen Geräten nennt sich das Modul natürlich anders. Bereits an dieser Stelle sollten wir die Kamera auf Connect stellen, damit der Kernel mit der Kamera kommunizieren kann und weiß, was sich am Ende der Leitung befindet.

insmod dc2xx

Meldungen im Syslog

Nun kontrollieren wir mit der Eingabe von dmesg, ob alles funktioniert. Es sollte etwas ähnlich folgender Meldung erscheinen:

usb-uhci.c: $Revision: 1.239 $ time 18:44:25 Nov 3 2000
usb-uhci.c: High bandwidth mode enabled
usb-uhci.c: USB UHCI at I/O 0x1080, IRQ 11
usb-uhci.c: Detected 2 ports
usb.c: new USB bus registered, assigned bus number 1
usb.c: kmalloc IF c3bbbec0, numif 1
usb.c: new device strings: Mfr=0, Product=2, SerialNumber=1
usb.c: USB device number 1 default language ID 0x0
Product: USB UHCI Root Hub
SerialNumber: 1080
hub.c: USB hub found
hub.c: 2 ports detected
hub.c: standalone hub
hub.c: ganged power switching
hub.c: global over-current protection
hub.c: power on to power good time: 2ms
hub.c: hub controller current requirement: 0mA
hub.c: port removable status: RR
hub.c: local power source is good
hub.c: no over-current condition exists
hub.c: enabling power on all ports
usb.c: hub driver claimed interface c3bbbec0
hub.c: port 1 connection change
hub.c: port 1, portstatus 101, change 1, 12 Mb/s
hub.c: port 1, portstatus 103, change 0, 12 Mb/s
hub.c: USB new device connect on bus1/1, assigned device number 2
usb.c: kmalloc IF c3bbbf20, numif 1
usb.c: new device strings: Mfr=1, Product=2, SerialNumber=0
usb.c: USB device number 2 default language ID 0x409
Manufacturer: Eastman Kodak Company
Product: KODAK DC280 Zoom Digital Camera
usb.c: unhandled interfaces on device
usb.c: USB device 2 (vend/prod 0x40a/0x130) is not claimed by any active driver.
 Length = 18
 DescriptorType = 01
 USB version = 1.00
 Vendor:Product = 040a:0130
 MaxPacketSize0 = 8
 NumConfigurations = 1
 Device version = 1.01
 Device Class:SubClass:Protocol = 00:00:00
 Per-interface classes
Configuration:
 bLength = 9
 bDescriptorType = 02
 wTotalLength = 0020
 bNumInterfaces = 01
 bConfigurationValue = 01
 iConfiguration = 00
 bmAttributes = 40
 MaxPower = 2mA
 Interface: 0
 Alternate Setting: 0
 bLength = 9
 bDescriptorType = 04
 bInterfaceNumber = 00
 bAlternateSetting = 00
 bNumEndpoints = 02
 bInterface Class:SubClass:Protocol = ff:00:00
 iInterface = 00
 Endpoint:
 bLength = 7
 bDescriptorType = 05
 bEndpointAddress = 01 (out)
 bmAttributes = 02 (Bulk)
 wMaxPacketSize = 0040
 bInterval = 00
 Endpoint:
 bLength = 7
 bDescriptorType = 05
 bEndpointAddress = 82 (in)
 bmAttributes = 02 (Bulk)
 wMaxPacketSize = 0040
 bInterval = 00
usb.c: registered new driver dc2xx
dc2xx.c: USB Camera #0 connected
usb.c: dc2xx driver claimed interface c3bbbf20
hub.c: port 1 connection change
hub.c: port 1, portstatus 100, change 3, 12 Mb/s
usb.c: USB disconnect on device 2
dc2xx.c: USB Camera #0 disconnected
hub.c: port 1 enable change, status 100

USB-Dateisystem

Damit sind wir noch nicht am Ende angelangt. Als nächstes müssen wir das USB-Dateisystem mounten. (Siehe auch Kernel-Dokumentation, meistens zu finden unter /usr/src/linux/Documentation). Das geschieht mit folgendem Eintrag in die Datei /etc/fstab:

none /proc/bus/usb usbdevfs defaults,noauto 0 0

Die Option noauto sorgt erstmal dafür, daß das USB-Dateisystem nicht bei jedem Boot gemountet wird. usbdevfs gibt den Typ an, und /proc/bus/usb ist das Verzeichnis, wo alle relevanten Daten erscheinen.

Mit der Eingabe von mount /proc/bus/usb wird nun das USB-Dateisystem gemountet.

Folgender Befehl gibt uns dann Informationen über die angeschlossenen Geräte aus:

cat /proc/bus/usb/devices

Dieser Befehl gibt uns Informationen zu den geladenen USB-Modulen aus:

cat /proc/bus/usb/drivers
Kommentare (Insgesamt: 0 )
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung