Was ist der Unterschied zwischen module_init und subsys_initcall während der Initialisierung der Treiber?
Was ist der Unterschied zwischen module_init
und subsys_initcall
während der Initialisierung der Treiber?
- Haben Sie die man-Seiten?
- Keine Handbuch-Seite-Eintrag zur Verfügung.
- Sie können immer grep über die Sourcen. Viel kann erklärt werden durch nur einen Blick auf die Quellen.
- vielen Dank für den Zeiger 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der Unterschied bezieht sich auf timing, oder genauer gesagt, die Reihenfolge der Ausführung. Das heißt, die Prozedur deklariert als
subsys_initcall
ist garantiert ausgeführt werden, bevor die Prozedur deklariert alsmodule_init
. Diese Anordnung gewährleistet, dass die subsystem-und Plattform-Treiber initialisiert werden, bevor Sie Gerätetreiber versuchen, nutzen die ehemaligen Funktionen (z.B. ein Gerätetreiber wird als ein subsystem device).Den eigentlichen makro-definition für jeden einzelnen hängt davon ab, ob der kernel konfiguriert ist (ladbare) Module oder nicht. Die definition für diese Makros (und anderen init-Makros) können gefunden werden in include/linux/init.h
Beachten Sie, dass
subsys_initcall()
kann nur verwendet werden von einem built-in (statisch gelinkt) - Modul.module_init
verwendet werden können, entweder durch eingebaute oder ladbare Module.*.ko
Modulesubsys_initcall()
zugeordnet ist, die gleiche wiemodule_init()
d.h.device_initcall()
Verweis: lxr.free-electrons.com/source/include/linux/init.h#L298