2015-04-13 15 views
6

Koduję poza drzewem źródłowym jądra. Istnieją dwa moduły, z których pierwszy printt ma funkcję printtty() do drukowania ciągów do bieżącego tty, a drugi moduł witam, który wywołuje printtty() podczas inicjalizacji.Jak wyeksportować symbol z modułu zewnętrznego?

Dodałem EXPORT_SYMBOL(printtty) w module printt, a po insmod ./printt.ko, informacje o printtty() widać /proc/kallsyms.

Proces make proces modułu witam idzie dobrze. Ale insmod ./hello.ko spowoduje błąd jak:

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

i dmesg pokazuje

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

Naprawiłem to przez

(1) Skopiuj plik .ko do lokalizacji pod/lib/modules/version/kernel

(2) Dodaj wyeksportowane symbole do /lib/modules/version/build/Module.symvers

Ale zastanawiam się, czy istnieje sposób na eksport symbolu tylko z zewnętrznego modułu (bez modyfikowania drzewa źródłowego jądra)?

Odpowiedz

6

Dodaj tę linię na samej górzeswojej Makefile dla powitania modułu:

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

(należy umieścić w odpowiedniej ścieżce do printt modułu).

Teraz przebuduj swój moduł hello i będzie ładowany bez żadnych problemów. Aby uzyskać szczegółowe informacje, patrz Documentation/kbuild/modules.txt: "6.3 Symbole z innego modułu zewnętrznego".

Powiązane problemy