Ich habe ein einfaches Kernel-Objekt, das ich für die Untersuchung im Kernel-Speicher erstellt.Linux Kernel Module (* .ko) Kompatibilität zwischen den Kernel
Wenn ich es auf meinem 64-Bit-Ubuntu (3.2) -Maschine bauen, funktioniert es gut auf diesem Rechner. Aber es wird nicht auf meinem 64-Bit-Ubuntu (3.9) -Maschine insmod. Und umgekehrt. Es gibt mir ein "-1 ungültiges Modulformat" -Fehler, wenn ich versuche, es auf einer anderen Kernrev auszuführen als der, auf dem ich es gebaut hatte.
Ich dachte, Insmod verknüpft es dynamisch gegen die exportierte Symboltabelle und die exportierte Symboltabelle ändert sich nicht zwischen Kernel-Revisionen. (Es wird angehängt.)
Kann mir jemand sagen, wie ich ein Kernelmodul (.ko) bauen kann, das mit zukünftigen (oder vergangenen) Linux-Kernel kompatibel ist, ohne auf diesem Kernel neu erstellt werden zu müssen?
Hier ist mein Make-Datei:
ccflags-y = -g
obj-m + = access_mem.o
alle: make -C/lib/modules/$ (shell uname -r)/build M = $ (PWD) Module
sauber: make -C/lib/modules/$ (shell uname -r)/build M = $ (PWD) sauber
Ihr Ubuntu 3.2 ist eine 32-Bit oder 64-Bit Version? Die gleiche Frage mit Ihrem Ubuntu 3.9 – nouney
Beide 64-Bit. Danke für die Erinnerung an diesen wichtigen Datenpunkt. –