Gentoo Linux USB Guide
1.
Einleitung
Was ist USB?
USB steht für Universal Serial Bus und ist im Grunde ein Standard für externe
Schnittstellen, die eine Kommunikation zwischen dem Computer und verschiedenen
anderen Peripheriegeräten ermöglicht. Einge der heutzutage gebräuchlichsten
USB-Geräte sind Tastaturen, Mäuse, USB Sticks, Digitalkameras, externe CD
& DVD Brenner, Drucker, etc.
Gegenwärtig sind zwei USB Versionen im Einsatz: USB 1.1 und USB 2.0. Da USB
schon immer abwärtskompatibel mit früheren Versionen war, ist USB 2.0
abwärtskompatibel mit USB 1.1. Die neuesten USB-Geräte sind normalerweise USB
2.0 kompatibel. USB 2.0 unterstützt eine maximale Datentransferrate von 480
Mbps oder 60 MBps und das ist der Hauptunterschied zwischen den zwei
Standards. Ein anderer Vorteil von USB ist, dass die Geräte alle
hot-pluggable sind, was bedeutet, dass Sie Ihr System nicht neu starten
müssen damit es Ihnen möglich ist diese Geräte zu benutzen.
Ein technischer Blickwinkel
Bevor wir auf die genauen Konfigurationsoptionen im Kernel eingehen, würde es
passen einen etwas genaueren Blick auf USB zu werfen. Wenn Sie in Eile sind
oder diesen Abschnitt überspringen möchten, springen Sie bitte zur
Kernelkonfiguration.
Ein USB-System hat unter anderem einen Hostcontroller, Hubs, einen
root Hub und unterstützt bis zu 127 USB-Geräte inklusive der Hubs. Der
Hostcontroller ist nichts anderes als die Hardwareschnittstelle zwischen dem
USB-Gerät und dem Betriebsystem. Es sind heutzutage einige HCI (Host Controller
Interface) im Einsatz und die sind der OHCI (Open HCI) von Compaq, UHCI
(Universal HCI) und EHCI (Enhanced HCI), beide von Intel. OHCI/UHCI sind die
beiden Industriestandards für USB 1.1 Schnittstellen während EHCI der für USB
2.0 ist.
Der Hardwarehersteller stellt eine Schnittstelle für Programmierer zur
Verfügung die es dem System erlaubt mit der Hardware zu interagieren, genannt
wird sie HCD oder Host Controller Device. Durch dieses HCD kann das Gerät mit
der Systemsoftware interagieren. Das folgende Diagramm sollte die Sache
einfacher nachvollziehbar machen.
Befehlsauflistung 1.1: Grundlegende USB Architektur |
+ ---- Hardware ---- + ---- Software ---- +
| | |
| [USB Ger.]-+-> {EHCI} -+---> ( EHCD ) |
| | | | Benutzer
| `-> {UHCI} -+---> ( UHCD ) |
| | |
+ ---- Hardware ---- + ---- Software ---- +
|
Ein USB-Gerät kann entweder einen individuellen Treiber benutzen oder einen der
bereits auf dem System vorhanden ist, das Ganze basiert auf dem Konzept einer
Geräteklasse. Das bedeutet, wenn ein Gerät zu einer bestimmten
Klasse gehört, dann nutzen andere Geräte die zu der selben Klasse
gehören denselben Gerätetreiber. Einige dieser Klassen sind die USB HID
(Human Interface Devices) Klasse, die Eingabegeräte wie Tastaturen und Mäuse
abdeckt, die USB Massenspeichergeräteklasse, die Geräte wie USB Sticks,
Digitalkamers, Musikplayer, etc abdeckt und die USB CDC (Communication Devices
Class), die hauptsächlich USB Modems und ähnliche Geräte abdeckt.
Was steckt in Ihrem Rechner?
Es ist ganz einfach herauszufinden ob Ihr Rechner USB 2.0 Unterstützung
bietet oder nicht. Wir benutzen den Befehl lspci für diesen Zweck.
Notiz:
Das lspci Werkzeug ist Teil des sys-apps/pciutils Pakets. Wenn
Sie dieses nicht installiert haben, starten Sie bitte emerge pciutils.
Bitte beachten Sie, dass Sie root sein müssen während Sie den lspci
Befehl ausführen.
|
Befehlsauflistung 1.2: Verschiedene lspci Ausgaben |
# lspci -v | grep USB
0000:00:04.2 USB Controller: Intel Corp. 82371AB/EB/MB PIIX4 USB (rev 01) (prog-if 00 [UHCI])
00:1d.0 USB Controller: Intel Corp. 82801DB USB (Hub #1) (rev 01) (prog-if 00 [UHCI])
00:1d.1 USB Controller: Intel Corp. 82801DB USB (Hub #2) (rev 01) (prog-if 00 [UHCI])
00:1d.2 USB Controller: Intel Corp. 82801DB USB (Hub #3) (rev 01) (prog-if 00 [UHCI])
00:1d.7 USB Controller: Intel Corp. 82801DB USB EHCI Controller (rev 01) (prog-if 20 [EHCI])
|
Also können wir mit dem lspci Befehl herausfinden ob das System USB 2.0
unterstützt. Dies ist nützlich da wir die dazugehörigen Optionen im Kernel
aktivieren werden.
2.
Kernelkonfiguration
Den Kernel beziehen
Notiz:
Seit dem Release 2005.0 benutzt Gentoo Linux 2.6 als Standardkernel. Sofern Sie
nicht ausdrücklich das 2.4 Profil benutzen, ist gentoo-sources auf den
meisten Architekturen ein 2.6 Kernel. Bitte überprüfen Sie Ihre
Kernelversion und machen Sie dann entsprechend mit der Konfiguration weiter.
|
Emergen Sie zuerst die Kernelquellen Ihrer Wahl. Hier werden wir die
gentoo-sources verwenden. Für weitere Informationen zu den
verschiendenen im Portage verfügbaren Kernelquellen schauen Sie bitte im
Gentoo Linux Kernel Guide nach.
Befehlsauflistung 2.1: Beziehen der Kernelquellen |
# emerge gentoo-sources
|
Nun machen wir mit der Aufgabe der Kernelkonfiguration weiter.
Befehlsauflistung 2.2: Zur Quelle wechseln |
# cd /usr/src/linux
# make menuconfig
|
Notiz:
Das obige Beispiel setzt voraus, dass der /usr/src/linux Symlink
auf die Kernelquellen zeigt, die Sie benutzen wollen. Bitte stellen Sie
entsprechendes sicher bevor Sie weitermachen.
|
Konfigurationsoptionen für den 2.6.x Kernel
Jetzt werden wir einen Blick auf die Optionen werfen, die wir im 2.6 Kernel
aktivieren müssen um sicherzustellen, dass wir richtige USB-Unterstützung für
unsere Geräte erhalten. Wenn Sie einen 2.4 Kernel benutzen machen Sie bitte mit
Konfigurationsoptionen für den 2.4.x Kernel
weiter.
Notiz:
Die Beispiele in diesem Dokument werden Konfigurationsoptionen für einfache
USB-Unterstützung sowie die meistbenötigten, wie z.B. USB-Massenspeichergeräte
(hauptsächlich Kameras und USB-Sticks) zeigen. Wenn Sie ein bestimmtes
USB-Gerät haben, das konfiguriert werden muss, schauen Sie bitte in das
Handbuch des Geräts oder suchen Online um herauszufinden ob die Unterstützung
für dieses Gerät in den Kernel integriert wurde oder ob spezifische Treiber
existieren die Sie benutzen können. Bitte beachten Sie, dass der Einfachheit
halber bei allen Beispielen die Optionen in den Kernel kompiliert wurden. Wenn
Sie einen modularen Kernel haben möchten stellen Sie sicher, dass Sie sich die
verschiedenen Module notieren und Ihre Konfigurationsdateien entsprechend
anpassen.
|
Befehlsauflistung 2.3: make menuconfig Optionen für 2.6 Kernel |
Device Drivers --->
SCSI device support --->
--- SCSI support type (disk, tape, CD-ROM)
<*> SCSI disk support
USB support --->
<*> Support for Host-side USB
[*] USB device filesystem
--- USB Host Controller Drivers
<*> EHCI HCD (USB 2.0) support
< > OHCI HCD support
<*> UHCI HCD (most Intel and VIA) support
< > USB Modem (CDC ACM) support
<*> USB Printer support
<*> USB Mass Storage support
--- USB Input Devices
<*> USB Human Interface Device (full HID) support
[*] HID input layer support
USB Network Adapters --->
<*> USB RTL8150 based ethernet device support (EXPERIMENTAL)
USB Serial Converter support --->
<*> USB Serial Converter support
<*> USB Prolific 2303 Single Port Serial Driver (NEW)
|
Jetzt da Ihre Optionen gesetzt sind können Sie den Kernel (neu) kompilieren und
USB sollte funktionieren sobald Sie mit dem neuen Kernel booten. Sie können
jetzt mit USB in Betrieb sehen weitermachen und
feststellen ob alles funktioniert wie es soll.
Konfigurationsoptionen für den 2.4.x Kernel
Wir werden einen Blick auf die Optionen werfen, die wir in einem 2.4 Kernel
aktivieren müssen um sicherzustellen, dass wir richtige USB-Unterstützung für
unsere Geräte erhalten. Wenn Sie einen 2.6 Kernel benutzen lesen Sie bitte Konfigurationsoptionen für den 2.6.x Kernel.
Notiz:
Die Beispiele in diesem Dokument werden Konfigurationsoptionen für einfache
USB-Unterstützung sowie die meistbenötigten, wie z.B. USB-Massenspeichergeräte
(hauptsächlich Kameras und USB-Sticks) zeigen. Wenn Sie ein bestimmtes
USB-Gerät haben das konfiguriert werden muss, schauen Sie bitte in das Handbuch
des Geräts oder suchen online um herauszufinden ob die Unterstützung für dieses
Gerät in den Kernel integriert wurde oder ob spezifische Treiber existieren die
Sie benutzen können. Bitte beachten Sie, dass der Einfachheit halber bei allen
Beispielen die Optionen in den Kernel kompiliert wurden. Wenn Sie einen
modularen Kernel haben möchten stellen Sie sicher, dass Sie sich die
verschiedenen Module notieren und Ihre Konfigurationsdateien entsprechend
anpassen.
|
Befehlsauflistung 2.4: make menuconfig Optionen für 2.4 Kernel |
Input core support --->
<*> Input core support
< > Keyboard support
< > Mouse support
< > Event interface support
USB support --->
<*> Support for USB
[*] Preliminary USB device filesystem
--- USB Host Controller Drivers
<*> UHCI Alternate Driver (JE) support
< > OHCI (Compaq, iMacs, OPTi, SiS, ALi, ...) support
--- USB Device Class drivers
< > USB Audio support
<*> USB Mass Storage support
< > USB Modem (CDC ACM) support
<*> USB Printer support
--- USB Human Interface Devices (HID)
<*> USB Human Interface Device (full HID) support
[*] HID input layer support
USB Serial Converter support --->
<*> USB Serial Converter support
<*> USB Prolific 2303 Single Port Serial Driver (NEW)
|
Jetzt da Ihre Optionen gesetzt sind können Sie den Kernel (neu) kompilieren und
USB sollte funktionieren sobald Sie mit dem neuen Kernel booten.
3.
USB in Betrieb sehen
dmesg ist Ihr Freund!
Endlich ist die Zeit gekommen um mit den USB-Geräten zu spielen :) Lassen Sie
uns also anfangen. In diesem Kapitel werden wir sehen wie das System auf
verschiedene USB-Geräte reagiert. Wir starten damit einen USB 512 MB Memory
Stick/Pen Drive einzustecken. Sie können andere ähnliche Massenspeichergeräte
verwenden. Wir benutzen hauptsächlich dmesg um zu sehen was passiert und
wie das System auf das Gerät reagiert.
Notiz:
dmesg gibt generell viel aus bevor wir zu den Informationen kommen die
wir benötigen, da es den Kernel Ringpuffer ließt, der auch alle Bootmeldungen
enthält. Die Ausgabe in folgenden Beispielen beinhaltet nur die relevanten
Teile und zusätzliche Leerzeichen dazwischen um bessere Lesbarkeit zu
ermöglichen. Wenn nötig benutzen Sie bitte dmesg | more oder
dmesg | less um die Ausgabe auf Ihrem System besser darzustellen.
|
Befehlsauflistung 3.1: dmesg Ausgabe bei einem Memorystick |
# dmesg | less
usb 1-1: new full speed USB device using uhci_hcd and address 2
scsi0 : SCSI emulation for USB Mass Storage devices
usb-storage: device found at 2
usb-storage: waiting for device to settle before scanning
Vendor: JetFlash Model: TS512MJF2A Rev: 1.00
Type: Direct-Access ANSI SCSI revision: 02
SCSI device sda: 1003600 512-byte hdwr sectors (514 MB)
sda: Write Protect is off
sda: Mode Sense: 0b 00 00 08
sda: assuming drive cache: write through
SCSI device sda: 1003600 512-byte hdwr sectors (514 MB)
/dev/scsi/host0/bus0/target0/lun0: p1
Attached scsi removable disk sda at scsi0, channel 0, id 0, lun 0
Attached scsi generic sg0 at scsi0, channel 0, id 0, lun 0, type 0
usb-storage: device scan complete
usb 1-1: USB disconnect, address 2
|
Sobald das Gerät angeschlossen und gemountet ist, können Sie es wie eine
normale Festplatte ansprechen. Gewohnte Aktionen wie cp, mv,
rm, usw. funktionieren gut. Sie können auch ein Dateisystem auf dem
USB-Stick anlegen/ihn formatieren.
Befehlsauflistung 3.2: Auf den Memorystick zugreifen |
# mount /dev/sda1 /mnt/usb
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/hda8 9.4G 7.5G 1.9G 80% /
/dev/hda9 11G 8.1G 2.4G 78% /usr
none 189M 0 189M 0% /dev/shm
/dev/sda1 490M 34M 457M 7% /mnt/usb
|
Notiz:
Auf Digitalkameras kann auf die gleiche Weise zugegriffen werden wie auf
Memorysticks. Ich habe eine Nikon Coolpix 5200 und auf diese Weise greife ich
darauf zu. Kameras haben heutzutage normalerweise zwei Modi um Bilder zu
übertragen; USB Massenspeicher und PTP (Picture Transfer Protocol). Die Kamera
ist auf den USB-Massenspeichermodus eingestellt und daher ist die
Vorgehensweise genau die selbe wie beim Zugriff auf einen Memorystick, daher
bin ich hier nicht ins Detail gegangen. Bitte beachten Sie, dass es womöglich
NICHT in allen Fällen und mit allen Digitalkameras, die USB-Unterstützung
haben, funktionieren muss.
|
Wie würde eine USB Maus angezeigt falls Sie eine haben? Sie wird als HID-Gerät
angezeit.
Befehlsauflistung 3.3: Optische USB-Maus |
# dmesg | grep USB
drivers/usb/input/hid-core.c: v2.0:USB HID core driver
usb 1-1: new low speed USB device using address 2
input: USB HID v1.10 Mouse [Logitech USB-PS/2 Optical Mouse] on usb-0000:00:07.2-1
|
Ein anderer schicker Befehl, den Sie benutzen können um den Status Ihrer
USB-Anschlüsse anzeigen zu lassen, ist lsusb. Er ist Teil von
sys-apps/usbutils und wird im nächsten Kapitel behandelt.
4.
USB auf Benutzerebene
Schicke Werkzeuge
Bis jetzt haben wir gesehen wie viel Unterstüzung auf Kernel-/Systemseite für
USB unter Linux vorhanden ist. Jetzt werden wir einen Blick darauf werfen
welche Unterstützung von Gentoo für USB auf Benutzerebene zur Verfügung
gestellt wird.
Eines der nützlichsten Werkzeuge ist lsusb. Es listet all USB-Geräte
auf die mit dem System verbunden sind. Die Installation ist ein Kinderspiel.
Befehlsauflistung 4.1: usbutils installieren |
# emerge usbutils
|
Sobald es installiert ist, können Sie lsusb ausführen um einfache
Informationen über die USB-Geräte zu erhalten die mit der Maschine verbunden
sind.
Notiz:
Sie müssen in den meisten Fällen root sein um lsusb ausführen zu können.
|
Warnung:
lsusb liest die Informationen über die USB-Geräte aus
/proc/bus/usb. Wenn Sie dies nicht in Ihrem Kernel aktiviert haben
wird lsusb wahrscheinlich gar nicht funktionieren. Bitte stellen Sie
sicher, dass Sie die Unterstützung für das /proc Dateisystem im
Kernel aktiviert haben und dass usbfs nach /proc/bus/usb
gemountet ist (was automatisch passieren sollte).
|
Befehlsauflistung 4.2: lsusb bei der Arbeit |
# lsusb
Bus 001 Device 003: ID 0c76:0005 JMTek, LLC. USBdisk
Bus 001 Device 002: ID 046d:c00e Logitech, Inc. Optical Mouse
Bus 001 Device 001: ID 0000:0000
|
Wenn Sie jemand sind, der es liebt viele Informationen zu sehen haben Sie die
Option lsusb -v zu starten. Versuchen Sie es und schauen Sie sich die
Menge von Informationen an, die es ausgibt. Eine andere gute Option ist dass
lsusb die aktuelle physikalische Hierarchie als Baum ausgibt und es so
einfacher macht die genaue Gerätekarte zu verstehen. Der Befehl lautet
lsusb -t. Zum Beispiel:
Befehlsauflistung 4.3: lsusb zeigt die USB-Hierarchie |
# lsusb -t
Bus# 1
`-Dev# 1 Vendor 0x0000 Product 0x0000
|-Dev# 2 Vendor 0x046d Product 0xc00e
`-Dev# 3 Vendor 0x0c76 Product 0x0005
|
Sie können ganz einfach die Ausgaben von lsusb und lsusb -t in
Beziehung zueinander setzen, was bei der Fehlersuche und beim Verstehen der
Funktionsweise von USB hilft.
5.
Und Dank an...
Referenzen
Eine große Anzahl Onlinedokumente half mir während der Entwicklung dieses
Dokuments und darunter sind einige hochtechnische aber wirklich interessante.
Ich dachte, dass alle eine Würdigung verdienen, also los!
Andere interessante Links
Die Inhalte dieses Dokuments sind unter der Creative Commons -
Namensnennung / Weitergabe Lizenz lizenziert.
|