Warnung Erstellen eines Kernelmoduls, das exportierte Symbole verwendet

8

Ich habe zwei Kernel-Module (sagen wir modA und modB). modA exportiert ein Symbol mit EXPORT_SYMBOL(symA) und modB verwendet es. Ich habe den Header modA.h für modA:

%Vor%

und in modB.c :

%Vor%

Wenn ich insmod modB alles gut funktioniert, ist mein modB korrekt im Kernel verbunden und die Funktion symA wird korrekt aufgerufen. Wenn ich jedoch modB erstelle, löst der Compiler eine Warnung aus: symA is undefined . Ein LKM ist ein ELF, der verschoben werden kann, warum also der Compiler diese Warnung auslöst? Wie kann das entfernt werden?

    
MirkoBanchi 29.02.2012, 13:04
quelle

1 Antwort

12

Dieses Problem (und wie man in diesem Fall richtig kompiliert) wird in Ссылка

  

Manchmal verwendet ein externes Modul exportierte Symbole von einem anderen   externes Modul. kbuild benötigt volle Kenntnis aller Symbole   um zu vermeiden, Warnungen über undefinierte Symbole auszuspucken. Drei   Lösungen existieren für diese Situation.

     

HINWEIS: Die Methode mit einer kbuild-Datei auf oberster Ebene wird empfohlen, kann aber   in bestimmten Situationen unpraktisch sein.

     

Verwenden Sie eine kbuild-Datei auf oberster Ebene. Wenn Sie zwei Module haben, foo.ko und   bar.ko, wo foo.ko Symbole von bar.ko benötigt, kannst du a verwenden         allgemeine kbuild-Datei auf oberster Ebene, so dass beide Module in der   gleicher Aufbau Berücksichtigen Sie das folgende Verzeichnislayout:

%Vor%      

Kenntnis der Symbole von jedem Modul.

     

Verwenden Sie eine zusätzliche Modul.symvers-Datei Wenn ein externes Modul erstellt wird,   Eine Module.symvers-Datei wird generiert, die alle exportierten Symbole enthält   welche nicht im Kernel definiert sind. Um Zugriff auf Symbole zu erhalten   bar.ko, kopieren Sie die Datei Module.symvers aus der Zusammenstellung von bar.ko   in das Verzeichnis, in dem foo.ko erstellt wird. Während des Modulbaus   kbuild liest die Datei Module.symvers im Verzeichnis des   externes Modul, und wenn der Build abgeschlossen ist, ein neues         Die Datei Module.symvers wird erstellt und enthält die Summe aller Symbole   definiert und nicht Teil des Kernels.

     

Verwenden Sie "make" Variable KBUILD_EXTRA_SYMBOLS Wenn es unpraktisch ist   Kopieren Sie Module.Symvers von einem anderen Modul, Sie können ein Leerzeichen zuweisen   getrennte Liste von Dateien in KBUILD_EXTRA_SYMBOLS in Ihrer Build-Datei.         Diese Dateien werden von modpost während der Initialisierung von geladen   seine Symboltabellen.

    
svenfx 29.02.2012, 13:19
quelle

Tags und Links