Ich habe kürzlich ein vom Hersteller bereitgestelltes Embedded-Linux auf einem Hardwaregerät installiert. Als ich in lsmod
der Gerätebefehlszeile lief , war die Antwort leer. Ich wurde zu der Annahme verleitet, dass dies bedeutet, dass die Treiber für die auf dem Gerät ausgeführte Hardware nicht als .ko-Dateien, sondern im Kernel integriert wurden. Meine Frage lautet: Wie läuft dieser Prozess ab?
Wird in späteren Versionen die Unterstützung für gängige Hardware schrittweise in den Kernel integriert, wodurch die .ko-Dateien ersetzt werden? Wird die .ko-Datei lediglich zur Unterstützung neuer Hardware verwendet, für die zum Zeitpunkt der Veröffentlichung keine Treiber für den Kernel integriert waren? In meinem begrenzten Wissen dachte ich, dass alle Hardwaretreiber in Form von .ko-Dateien vorliegen, aber dies ist eindeutig falsch.
Ich bin etwas verwirrt über den gesamten Prozess und wäre dankbar für eine Klärung, da ich das Gefühl habe, dass ich die Situation falsch betrachte.
Antworten:
Kerntreiber, die als kritisch für das Laden des Kernels angesehen werden, werden normalerweise in den Kernel integriert, während andere Hardwaretreiber usw. als Module oder .ko- Dateien erstellt werden.
Die .ko- Module werden normalerweise in dem
/lib
Verzeichnis auf Ihrer Root-Partition gespeichert . Der Kernel muss zunächst in der Lage sein, das zugrunde liegende Speichergerät zu erkennen und darauf zuzugreifen, bevor er auf sein Dateisystem zugreifen kann. Man kann also davon ausgehen, dass ein Kernel ohne integrierte SATA / SCSI- und ext2 / 3/4-Unterstützung nicht wirklich startet;)Sie können die meisten integrierten Kerneltreiber in Modulform umwandeln. Das Ubuntu-Kernel-Team entscheidet, ob die Standardkonfiguration des Linux-Kernel-Teams geändert und zusätzliche integrierte Treiber für die von Ihnen heruntergeladenen Standard-Kernel-Images ein- oder ausgeschlossen werden sollen.
Wenn Sie Ihren eigenen Kernel erstellen, können Sie dasselbe tun:
*
einen integrierten Treiber an, währendM
ein Modul angezeigt wird.quelle
Beim Kompilieren eines Kernels müssen Sie konfigurieren, welche Komponenten installiert werden. Darüber hinaus können Sie entscheiden, ob sie in den Kernel integriert sind oder ob es sich um ein Modul handelt .
Zum Beispiel verwenden viele Leute das ext2-Dateisystem in ihrem / boot Partition. Aus diesem Grund muss der Kernel in der Lage sein, beim Booten ext2-Dateisysteme zu lesen. Dazu wird das ext2-Modul in den Kernel selbst eingebaut.
Stellen Sie sich nun die Anzahl der verfügbaren Module vor. Es würde keinen Sinn machen, sie alle in Ihren Kernel zu integrieren, oder? Aus diesem Grund können Sie diese als separate .ko- Module erstellen und nach Belieben laden.
quelle
Dies hängt davon ab, wie Sie Ihren Build des Linux-Kernels konfiguriert haben.
Innerhalb eines Kompilierungsprozesses können Sie normalerweise:
Um zu verstehen, was eine .ko-Datei für /programming/10476990/difference-between-o-and-ko-file ist
Der Grund, warum Sie eine leere Ausgabe haben,
lsmod
ist, dass Sie einen monolithischen Kernel haben.Eine schnelle Möglichkeit zum Auflisten aller Module (sofern vorhanden) besteht darin, diesen Befehl auszuführen
Beachten Sie die Verwendung von
less
, können Sie jeden Pager verwenden, den Sie möchten, oder die Ausgabe umleiten, wo Sie möchten.quelle
.config
erstellen , verwenden Sie möglicherweise nur die gleiche Datei und ändern Sie sie nach Bedarf.Siehe den Inhalt der Datei /lib / modules / $ (uname -r) /modules.builtin
zB um nach einem bestimmten Modul zu suchen
Dokumentation / kbuild / kbuild.txt
quelle
scheint alle eingebauten und externen Module zu enthalten.
Es scheint aber auch einige Einträge zu enthalten, die eigentlich keine Module sind: /unix/225706/are-modules-listed-under-sys-module-all-the-loaded-modules
TODO: Lies die Quelle und verstehe genauer, was dort abgelegt wird.
Der Vorteil dieser Methode ist, dass Sie sich nicht darauf verlassen müssen, dass Sie die Kernel-Konfiguration unter
/boot
oder finden/proc/config.gz
.quelle