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?

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 le funzionalità del precedente (ad esempio, un driver del dispositivo si registra come un dispositivo del sottosistema).

La definizione della macro effettiva per ciascuno dipende dal fatto che il kernel sia configurato per moduli (caricabili) o meno. La definizione di queste macro (e di altre macro di init) può essere trovata 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 built-in o caricabili.