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)?