-1

Ich ging durch viele Dokumentationen und Fragen wie how system call implemented, disassemble a system call und auch meine eigenen Schlitten auf Schlitten Aktie Linux kernel tour aber ich möchte wissen, wann wir öffnen jede Datei, kann Gerät sein, regulär, Rohr oder Socket, welcher Teil des Codes bindet die Systemaufrufe wie öffnen, lesen, schreiben, um seine betroffenen Treiber file_operation Funktionen., die einen Teil des Kernel-Systemaufruf hilft während der Laufzeit auf seine erforderliche Treiberfunktion zu binden

Auch ich bin in der Lage, einige der Funktionen zu finden und ihre Definition in SYSCALL_DEFINEx dann sys_calls etc, aber wie konnte nicht die Punkte bis Fops Struktur von Treiber und Bindung verbinden, so war etwas verwirrt, ist es durch getan udev, jeder andere Kernel-Dämon, jede andere Funktion oder alle Funktionen werden separat definiert, während der Treiber geprüft wird.

Suche nach einer Idee, um diese Punkte zu verbinden.

Antwort

1

Der Systemaufruf ruft normalerweise virtuelle fs Schichtfunktion auf. So schreiben Systemanruf wird vfs_open anrufen, die file->f_op->open aufrufen wird. Je nach Dateityp sind dies unterschiedliche Funktionen. Wenn es sich um eine reguläre Datei handelt, ist sie abhängig vom Dateisystem wie ext4_file_open. Der tatsächliche Funktionsname muss in diesem Fall in der file_operations Struktur für ext4 nachgeschlagen werden. Ein ähnlicher Mechanismus wird verwendet, um von der Dateisystemschicht zur Treiberschicht zu wechseln.

+0

ok gut, schon erwähnte diese Dinge in Frage. Aber was ich fragte ist, wenn wir irgendeine Datei öffnen, nehmen wir/dev/sda und/dev/sdb, wo sda ist Festplatte und sdb ist USB-Laufwerk beide verschiedene Implementierungen für öffnen, lesen, schreiben. Ich wollte wissen, wie wir den USB-Stecker, es ist geprüft und neue file_ops sind registriert, so dass wenn wir öffnen sda Festplatte sind die Fops verwendet werden und für sdb neue USB-Fops verwendet werden. Wer ist also für die Auswahl des jeweiligen Fahrers verantwortlich? Ich wusste auch, dass es mit verschiedenen Minorummern differenziert ist, aber wer ist dafür verantwortlich? –

+1

Die untere Schicht in diesem Fall ein Treiber ist verantwortlich für die Registrierung mit der oberen Schicht entweder zum Zeitpunkt der Initialisierung mit einer Variante der register_ * -Funktion. Dies bindet die Operation an die Struktur der oberen Schicht und ermöglicht später die Auswahl des richtigen Treibers, wenn eine offene oder andere Funktion aufgerufen wird. Dies ist das Grundkonzept. Aber ich hoffe, es wird Ihnen helfen, die Antwort zu finden, nach der Sie suchen. –

+0

hm .. ja, muss mehr recherchieren. Ich habe versucht, etwas für mein Projekt zu hacken. Trotzdem danke! –

0

Machen Sie ein Reverse Engineering, erfahren Sie, wie diese Dateioperationen registriert werden. Von dort wissen Sie, wie die richtigen Treiber während eines Systemaufrufs verwendet werden. Trace register_chrdev

+0

es hat nicht geholfen, es war ein Meer, jeder Fahrer hat einen anderen Registrierungsprozess! –

Verwandte Themen