volte, un modulo esterno utilizza esportato simboli da un altro modulo esterno . kbuild deve avere una conoscenza completa di tutti i simboli per evitare di sputare avvertimenti su simboli non definiti. Esistono tre soluzioni per questa situazione.
NOTA: il metodo con un file di livello superiore di kbuild è consigliato ma potrebbe non essere possibile eseguire in determinate situazioni.
Utilizzare un file kbuild di livello superiore Se si dispone di due moduli, foo.ko e bar.ko, dove foo.ko ha bisogno di simboli da bar.ko, è possibile utilizzare un file kbuild comune di livello superiore, in modo sia i moduli sono compilati nello stesso build . Si consideri il seguente layout di directory:
./foo/ <= contains foo.ko ./bar/ <= contains bar.ko
The top-level kbuild file would then look like:
#./Kbuild (or ./Makefile): obj-y := foo/ bar/
And executing
$ make -C $KDIR M=$PWD
will then do the expected and compile both modules with full
conoscenza dei simboli da entrambi i moduli.
utilizzare un file Module.symvers extra quando un modulo esterno è costruito, un file Module.symvers viene generato contenente tutti i simboli esportati non definiti nel kernel. Per accedere ai simboli da bar.ko, copiare il file Module.symvers dalla compilation di bar.ko nella directory in cui è stato creato foo.ko. Durante la creazione del modulo, kbuild leggerà il file Module.symvers nella directory del modulo esterno e al termine della compilazione, viene creato un nuovo file Module.symvers contenente la somma di tutti i simboli definiti e non inclusi del kernel.
Usa "fare" KBUILD_EXTRA_SYMBOLS variabili Se non è pratico di Module.symvers copia da un altro modulo, è possibile assegnare uno spazio elenco separato dei file da KBUILD_EXTRA_SYMBOLS nel file build. Questi file verranno caricati da modpost durante l'inizializzazione di le sue tabelle dei simboli.
Grande! Ho perso questo. Grazie Gossamer! – MirkoBanchi