Wie lade ich ein Modul in initrd?


13

Ich möchte netconsolewährend der initrd-Phase explizit ein Modul laden (z. B. ), ähnlich wie /etc/modulesbeim Start des Hauptsystems.

Zuerst habe ich überprüft, ob die initrd in meinem System bereits das gewünschte Modul enthält (siehe Anhang).

Ich habe nachgesehen /initrd.img(das ist ein komprimiertes cpio-Archiv, also habe ich es getan zcat /initrd.img > initrd.cpiound bin damit hineingegangen , um einen kurzen Blick darauf zu werfen mc). Ich habe nach Aufrufen in modprobeden Skripten gesucht und herausgefunden, dass die in /conf/modules( /ist initrds root hier) aufgelisteten Module automatisch von der load_modules()Funktion from /scripts/functions(aufgerufen von /init) geladen werden .

Aber was wäre das Standardwerkzeug im Ubuntu-System, um /conf/modulesdie initrd zu aktualisieren ?

(Übrigens, während ich den Code des Ubuntu-Befehls initrd studierte, bemerkte ich, dass netconsoledas /initSkript eine spezielle Unterstützung bietet, die ich möglicherweise für meine Bedürfnisse verwenden kann, aber meine Frage ist allgemeiner und bezieht sich auf jedes andere benutzerdefinierte Modul .)

Blinddarm

Wie oben gesagt: Zuerst habe ich überprüft, ob die initrd in meinem System bereits das gewünschte Modul enthält (nämlich netconsole). Das ist wie:

# zcat /initrd.img | cpio --extract --verbose --list  | fgrep netconsole
-rw-r--r--   1 root     root        25372 Aug 31 20:59 lib/modules/3.19.0-28-generic/kernel/drivers/net/netconsole.ko
109504 blocks
# 

Außerdem habe ich überprüft, ob der benötigte Netzwerktreiber bereits vorhanden ist:

# ls -ld /sys/class/net/eth0/device/driver
lrwxrwxrwx 1 root root 0 Sep 21 15:34 /sys/class/net/eth0/device/driver -> ../../../../bus/pci/drivers/sky2
# zcat /initrd.img | cpio --extract --verbose --list  | fgrep sky2
-rw-r--r--   1 root     root        92948 Aug 31 20:49 lib/modules/3.19.0-28-generic/kernel/drivers/net/ethernet/marvell/sky2.ko
109504 blocks
# 

3
Zum späteren Nachschlagen ist lsinitramfsin initramfs-toolsungefähr dasselbe wie in dem zcat /initrd.img ..hier abgebildeten Befehl enthalten.
Timss

Antworten:


14

Ich habe in Ubuntu 14.04 herausgefunden, wie man Module zur initrd hinzufügt. Ich habe die Namen der Module zu / etc / initramfs-tools / modules hinzugefügt. Dadurch wurden die Module zur initrd-Datei hinzugefügt. Vergessen Sie nicht, die initrd-Datei (update-initramfs -u) zu aktualisieren, nachdem Sie Änderungen an / etc / initramfs-tools / modules vorgenommen haben.


Wie definieren Sie Modulnamen? Jetzt muss ich ahci.ko Modul hinzufügen? Was sollte also in dieser Datei enthalten sein?
Sandun Dhammika

@sandundhammikaahci
Ken Sharp

3

Ubuntu verwendet initramfs-tools (eine Einführung finden Sie unter man initramfs-tools), um initrd zu erstellen.

Um ein Modul netconsole in initrd hinzuzufügen und das Laden zu erzwingen, erstellen Sie eine Datei in / etc / initramfs-tools / hooks (dh / etc / initramfs-tools / hooks / netconsole) mit dem Inhalt:

#! / bin / sh
PREREQ = ""
prereqs ()
{
   Echo "$ PREREQ"
}

Fall $ 1 in
voraussetzungen)
   Voraussetzungen
   Ausfahrt 0
   ;;
esac

. / usr / share / initramfs-tools / hook-funktionen

force_load netconsole

und ausführbar machen. Dann renne:

update-initramfs -u

um die initrd des neuesten Kernels zu aktualisieren.


1
Aber gibt es nicht eine einfachere Möglichkeit, den Modulnamen anzufügen /conf/modules? Wo soll ich es hinstellen, damit ich es update-initramfs -ubenutzen kann?
imz - Ivan Zakharyaschev
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.