Asamblarea separată a modulelor de kernel conectate linux - overflow stack în rusă

Este necesar să asamblați două module a și b separate unul de celălalt, în timp ce unul este conectat la celălalt.
Voi explica cu un exemplu:
a.c fișier

Avem un makefile comun

În această etapă, modulele sunt asamblate și încărcate în secvența: a -> b. deoarece b apelează o funcție de la.







Să modificăm condițiile de activitate, să distribuim modulele în diferite foldere și pentru fiecare să creăm fișierul Makefile.
Acum, când construim modulul b, vedem AVERTISMENT: "hello_print_msg" [. /b/hello_b.ko] undefined! Dacă acum din dosarul cu modulul copiați (înlocuind) fișierul Module.symvers în dosarul cu modulul b. și executați din nou comanda. totul va fi grozav!

Întrebare: Există un alt mod de a spune colectorului modulului de kernel Linux unde să caute fișiere cu liste de caractere exportate?

acest lucru este descris în documentație. în secțiunea 6.3 Simboluri de la un alt modul extern.







mai jos este traducerea mea gratuită:

uneori, un modul extern utilizează identificatori de la un alt modul extern. kbuild ar trebui să fie conștienți de ele, pentru a nu deranja cu avertismente cu privire la identificatori necunoscuți. există trei soluții.

utilizând fișierul kbuild din directorul de deasupra nivelului

dacă aveți două module, foo.ko și bar.ko. iar modulul foo.ko necesită identificatori de la bar.ko. Puteți folosi fișierul kbuild comun de la nivelul directorului de mai sus - ambele module vor fi compilate în timpul aceluiași asamblare. ia în considerare următoarea structură de directoare:

atunci fișierul kbuild poate arăta astfel:

va duce la asamblarea ambelor module cu informații complete despre toți identificatorii.

utilizarea fișierului suplimentar Module.symvers

Atunci când construiți un modul extern, fișierul Module.symvers este generat. conținând toți identificatorii exportați care nu sunt definiți în kernel. pentru a avea acces la identificatorii bar.ko Module.symvers copia fișierul din ansamblul modulului în directorul unde veți întâlni foo.ko. în timpul asamblării kbuild citiți acest fișier și noile Module.symvers vor fi create la sfârșitul anului. conținând "suma" identificatorilor descriși care nu fac parte din kernel.

utilizarea variabilei KBUILD_EXTRA_SYMBOLS







Articole similare

Trimiteți-le prietenilor: