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:
Übersetzen Sie nun den Kernel und ggf. auch die Module neu und
starten Sie das System mit dem neuen Kernel.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 |
können Sie dies temporär bis zum nächsten Systemstart benutzen.
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 |
Hierbei ist zu beachten, daß dieser Eintrag nach dem Eintrag für das
/proc, Dateisystem stehen muß, da das USB-Device-Dateisystem
unterhalb von diesem gemountet wird.
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 Sie nun das Kommando
cat /dev/usb/usbmouse0
aufrufen und dann die Maus bewegen, sollten Sie
viele wilde Zeichen sehen. Brechen Sie das Kommando mit CTRL+C ab.
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
|
und starten Sie den X-Server neu.
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.
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
|
Für ein Zip-Laufwerk:
/dev/sda /mnt/usbzip vfat noauto,user 0 0
|
Für ein CD-ROM:
/dev/sda /mnt/usbcdrom iso9660 ro,noauto,user 0 0
|
und für eine Festplatte:
/dev/sda /mnt/usbhd ext2 defaults 1 2
|