Debian GNU/Linux Anwenderhandbuch | ||
---|---|---|
Zurück | Kapitel 18. Exotische Hardware | Nach vorne |
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.
Debian installiert in den aktuellen Versionen einen Kernel in der Version 2.4.19 oder höher. Dieser ist im Bezug auf den USB Support auf dem aktuellen Stand und enthält alle notwendigen Module.
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/.
Diesen Abschnitt kann übersprungen werden wenn auf dem System bereits ein aktuelles Debian System mit dem Kernel 2.4.x (ab Debian 3.0, „bf24“) läuft. In jedem Fall ist zur Verwendung von Debian Kernel Paketen zu raten, dort sind alle Module bereits enthalten.
Um USB nutzen zu können, müssen Sie auf älteren Systemen einen neuen Kernel übersetzen oder einen Kernel als Debian Paket einspielen. 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.
Eine weitere Möglichkeit das verwendete USB Chipset zu ermitteln stellt das Kommando lspci zur Verfügung. lspci listet alle vom Bios erkannten PCI Geräte auf. In der ersten Spalte findet sich eine ID mit deren Hilfe sich genauere Informationen zu einzelnen PCI Geräte herausfinden lassen. Hierzu folgendes Beispiel:
sushi:/home/fr# lspci 00:00.0 Host bridge: Intel Corporation 440BX/ZX - 82443BX/ZX Host bridge (rev 03) 00:01.0 PCI bridge: Intel Corporation 440BX/ZX - 82443BX/ZX AGP bridge (rev 03) 00:07.0 ISA bridge: Intel Corporation 82371AB PIIX4 ISA (rev 02) 00:07.1 IDE interface: Intel Corporation 82371AB PIIX4 IDE (rev 01) 00:07.2 USB Controller: Intel Corporation 82371AB PIIX4 USB (rev 01) 00:07.3 Bridge: Intel Corporation 82371AB PIIX4 ACPI (rev 02) 00:09.0 Ethernet controller: Intel Corporation 82557 [Ethernet Pro 100] (rev 08) 00:0a.0 Multimedia audio controller: Ensoniq ES1371 [AudioPCI-97] (rev 08) 00:0b.0 SCSI storage controller: Symbios Logic Inc. (formerly NCR) 53c810 (rev 23) 01:00.0 VGA compatible controller: ATI Technologies Inc 3D Rage LT Pro AGP-133 (rev dc) sushi:/home/fr# lspci -v -s 00:07.2 00:07.2 USB Controller: Intel Corporation 82371AB PIIX4 USB (rev 01) (prog-if 00 [UHCI]) Flags: bus master, medium devsel, latency 64, IRQ 10 I/O ports at e000 [size=32] |
Zunächst werden mittels lspci alle USB Geräte angezeigt und der entsprechende Eintrag für USB ermittelt. Danach wird lspci mit den Optionen -v -s und der entsprechenden ID aufgerufen. Anhand dieser Ausgabe läßt sich ermitteln das es sich bei diesem System um einen UHCI Controller handelt.
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 ....... |
Folgendes Beispiel zeigt ein UHCI System mit den USB Treibern des Kernels 2.4.5:
Jul 23 10:54:33 sushi kernel: usb-uhci.c: $Revision: 1.259 $ time 18:23:00 May 27 2001 Jul 23 10:54:33 sushi kernel: usb-uhci.c: High bandwidth mode enabled Jul 23 10:54:33 sushi kernel: usb-uhci.c: USB UHCI at I/O 0xe000, IRQ 10 Jul 23 10:54:33 sushi kernel: usb-uhci.c: Detected 2 ports Jul 23 10:54:33 sushi kernel: usb.c: new USB bus registered, assigned bus number 1 Jul 23 10:54:33 sushi kernel: hub.c: USB hub found Jul 23 10:54:33 sushi kernel: hub.c: 2 ports detected Jul 23 10:54:33 sushi kernel: usb-uhci.c: v1.251 Georg Acher, Deti Fliegl, Thomas Sailer, Roman Weissgaerber Jul 23 10:54:33 sushi kernel: usb-uhci.c: USB Universal Host Controller Interface driver Jul 23 10:54:33 sushi kernel: hub.c: USB new device connect on bus1/2, assigned device number 2 Jul 23 10:54:33 sushi kernel: hub.c: USB hub found Jul 23 10:54:33 sushi kernel: hub.c: 4 ports detected |
Hier noch ein Beispiel von einem Apple iMac, bei dem die Tastatur und die Maus über den USB Port angeschlossen sind.
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 |
Wenn Sie keinerlei Einträge finden, die beim Laden der Treiber auf USB-Geräte hindeuten, so probieren Sie einen anderen Treiber (UHCI statt OHCI-HCD oder umgekehrt), prüfen Sie, ob USB-Geräte angeschlossen sind, und sehen Sie im BIOS nach, ob die USB-Unterstützung aktiviert ist.
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 |
Auch wenn diese Dateien eine Größe von 0 Byte aufweisen lassen sich mit den üblichen Unix Tools (beispielsweise more, less oder cat) die Informationen in diesen Dateien anzeigen) die Informationen in diesen Dateien anzeigen.
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 (usb-storage) 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 Einträge 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, dieses Beispiel bezieht sich auf ein System ohne SCSI Hostadapter.
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 |
Zurück | Zum Anfang | Nach vorne |
Exotische Hardware | Nach oben | PDA - Personal Digital Assistant |