Was ist die integrierte Treiberladefolge von Linux?
Wie können wir passen Sie die built-in-Treiber zu laden, um ein (um einige built-in-Treiber-Modul zuerst geladen, und die abhängigen module load später)?
InformationsquelleAutor der Frage Dien Nguyen | 2012-07-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Built-in-Treibern nicht geladendaher eingebaut. Den init-Funktionen aufgerufen werden und die Treiber werden aktiviert, wenn der kernel richtet sich. Diese init-Funktionen aufgerufen werden, die in
init/main.c::do_initcalls()
. Alle init-Aufrufe sind klassifiziert in der Ebene, die definiert sind ininitcall_levels
undinclude/linux/init.h
Diese Ebenen sind die aktuellen Symbole definiert, die im linker-script (
arch/*/kernel/vmlinux.lds.*
). Bei der kernel-Kompilierung, der linker sammelt alle Funktion markiertmodule_init()
oder andere*_initcall()
klassifizieren, in der Ebene, alle Funktionen in der gleichen Ebene zusammen an der gleichen Stelle, und erstellen Sie wie ein array von Funktionszeigern.Was do_initcall_level() in der run-Zeit ist der Aufruf jeder Funktion hingewiesen, die durch den Zeiger im array. Es gibt keine Berufung Politik, außer Ebenen, in do_initcall_level, aber die Reihenfolge im array ist entschieden, in den link-Zeit.
So, jetzt kann man sehen, dass der Fahrer die Einleitung, um fest auf den link Zeit, aber was können Sie tun?
Makefile
Die erste ist klar, wenn Sie schon oben gelesen. ie) nutzen early_initcall() statt, wenn es angemessen ist.
Die zweite braucht man ein wenig mehr Erklärung. Der Grund, warum die Bestellung in einer
Makefile
Frage ist, wie sich die aktuelle kernel-build-system funktioniert und wie der Linker arbeitet. Um eine lange Geschichte kurz zu, nimmt das build-system alle Objekt-Dateien inobj-y
und miteinander verknüpfen. Es ist sehr umgebungsabhängig, aber es besteht eine hohe Wahrscheinlichkeit, dass der linker platzieren Sie das erste Objekt-Datei in derobj-y
im unteren Adresse, so hieß früher.Wenn Sie wollen einfach nur Ihr Treiber genannt zu werden, früher als andere Fahrer im gleichen Verzeichnis, dies ist am einfachsten Weg, es zu tun.
InformationsquelleAutor der Antwort Yasushi Shoji
depmod
untersucht die Symbole exportiert werden und jedes Modul und stellt eine topologische Sortierung auf Sie, dassmodprobe
später nutzen kann, laden von Modulen in der richtigen Reihenfolge. Dass die Symbole aus den Modulen, die Sie wünschen abhängig ist genug für Sie, das richtige zu tun.InformationsquelleAutor der Antwort Ignacio Vazquez-Abrams
Richtige Modul bestellen und Abhängigkeiten behandelt werden modprobeauch innerhalb der initrd.
InformationsquelleAutor der Antwort Basile Starynkevitch
Vor kurzem habe ich das problem, das mein Ladegerät-Treiber ist, dass die Abhängigkeit von ADC-Treiber, so dass vor dem laden ADC-Treiber-Ladegerät-Treiber geladen hat und die Prüfung für den adc phandle, die definiert ist, in DTS-Datei und muss intialize von ADC-Treiber. die hat gelöst, indem die Reihenfolge der Modul in drivers/Makefile
InformationsquelleAutor der Antwort Nagi