Wie funktioniert der USB-Speichertreiber unter Linux?

8

Ich versuche herauszufinden, wie der USB-Speichertreiber unter Linux funktioniert. Ich suche nach einem einfachen Artikel oder sogar einem Bild / Flussdiagramm, das beschreibt, wie es funktioniert.

Im Grunde möchte ich folgende Fragen beantworten:

Was passiert, wenn Sie das Gerät an Ihren Computer anschließen? Gibt es einen Daemon, der sie aufnimmt, oder löst das Ereignis irgendwo einen Interrupt aus? Liest der USB-Kerntreiber Informationen über das Gerät, bevor die Kontrolle an den USB-Speichertreiber übergeben wird? Wie entscheidet es, welche Art von Gerät es ist? Wie wird das Gerät gemountet und wie kann es mit dem Dateisystem des Computers kommunizieren? Wie sieht der Datenfluss im Kernel aus, wenn ich eine Datei kopiere?

Ich hoffe, dass die Frage nicht zu vage ist - ich habe Google vergebens versucht, also frage ich mich, ob irgendjemand Artikel oder Diagramme kennt, die das erklären können, oder vielleicht, wenn sie es selbst ohne viel Aufwand erklären können. Danke.

    
Sefu 04.12.2013, 20:02
quelle

1 Antwort

9

Nein, das ist eine sehr gute Frage.

Das Blockschreiben geht in Linux mit der Block-Device-Schicht. Die Dateisysteme arbeiten mit dieser Block-Entwicklungsschicht.

Wenn dieser Layer etwas ausschreiben will, sagt es dem Treiber des USB-Master-Gerätes. Dieser Treiber spricht mit dem USB-Controller-Chip des Motherboards.

Dieser Chip ist sehr einfach: Der USB ist praktisch ein serieller Port mit vielen Erweiterungen, hauptsächlich für die Autokonfiguration und das Power-Management. Aber im Grunde können Sie Bytes schreiben und in Bytes lesen.

Ihre Fragen:

Was passiert, wenn Sie das Gerät an Ihren Computer anschließen? Gibt es einen Daemon, der sie aufnimmt, oder löst das Ereignis irgendwo einen Interrupt aus?

Das Gerät (USB-Slave) sagt dem Master (auf dem Motherboard): "Ich bin hier". Der USB-Controller-Chip bekommt die Nachricht und sagt sie (normalerweise) zum Kernel mit einem Interrupt. Der Kernel reinitialisiert und scannt den USB-Bus neu und sagt dem udev: "Hier ist ein neues 1234: 5678 USB-Gerät auf dem USB-Baum 1.3.5"

"Wie entscheidet es, welche Art von Gerät es ist?"

USB-Geräte haben eine Hersteller- und Modell-ID und können dies auf Nachfrage sagen. Google für "usb-ids".

"Wie wird das Gerät gemountet und wie kann es mit dem Dateisystem des Computers kommunizieren?"

Der Kernel lädt nur den Treiber und sagt das udev (welches sich im Userspace befindet): "Hier ist ein neues Blockgerät auf Gerätenummer 22:16". Von diesem versucht udev das mit einem Userspace-Daemon zu mounten, es ist bereits verteilungsabhängig.

    
peterh 04.12.2013, 21:27
quelle

Tags und Links