2015-04-13 10 views
6

Sto codificando al di fuori dell'albero dei sorgenti del kernel. Ci sono due moduli, il primo printt ha una funzione printtty() per stampare la stringa sul tty corrente e il secondo modulo ciao che invoca printtty() durante l'inizializzazione.Come esportare un simbolo da un modulo esterno?

ho aggiunto EXPORT_SYMBOL(printtty) nel modulo printt, e dopo insmod ./printt.ko, le informazioni di printtty() può essere visto in /proc/kallsyms.

Il processo make del modulo ciao va tutto bene. Ma insmod ./hello.ko causerà un errore del tipo:

insmod: ERROR: could not insert module hello.ko: Invalid parameters 

e dmesg mostra

hello: no symbol version for printtty 
hello: Unknown symbol printtty (err -22)`. 

Ho risolto questo

(1) Copiare il file .ko in una posizione al di sotto/lib/modules/version/kernel

(2) Aggiungere i simboli esportati a /lib/modules/version/build/Module.symvers

Ma mi chiedo c'è un modo per esportare un simbolo solo da un modulo esterno (senza modificare l'albero dei sorgenti del kernel)?

risposta

6

Aggiungi questa linea al cima del Makefile per il modulo ciao:

KBUILD_EXTRA_SYMBOLS := /home/your-user/path/to/printt/Module.symvers 

(assicuratevi di mettere nel percorso corretto per la printt modulo).

Ora ricostruisci il tuo modulo ciao e verrà caricato correttamente.

Per dettagli, vedere Documentation/kbuild/modules.txt, "6.3 Simboli da un altro modulo esterno".