2013-06-19 16 views
5

Ho una funzione esportata foo() e foo1() da a.ko (un modulo del kernel), foo1() accetta il parametro di input, un puntatore di funzione. Invoco foo1() da b.ko e passa foo() come parametro di input.EXPORT_SYMBOL nel modulo del kernel | simbolo non definito durante insmod

Vedo un errore insmod per b.ko (simbolo sconosciuto foo), anche se a.ko è stato insmoded prima di b.ko.

Eventuali spiegazioni/soluzioni?

Grazie, fortunato

+0

Hai creato i moduli in diverse directory? Hai usato il file .symvers durante la creazione di b.ko? Vedi anche: http://stackoverflow.com/questions/12311867/ – Eugene

+0

Esempio di funzionamento minimo: https://stackoverflow.com/questions/12311867/how-to-call-exported-kernel-module-functions-from-another- module/44614246 # 44614246 –

risposta

3

Ci sono due modi per risolvere questo, 1) Compilare entrambi i moduli del kernel della stessa Makefile cioè objs-m: = A. Ó b.o. 2) Includere ** KBUILD_EXTRA_SYMBOLS = < "percorso assoluto per Module.symvers del modulo del kernel che sta esportando funzione o variabile"> nel Makefile del modulo del kernel che utilizzerà la funzione o la variabile esportata.

+0

Qual è il formato della linea KBUILD_EXTRA_SYMBOLS? Make mi dice "regole miste implicite e normali: sintassi deprecata" – jeremiah

+1

@jeremiah, KBUILD_EXTRA_SYMBOLS è una variabile make e immagino che non ci sia alcun formato in quanto tale. GNU rende il lancio di "regole miste implicite e normali: la sintassi deprecata" è dovuto all'uso della nuova versione di GNU make (4.0). Prova a usare GNU make version (3.8.1) per compilare il modulo. Passare attraverso il link http://blog.melski.net/2015/01/12/whats-new-in-gnu-make-4-1/ –

Problemi correlati