
Ich habe eine vom Hersteller bereitgestellte minimale Linux-Installation erhalten. Aus einer Antwort auf eine vorherige Frage habe ich erfahren, dass es möglich ist, einen Kernel mit oder ohne Modulunterstützung zu erstellen. Ich muss ein CANBUS-Gerät anschließen, das mit Treibern in Form von .ko-Dateien geliefert wird. Ich möchte diese mit den bereitgestellten Installationsskripten installieren können, aber zuerst muss ich wissen, ob mein Kernel mit Modulunterstützung erstellt wurde. Kann ich dies über die Befehlszeile feststellen?
Beim Ausführen lsmod
wird nichts zurückgegeben, sodass ich weiß, dass momentan keine .ko-Dateien vorhanden sind. Bedeutet dies jedoch, dass der Kernel mir die Installation einer .ko-Datei nicht erlaubt?
Antwort1
/proc
Wenn Sie ein Dateisystem haben , /proc/modules
existiert die Datei genau dann, wenn der Kernel mit Modulunterstützung kompiliert wurde. Wenn die Datei existiert, aber leer ist, unterstützt Ihr Kernel Module, aber im Moment sind keine geladen. Wenn die Datei nicht existiert, kann Ihr Kernel kein Modul laden.
Es ist technisch möglich, ladbare Module ohne zu unterstützen /proc
. Sie können das Vorhandensein der Systemaufrufe init_module
und delete_module
in der Kernel-Binärdatei überprüfen. Dies ist möglicherweise nicht einfach, wenn Sie nur eine komprimierte Binärdatei haben (z. B. vmlinuz
oder uImage
). SieheWie entpacke ich vmlinuz nach vmlinux?für vmlinuz
. Wenn Sie es geschafft haben, den Großteil des Kernels zu dekomprimieren, suchen Sie nach der Zeichenfolge sys_init_module
.
Beachten Sie, dass Sie, wenn Module unterstützt werden, trotzdem zusätzliche Dateien benötigen, um Ihre eigenen Module zu kompilieren:Kernel-Header. Dies sind C-Headerdateien ( *.h
), von denen einige beim Kompilieren des Kernels generiert werden (Sie können sie also nicht einfach aus den Kernelquellen übernehmen). SieheWas enthält ein Kernel-Quellcodebaum? Hat dies etwas mit Linux-Kernel-Headern zu tun?
Antwort2
Die meisten Distributionen speichern irgendwo eine Textdatei mit der Kernelkonfiguration. Auf einem Debian-System finden Sie sie in /boot/config-<kernel_version>
.
Anschließend können Sie grep
für die Datei einfach Folgendes ausführen:
grep CONFIG_MODULES /boot/config-<kernel_version>