2013-03-21 1 views

risposta

17

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.

+0

Molto chiaro .. grazie .. – kzs

+2

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