unknown symbol in module



  • Hallo zusammen,

    ich habe ein Kernel Modul, welches aus mehreren Quellen besteht. Nun brauche ich soetwas wie eine globale Variable. In meiner Hauptdatei modul.c, wo auch die __init und die __exit Funktion sind habe ich eine Variable global deklariert

    static unsigned int *my_data;
    

    Hier wird diese Variable auch initialisiert. Diese Initialisierte Variable möchte ich jetzt an einer anderen Stelle des Moduls verwenden. Dazu habe ich die Variable mit

    extern unsigned int *my_data;
    

    bekannt gegeben.
    Kompilieren des Modules läuft einwandfrei. Allerdings wird das Modul nicht geladen da das Modul zurückgibt: "Unknown symbol in module or unknown parameter (see dmesg)".
    Im dmesg sehe ich dann folgendes: "unknown symbol my_data".

    nm my_module.ko | grep my_datagram liefert mir beide Einträge.

    00000040 b my_data
             U my_data
    

    Warum kann das Symbol dann nicht aufgelöst werden?

    Kann mir jemand einen Tipp geben wie ich das Problem lösen kann? Oder muss ich mein globale Variable anders erzeugen?



  • das problem ist das wort static. damit ist die variable nur in diesem module vorhanden und wird nicht exportiert. sie ist nicht global. entfern static und es sollte klappen.



  • Danke für den Hinweis. Das war die Ursache.


Anmelden zum Antworten