Qual è la differenza tra module_init
e subsys_initcall
durante l'inizializzazione del driver?Qual è la differenza tra module_init e subsys_initcall durante l'inizializzazione del driver?
risposta
La differenza si riferisce al tempo o, più precisamente, all'ordine di esecuzione. Cioè, la procedura dichiarata come subsys_initcall
è garantita per essere eseguita prima della procedura dichiarata come module_init
. Questo ordinamento garantisce che i driver del sottosistema e della piattaforma siano inizializzati prima che i driver del dispositivo tentino di utilizzare la funzionalità del primo (ad esempio, un driver del dispositivo si registra come un dispositivo del sottosistema).
La definizione di macro effettiva per ciascuno dipende dal fatto che il kernel sia configurato per moduli (caricabili) o meno. La definizione di queste macro (e altre macro di init) è disponibile in include/linux/init.h
Si noti che subsys_initcall()
può essere utilizzato solo da un modulo integrato (collegato staticamente).
module_init
può essere utilizzato da moduli incorporati o caricabili.
Molto chiaro .. grazie .. – kzs
Per i moduli '* .ko' caricabili,' subsys_initcall() 'è mappato allo stesso di' module_init() 'ie' device_initcall() 'Riferimento: http : //lxr.free-electrons.com/source/include/linux/init.h#L298 – TheCodeArtist
Hai controllato le pagine man? – rekire
Nessun inserimento di pagina manuale disponibile per quello. – kzs
È sempre possibile vedere le fonti. Un grande affare può essere spiegato semplicemente guardando le fonti. –