Einbindung von USB-Geräten

Aus wiki.archlinux.de
Version vom 23. Dezember 2009, 22:57 Uhr von 127.0.0.1 (typo geändert bei udevadm control --reload-rules)

Arbeite als "root"!

Installiere (falls im System noch fehlend) "Hal" und "Dbus".

root@myhost # pacman -S hal dbus


Trage beide mit einem Editor Deiner Wahl in die Liste der beim Booten startenden Dämonen in der Datei /etc/rc.conf ein. (Es reicht "Hal" einzutragen, da er von "Dbus" abhängt und ihn mitstartet)

Starte Dein System neu. "Hal" und "Dbus" sollten jetzt beim Booten geladen werden.

Willst Du nicht extra neu Booten, kannst Du die Dämonen auch manuell starten. (Es reicht "Hal" zu starten, da er von "Dbus" abhängt und ihn mitstartet)

root@myhost # /etc/rc.d/hal start


Lass Dir die Gerätedateien in /dev anzeigen.

root@myhost # ls /dev/|less


Steck den USB-Stick ein.

Lass Dir wieder die Gerätedateien anzeigen.

root@myhost # ls /dev/|less


Such im Bereich der Geräte /dev/sd nach einem neu hinzugekommenen Eintrag.

Der Stick wird vielleicht als /dev/sda1 oder /dev/sdb1 oder ähnliches angezeigt. Damit ein bestimmter Stick immer den gleichen Device Namen erhält kann man eine udev Regel erstellen. (siehe unten)

Alternativ kannst Du auch "monitor" des Tools "udevadm" starten und dann den Stick einstecken, um den Geräte Namen (sdxx) herauszufinden.

root@myhost # udevadm monitor


Füge der Datei /etc/fstab folgende Zeile hinzu:

/dev/sda1(oder ähnlich) /mnt/usb auto noauto,rw,users,umask=0000 0 0

Durch den Schalter "users" kann jeder Nutzer den Stick ein- oder aushängen.

Wenn du nur vfat formatierte Sticks hast, schreibe "vfat" statt "auto" als Dateisystem, das funktioniert manchmal zuverlässiger.

Hast du Dateien oder Verzeichnisse mit Umlauten auf dem Stick und dein System ist auf utf8 eingestellt, füge zwischen "users," und "umask" noch "utf8," ein.

Wenn der USB-Stick jedoch automatisch mittels HAL gemountet werden soll, entfällt der Eintrag in /etc/fstab komplett.

Ansonsten:

lege das Verzeichnis /mnt/usb an.

root@myhost # mkdir /mnt/usb


Der Stick sollte sich nun manuell ein- und aushängen lassen.

user@myhost # mount /mnt/usb

bzw.

user@myhost # umount /mnt/usb


Udev Regel erstellen

Damit ein bestimmter USB-Stick (oder auch eine Festplatte) immer den gleichen Device Namen zugewiesen bekommt, kann man sich eine Udev Regel erstellen.

Zuerst muss man die Sereinnummer des Sticks herausfinden. Dazu geht man folgendermaßen vor:

  1. udevadm monitor starten
  2. den Stick einstöpseln, und sich das Device merken (z.B. /dev/sdc)


Jetzt kann man sich mit Hilfe von udevinfo und grep die Serienenummer anzeigenlassen.

udevadm info -a -p `udevadm info -q path -n /dev/sdc` | grep ATTRS{serial}

Die Ausgabe sollte etwa so aussehen:

ATTRS{serial}=="14AB0000000096"
ATTRS{serial}=="0000:00:02.2"

Um herauszufinden welche Nummer die des Sticks ist führt man den Befehl nochmal aus, ersetzt aber ATTRS{serial} durch ATTRS{product}.

udevadm info -a -p `udevadm info -q path -n /dev/sdc` | grep ATTRS{product}

Jetzt erhält man eine Ausgabe die in etwa so aussieht:

ATTRS{product}=="USB Mass Storage Device"
ATTRS{product}=="EHCI Host Controller"

Die gesuchte Nummer des Sticks ist also die erste.

Jetzt kann man sich eine eigene udev Regel erstellen. Dazu legt man am besten eine neue Datei unter /etc/udev/rules.d/ an. (Hinweis: udev arbeitet die Dateien in alphabetischer Reihenfolge ab). Die Datei könnte man z.B. 50-myusb.rules nennen. In die Datei trägt man nun folgendes ein.

SUBSYSTEMS=="usb", ATTRS{serial}=="14AB0000000096", KERNEL=="sd*", SYMLINK+="usbstick%n"

Jetzt noch die udev Regeln neu laden.

udevadm control --reload-rules

Udev sollte jetzt beim einstöpseln (vorausgesetzt der Stick enthält eine Partition) zwei Symlinks, die auf das "reale" Device zeigen, in /dev erstellen. usbstick für den Stick ansich und usbstick1 für die (erste) Partition. Ab jetzt kann über diese Links auf den Stick zugegriffen werden. Enthält der Stick mehr als eine Partition wird für jede ein eigener Link mit der Partitionsnummer angelegt. Wie bei einer Festplatte auch.

zum Beispiel

/dev/usbstick       
/dev/usbstick1
/dev/usbstick2