Kernel-Module: .o vs .ko

10

Es scheint, dass Dateien mit Kernelmodulen aufgerufen werden .o, zumindest denke ich das, wenn ich mir ein Tutorial wie dieses anschaue . Auf meiner Debian-Squeeze-Box scheinen diese Dateien jedoch aufgerufen zu werden .ko.

Hängt es von der Verteilung (oder deren Version) ab, ob die Dateien aufgerufen werden .ooder ob .kosie ansonsten mehr oder weniger gleich sind?

Zebonaut
quelle

Antworten:

11

Ich habe hier folgende Antwort gefunden :

Die kurze Antwort lautet, dass die .ko-Datei Ihre Objektdatei ist, die mit einigen vom Kernel automatisch generierten Datenstrukturen verknüpft ist, die vom Kernel benötigt werden.

Die .o-Datei ist die Objektdatei Ihrer Module - das Ergebnis der Kompilierung Ihrer c-Dateien. Das Kernel-Build-System erstellt dann automatisch eine weitere C-Datei mit einigen Datenstrukturen, die das Kernel-Modul (mit dem Namen your_module_kmod.c) beschreiben, kompiliert diese C-Datei in eine andere Objektdatei und verknüpft Ihre Objektdatei und die Objektdatei, die es zum Erstellen der .ko-Datei erstellt hat Datei.

Der dynamische Linker im Kernel, der für das Laden der Kernelmodule zuständig ist, erwartet, die Datenstruktur zu finden, die der Kernel im kmod-Objekt in der .ko-Datei abgelegt hat, und kann Ihr Kernelmodul ohne sie nicht laden.

Ebenfalls aus dieser Quelle , unter Berufung auf tldp : Bis zu 2.4 Kernel-Versionen war es ".o" und seit 2.6 ist es ".ko".

J. Taylor
quelle
3

Es scheint ein altes Howto (Tutorial) zu sein, in Fakten wurde es 2005 geschrieben. Als der Linux-Kernel 2.4.x war, hatten die Module die Erweiterung .o, während sie in 2.6 .ko wurden

Asclepix
quelle