2017-01-26 2 views
2

Gibt es einen einfachen Weg, innerhalb eines laufenden Linux-Kernel-Modul, den vollständigen Dateinamen für die .ko Datei (dh: /lib/modules/$(uname -r)/kernel/drivers/mymodule.ko) mit dem Modul verbunden, ohne zu verfahren procfs, aber stattdessen nur interne Strukturen/Listen im Kernel-Space-Code verfügbar?Get Linux Kernel-Modul Ko-Dateiname in laufenden Modul

Antwort

3

Nr

Erstens: Ihr Modul in den Kernel kompiliert worden sein, und wird somit nicht einen Dateipfad hat.

Zweitens: Laden von Kernelmodulen aus Dateien findet im Benutzerbereich statt. Der Kernel wird mit dem Systemaufruf init_module ein Modul als Datenpuffer übergeben - es ist theoretisch möglich, dass diese Daten nie aus einer Datei geladen wurden. (Man kann sich beispielsweise einen Modullader vorstellen, der Module aus dem Netzwerk oder aus einem komprimierten Archiv lädt.)

4

Sie nicht erhalten Pfad zur Moduldatei im Kernel: Der Kernel es nicht speichert. Außerdem kennt der Kernel diesen Pfad nicht.

Es gibt zwei Systemaufrufe zum Laden eines Kernelmoduls: init_module und finit_module (beide sind in kernel/module.c definiert). Der erste akzeptiert den Zeiger auf den Benutzerbereich, in dem sich das Modulbild befindet (der Benutzerbereich sollte die Moduldatei zuvor in diesen Bereich lesen). Der zweite akzeptiert einen Deskriptor für die Moduldatei, aber dieser Deskriptor wird nur für den gelesenen Inhalt der Datei verwendet und nicht gespeichert.