Der Trend bei neueren Motherboards und bei vielen Notebooks geht weg von parallelen und seriellen Schnittstellen, hin zu USB. Apples aktuelle Modelle, wie zum Beispiel der iMac, stellen sogar zur Tastatur und Maus die Verbindung über den USB-Bus her.
Der USB Support im Linux-Kernel ist noch ziemlich neu, Sie sollten auf alle Fälle den aktuellsten Kernel benutzen, den Sie bekommen können. USB Support wurde mit der Kernel-Version 2.2.7 eingeführt, wir empfehlen jedoch mindestens einen Kernel der 2.4.xer Serie zu benutzen, da die Implementation in den 2.2.xer Kernels schon recht alt ist. Wenn Sie dennoch einen 2.2.xer Kernel verwenden wollen, sollten Sie auf jeden Fall den USB-Teil aus den 2.4.xer Kernel übernehmen. Ein angepaßtes Paket finden Sie unter: http://www.suse.cz/development/usb-backport/.
An der USB-Implementation wird momentan noch sehr viel verändert, so daß es passieren kann, daß Teile dieser Dokumentation nicht ganz dem aktuellen Stand entsprechen. Lassen Sie sich davon nicht abschrecken, und nehmen Sie diesen Abschnitt als Leitfaden. Abweichend von Debian GNU/Linux 2.2, welches den Kernel 2.2 verwendet, gehen wir hier auf den Kernel in der Version 2.4.0-test4 und höher ein. Gerade im Bereich USB ist hier viel in Bewegung und ein Blick in die neueste Version lohnt sich fast immer.
Um USB nutzen zu können, müssen Sie einen neuen Kernel übersetzen. Am einfachsten benutzen Sie dazu make menuconfig auf der Console oder make xconfig, wenn Sie unter X11 arbeiten.

