Geladene Module bzw. Treiber ermitteln



  • In /proc/modules gibt es doch die Möglichkeit alle geladenen Module aufzulisten. Gibt es eine genaue Methode, um genau eines davon zu prüfen, ob es geladen ist?



  • dixidix schrieb:

    In /proc/modules gibt es doch die Möglichkeit alle geladenen Module aufzulisten. Gibt es eine genaue Methode, um genau eines davon zu prüfen, ob es geladen ist?

    In standard C++ nicht. Vielleicht kann dir im Linux-Forum jemand die Frage beantworten.



  • Das problem ist eigentlich das:
    Im Prinzip gehts ja damit:

    bool isLoaded(string module_name)
    {
    	string modules;
    	ifstream f("/proc/modules");
    	char ch;
    	while(f.get(ch)) {
    		modules += ch;
    	}
    	f.close();
    	string::size_type loc = modules.find( module_name) 0 );
    	return ( loc != string::npos ) ? true : false;
     }
    

    aber: nur falls ein Modul drin steht, dass die gleiche string-Kette enthält, z.B.: xyz oder xyzabc, würde das immer bei xyz true ergeben, auch wenn es nicht geladen ist, weil "xyz" auch in "xyzabc" gefunden wird.



  • hab jetzt nicht so die ahnung wie modules aufgebaut ist, aber kanns sein dass die module zeilenweise aufgelistet sind? Wenn du statt einzelnen Zeichen ganze Strings oder Zeilen z.B. in ein Set packst kannst du recht bequem nach ganzen Wörtern suchen.



  • bool isLoaded(const string& module_name)
    {
        string temp = "";
        set<string> modules;
        ifstream input("/proc/modules");
    
        while( input >> temp ) 
        {
            modules.insert(temp);
            getline(temp);               // oder ignore
        }
    
        return modules.count(module_name);
     }
    


  • Danke, aber hier kommt leider für diese Zeile ein Fehler:

    getline(temp);
    
    error: cannot convert `std::string' to `char**' for argument `1' to `__ssize_t getline(char**, size_t*, FILE*)'
    


  • Tag,
    Wie wäre es mit c_str(); ?

    MFG ReduX



  • war auch meine erste Idee. Aber das gleiche in grün.

    getline(temp.c_str());
    
    error: cannot convert `const char*' to `char**' for argument `1' to `__ssize_t getline(char**, size_t*, FILE*)'
    


  • Uups, sollte natürlich getline(input, temp) sein.



  • Threadersteller schrieb:

    Geladene Module bzw. Treiber ermitteln

    Was ist mit den Treibern die fest eingebunden sind im Kernel.



  • Kuhjunge schrieb:

    Was ist mit den Treibern die fest eingebunden sind im Kernel.

    cat /usr/src/linux/.config | grep =m
    


  • cat /usr/src/linux/.config | grep =m

    das geht aber nur wenn die quellen installiert sind und der link auch auf die richtigen quellen zeigt.
    außerdem, wenn der kernel kompiliert ist und läuft, heißt das ja nicht das die .config nicht verändert worden ist.
    das ist also nicht die zuverlässige methode.



  • k1w2t5 schrieb:

    das geht aber nur wenn die quellen installiert sind und der link auch auf die richtigen quellen zeigt.
    außerdem, wenn der kernel kompiliert ist und läuft, heißt das ja nicht das die .config nicht verändert worden ist.
    das ist also nicht die zuverlässige methode.

    Stimmt. Was ist damit:

    cat /usr/src/linux/drivers/modules.order
    


  • das läuft auf das selbe hinaus, kernelquellen.
    also für die module gibt es ja /lib/modules/ $kernelversion. die kernelversion bekommt man ja mit uname.
    für die fest eingebundenen treiber müsste man doch was mit /sys/ oder /proc/ anfangen können. leider weiß ich nicht genau wie. wenn es im kernel konfiguriert ist, kann man auch deren config auslesen aus /proc/config.
    es muss doch sowas geben wie unter windows das verzeichnis /system32/
    wahrscheinlich ist das ganz einfach, wenn man weiß wie.


Anmelden zum Antworten