Aktivieren Sie zunächst den allgemeinen USB Support und wählen Sie dann entweder UHCI (wenn Sie ein Intel PIIX4, VIA oder ähnliches Chipset benutzen) oder OHCI-HCD (bei Compaq-Rechnern, iMacs, OPTi, SiS, ALi usw.) aus. Dies ist von dem verwendeten Motherboard abhängig, eventuell hilft auch ein Blick in das Handbuch zu Ihrem Motherboard. Sie können auch versuchen, das USB Chipset in der Ausgabe des Kommandos cat /proc/pci zu finden. Wenn es sich um eine kurze Angabe (wie etwa: i/o at 0xe400) handelt, wählen Sie UHCI, wenn die Ausgabe länger ist (etwa: 32 bit memory at 0xee000000), dann wählen Sie OHCI. Wenn Sie sich nicht sicher sind, probieren Sie einfach beide nacheinander aus.
Damit haben Sie die grundsätzliche USB-Unterstützung aktiviert. Sie müssen nun noch entscheiden, für welche Gerätegruppen Sie Treiber benötigen. Sie können hier frei wählen, ob Sie die Treiber fest in den Kernel einbinden wollen oder lieber Module verwenden möchten. USB Hubs werden automatisch erkannt, dies müssen Sie nicht extra aktivieren.
Folgende Treiber stehen Ihnen zur Verfügung:
USB Device Filesystem
HID - Human Interface Device, Tastatur, Maus, Joystick, Gamepads...
Scanner
Audio - Lautsprecher
CDC ACM - ISDN-Modems
Printer - Drucker
Serial Converter - serielle Schnittstellen
CPiA - Kameras mit Vision CPiA Chipset
OV511 - Kameras mit OmniVision's OV511 chipset
Kodak DC-2xx - Kodak's DC-200 Kameras
Massenspeicher - Festplatten, Diskettenlaufwerke... Hierzu muß auch „SCSI“ aktiviert werden!
EZUSB - Firmware Downloader für Anchor Chips USB Microkontroller
USS720 - für parallele Schnittstellen
DABUSB - Digital Audio Broadcast Empfänger
Wenn Sie sich entschieden haben, Module zu benutzen, müssen Sie diese laden. Sie benötigen mindestens die Module usbcore.o und entweder usb-uhci.o oder usb-ohci-hcd.o. Weiterhin müssen Sie die gewünschten Treiber, also beispielsweise scanner.o oder printer.o laden.
Wenn Sie UHCI und einen externen USB-Hub benutzen, werden Sie in etwa folgendes in der Datei /var/log/syslog sehen:
....... Jul 19 20:46:02 rachel kernel: USB HID boot protocol mouse registered. ....... Jul 19 20:46:02 rachel kernel: uhci_control_thread at c01b8c5c Jul 19 20:46:02 rachel kernel: New bus registered Jul 19 20:46:02 rachel kernel: USB hub driver registered Jul 19 20:46:02 rachel kernel: uhci_connect_change: called for 0 ....... Jul 19 20:46:02 rachel kernel: USB hub found Jul 19 20:46:02 rachel kernel: hub: 4-ports detected Jul 19 20:46:02 rachel kernel: hub: individual port power switching Jul 19 20:46:02 rachel kernel: hub: standalone hub Jul 19 20:46:02 rachel kernel: hub: individual port over current protection Jul 19 20:46:02 rachel kernel: hub: power on to power good time: 100ms Jul 19 20:46:02 rachel kernel: hub: hub controller current requirement: 100mA Jul 19 20:46:02 rachel kernel: hub: port 1 is removable Jul 19 20:46:02 rachel kernel: hub: port 2 is removable Jul 19 20:46:02 rachel kernel: hub: port 3 is removable Jul 19 20:46:02 rachel kernel: hub: port 4 is removable Jul 19 20:46:02 rachel kernel: hub: local power source is good Jul 19 20:46:02 rachel kernel: hub: no over current condition exists Jul 19 20:46:02 rachel kernel: enabling power on all ports Jul 19 20:46:02 rachel kernel: uhci_connect_change: called for 1 ....... Jul 19 20:46:02 rachel kernel: hub: port 3 connection change ....... |
PCI: Probing PCI hardware USB: kernel-interface.c:107: Universal USB Driver v$Revision: 1.53 $ USB-OHCI: driver.c:898: USB Open Host Controller Interface Driver USB-OHCI: driver.c:758: Host controller found at PCI bus 0 dev 20 fn 0 USB-OHCI: driver.c:564: Disabling OHCI legacy support on controller 0xc5fbd020 USB-OHCI: driver.c:843: Host Controller 0xc5fe0e00 (0) at PCI bus 0 dev 20 fn 0 initialized USB-OHCI: driver.c:844: IRQ 28 USB: kernel-interface.c:154: 1 USB host found USB-HUBD: driver.c:105: UUSBD Hub Driver v$Revision: 1.33 $ USB-HIDBP: driver.c:90: USB HID Boot Protocol Driver v$Revision: 1.5 $ adb devices: ..... USB-HUBM: khubdd.c:468: Starting khubdd (pid 2) USB-HUBM: hubm-stch.c:678: Device attachment detected on port 0 of hub 0xc5fe0e20 (0 -1) hdc: ATAPI 1X CD-ROM drive, 4224kB Cache Uniform CDROM driver Revision: 2.52 scsi0 : MESH scsi : 1 host. USBD: usbd-descr.c:1108: Device id 0x80d59b8 (0 1) at port 0, hub (0 -1): (no information available) USBD: usbd-descr.c:777: Processing USB device 0xc5fbdec0 (0 1), configuration index 0 USBD: usbd-descr.c:399: Processing interface 0, alternate setting 0 USBD: usbd-drv.c:331: Considering driver 0xc5fe4400 `USB HID Boot Protocol Driver v$Revision: 1.5 $', weight 0 USBD: usbd-drv.c:331: Considering driver 0xc5fe4360 `UUSBD Hub Driver v$Revision: 1.33 $', weight 4 USB-HUBM: hubm-stch.c:678: Device attachment detected on port 0 of hub 0xc5fa6000 (0 1) USBD: usbd-descr.c:1100: Device id 0xc3e494bb (0 2) at port 0, hub (0 1): Alps Electric M2452 USBD: usbd-descr.c:777: Processing USB device 0xc5fa6120 (0 2) 'M2452', configuration index 0 USBD: usbd-descr.c:673: Unknown descriptor type 0x21 from device 0xc5fa6120 (0 2)'s configuration 1 descriptor block at offset 0x12 USBD: usbd-descr.c:399: Processing interface 0, alternate setting 0 USBD: usbd-drv.c:331: Considering driver 0xc5fe4400 `USB HID Boot Protocol Driver v$Revision: 1.5 $', weight 6 USBD: usbd-drv.c:331: Considering driver 0xc5fe4360 `UUSBD Hub Driver v$Revision: 1.33 $', weight 0 USB-HIDBP: cfg.c:110: Interface 0 of device (0 2) supports HID Keyboard Boot Protocol USB-HUBM: hubm-stch.c:678: Device attachment detected on port 2 of hub 0xc5fa6000 (0 1) USBD: usbd-descr.c:1100: Device id 0x6411c61a (0 3) at port 2, hub (0 1): Logitech M4848 USBD: usbd-descr.c:777: Processing USB device 0xc5fa6360 (0 3) 'M4848', configuration index 0 USBD: usbd-descr.c:673: Unknown descriptor type 0x21 from device 0xc5fa6360 (0 3)'s configuration 1 descriptor block at offset 0x12 USBD: usbd-descr.c:399: Processing interface 0, alternate setting 0 USBD: usbd-drv.c:331: Considering driver 0xc5fe4400 `USB HID Boot Protocol Driver v$Revision: 1.5 $', weight 6 USBD: usbd-drv.c:331: Considering driver 0xc5fe4360 `UUSBD Hub Driver v$Revision: 1.33 $', weight 0 USB-HIDBP: cfg.c:139: Interface 0 of device (0 3) supports HID Boot Protocol Mouse |
Das USB-Device-Dateisystem wird wie das /proc-Dateisystem dynamisch generiert. Sie können dieses Dateisystem an jeder beliebigen Stelle mounten, üblicherweise geschieht dies unter /proc/bus/usb. Dieses Verzeichnis wird automatisch vom Linux-Kernel erzeugt, wenn die USB-Unterstützung aktiviert wurde. Wenn Sie das USB-Device-Dateisystem an anderer Stelle im Dateisystem mounten möchten, kann es unter Umständen zu Problemen mit Programmen kommen, die das Dateisystem unterhalb von /proc/bus/usb erwarten.
Um dieses Dateisystem zu aktivieren, müssen Sie die Option „Preliminary USB Device Filesystem“ sowie das /proc-Dateisystem aktivieren.
Um dieses Dateisystem zu mounten, benötigen Sie Superuser-Rechte (root). Mit dem Kommando
mount -t usbdevfs none /proc/bus/usb |
Um dies nicht nach jedem Neustart des Systems wiederholen zu müssen, sollten Sie folgenden Eintrag in die Datei /etc/fstab aufnehmen:
none /proc/bus/usb usbdevfs defaults 0 0 |
Sehen Sie sich nun einmal den Inhalt dieses Dateisystems an:
dr-xr-xr-x 1 root root 0 Jan 26 10:40 001 -r--r--r-- 1 root root 0 Jan 26 10:40 devices -r--r--r-- 1 root root 0 Jan 26 10:40 drivers |
Der Linux-Kernel unterstützt vier verschiedene Gerätetypen über das HID Interface: Tastaturen, Mäuse, Joysticks und eine generische Schnittstelle.
Zunächst müssen Sie die (USB-) Mausunterstützung im Kernel aktiviert haben. Weiterhin ist es nützlich, wenn Sie die Option Mix all Mice into one device aktivieren, es werden dann alle angeschlossenen USB-Mäuse zu einem Gerät zusammengefaßt. Wenn Sie die Treiber als Module erzeugt haben, laden Sie die Module hid.o, input.o und mousedev.o.
Wenn Sie nun die Maus einstecken, sollte diese vom Kernel erkannt werden. Sie können dies in der Datei /var/log/syslog prüfen. Weiterhin sollten Sie in der Datei /proc/interrupts einen Eintrag finden, der sich auf USB bezieht. Klicken Sie ein paarmal mit der Maus, und Sie können in dieser Datei verfolgen, daß dies Interrupts auslöst.
fr@surimi:~$ cat /proc/interrupts
CPU0 CPU1
0: 150269498 154722102 IO-APIC-edge timer
1: 304690 303233 IO-APIC-edge keyboard
2: 0 0 XT-PIC cascade
9: 0 0 IO-APIC-edge acpi
12: 3049906 3085565 IO-APIC-edge PS/2 Mouse
14: 8349647 8378011 IO-APIC-edge ide0
15: 4 4 IO-APIC-edge ide1
16: 12624976 12621964 IO-APIC-level eth0
17: 26754608 26755521 IO-APIC-level es1371
18: 0 0 IO-APIC-level bttv
19: 1728387 1729572 IO-APIC-level tmscsim, usb-uhci
NMI: 304991583 304991583
LOC: 304969599 304969534
ERR: 9
|
Hier als Beispiel die Daten von einem Dual-Prozessor System.
Erstellen Sie nun ein Verzeichnis unterhalb von /dev/ eine Gerätedatei für die Maus, eventuell ist diese aber auch schon vorhanden:
mkdir /dev/usb mknod /dev/usb/usbmouse0 c 10 32 |
Wenn bis hierhin Ihre Tests erfolgreich waren, können Sie die Maus auch im praktischen Einsatz erproben. Um die Maus auf der Konsole mit gpm zu benutzen, starten Sie gpm wie folgt: gpm -m /dev/usb/usbmouse0 -t imps2. Sie können gpm auch dauerhaft zur Benutzung der USB-Maus überreden, indem Sie die entsprechenden Änderungen in der Datei /etc/gpm.conf aufnehmen oder das Programm gpmconfig benutzen.
Wenn Sie die USB-Maus auch unter X benutzen möchten, verändern Sie den Abschnitt „Mouse“ in der Datei /etx/X11/XF86Config wie folgt:
Section "Xinput"
SubSection "Mouse"
DeviceName "USB Mouse"
Protocol "IMPS/2"
Port "/dev/usb/usbmouse0"
AlwaysCore
EndSubSection
EndSection
|
Wenn Sie eine USB-Tastatur an einer i386-Architektur benutzen, so wird dies bereits vom BIOS unterstützt. Hierzu muß die Tastatur am HUB auf dem Motherboard angeschlossen sein. Es schadet aber auch nicht, wenn Sie dies trotzdem im Kernel aktivieren. Auf der PowerPC-Plattform müssen Sie dies in jedem Fall im Kernel aktivieren.
Wenn Sie Module benutzen, laden Sie die Module: hid.o, input.o und keybdev.o.
Wenn Sie einige Zeichen auf der Tastatur tippen, sehen Sie in der Datei /proc/interrupts, wie die Interrupts zu der USB-Tastatur hochgezählt werden. Auch in der Datei /var/log/syslog sollten Sie beim Einstecken der Tastatur einige Informationen finden.
Beachten Sie, daß Sie beim Systemstart die Tastatur nur benutzen können, wenn das BIOS dies unterstützt, zu dieser Zeit ist der Linux-Kernel noch nicht geladen. Wenn das BIOS Ihres Systems dies nicht unterstützt, können Sie keine Kernel-Parameter übergeben oder ein alternatives Kernel-Image auswählen.
Wenn Sie die USB-Joystick-Unterstützung aktivieren, funktionieren Ihre normalen Joysticks nicht mehr. Wenn Sie Module verwenden, laden Sie die Module: hid.o, input.o und joydev.o.
Wie schon bei der USB-Maus müssen Sie auch für die USB-Joystick-Unterstützung entsprechende Gerätedateien erzeugen:
mknod /dev/usb/usbjs0 c 15 0 mknod /dev/usb/usbjs1 c 15 1 mknod /dev/usb/usbjs2 c 15 2 mknod /dev/usb/usbjs3 c 15 3 |
Der USB Scanner-Treiber arbeitet mit allen USB Scannern zusammen. Um aber sinnvoll damit arbeiten zu können, muß auch für SANE ein entsprechender Treiber vorhanden sein.
Wenn Ihr Scanner nicht automatisch einem passenden Treiber zugeordnet wird, sollten Sie die Treiber als Module erzeugen und die Hersteller und Produkt-ID von Hand den Modulen übergeben (alternativ können Sie auch die Sourcen ändern). Das Kommando hierzu lautet: insmod scanner.o vendor=0xXXXX product=0xYYYY, ersetzen Sie XXXX mit der hexadezimalen Hersteller-ID und YYYY mit der Produkt-ID.
Auch hier müssen Sie wieder Gerätedateien anlegen:
mknod /dev/usb/usbscanner0 c 180 48 chmod a+rw /dev/usb/usbscanner0 |
/dev/usb/usbscanner0 option connect-device |
Um mit dem Linux USB-Modem Treiber zu funktionieren, müssen die angeschlossenen Geräte (Analog-Modems oder ISDN) der CDC (Communication Device Class)-Spezifikation entsprechen.
Die benötigten Gerätedateien erzeugen Sie mit folgenden Kommandos:
mknod /dev/usb/ttyACM0 c 166 0 mknod /dev/usb/ttyACM1 c 166 1 mknod /dev/usb/ttyACM2 c 166 2 mknod /dev/usb/ttyACM3 c 166 3 |
Auch für einen USB-Drucker müssen Sie eine Gerätedatei erzeugen:
mknod /dev/usb/usblp0 c 180 0 |
Der serielle Treiber arbeitet momentan mit Geräten der Hersteller Belkin, Peracom und Connect Tech zusammen. Es werden bis zu 8 serielle Geräte unterstützt, auch dafür müssen Sie Gerätedateien anlegen:
mknod /dev/usb/ttyUSB0 c 188 0 mknod /dev/usb/ttyUSB1 c 188 1 mknod /dev/usb/ttyUSB2 c 188 2 mknod /dev/usb/ttyUSB3 c 188 3 mknod /dev/usb/ttyUSB4 c 188 4 mknod /dev/usb/ttyUSB5 c 188 5 mknod /dev/usb/ttyUSB6 c 188 6 mknod /dev/usb/ttyUSB7 c 188 7 |
Dieser Treiber unterstützt einen Chipsatz der Firma Vision, der in einer Reihe von Kameras zu finden ist, beispielsweise in der Creative WebCamII. Um diesen Treiber benutzen zu können, müssen Sie auch die „Video for Linux“-Unterstützung (zu finden unter „Character Devices“ in der Kernel-Konfiguration) im Kernel aktivieren.
Auch dieser Treiber benötigt eine Gerätedatei:
mknod /dev/video0 c 81 0 ln -s /dev/video0 /dev/video |
Dieser Treiber unterstützt ein Chipset der Firma OmniVision, welches zum Beispiel in der Creative WebCam III oder der Lenco MVC 95998 benutzt wird. Auch dieser Treiber benötigt die „Video for Linux“-Unterstützung und eine Gerätedatei:
mknod /dev/video0 c 81 0 ln -s /dev/video0 /dev/video |
Dieser Treiber kann mit einer Vielzahl von Geräten benutzt werden. Dies kommt daher, daß eine Verbindung zum SCSI-Treiber im Kernel hergestellt wird, Sie müssen daher auch den SCSI Support im Kernel aktivieren. Sie können dann auf USB-Diskettenlaufwerke, Zip-Laufwerke, LS120-Laufwerke und USB CD-ROMs zugreifen.
Wenn Sie die entsprechenden Module geladen haben, sollte in der Datei /proc/scsi/scsi das Gerät aufgeführt sein.
Sie können nun in der Datei /etc/fstab für die verschiedenen Geräte folgende Eintrage vornehmen, um einfach darauf zugreifen zu können. Bitte beachten Sie, daß Sie, wenn Sie über weitere SCSI-Geräte verfügen, den Eintrag /dev/sda anpassen müssen.
Für ein Diskettenlaufwerk:
/dev/sda /mnt/usbfd auto noauto,user 0 0 |
/dev/sda /mnt/usbzip vfat noauto,user 0 0 |
/dev/sda /mnt/usbcdrom iso9660 ro,noauto,user 0 0 |
/dev/sda /mnt/usbhd ext2 defaults 1 2 |