CentOS 7.6 – Initrd.img lädt aktualisierten Treiber nicht

CentOS 7.6 – Initrd.img lädt aktualisierten Treiber nicht

Ich habe versucht, beim Booten des Centos 7.6 ISO eine aktualisierte initrd.img-Datei mit aktualisierten Treibern zu laden, jedoch scheint immer noch der alte Treiber geladen zu werden, obwohl ich den Treiber ersetzt habe.

Schritte gemacht:

Extrahiertes Initrd-Image aus ISO:

  1. Gemountetes CentOS 7.6 ISO
  2. Die Datei initrd.img wurde von isolinux/initrd.img in den temporären Ordner (/tmp/image) kopiert.
  3. Ein neuer Ordner wurde unter /tmp/image/initrd erstellt.
  4. Extrahieren Sie die Datei initrd.img aus dem Ordner durch Ausführen
xz -dc < ../initrd.img | cpio -idmv

Die Treiberdatei e1000e.ko.kz wurde erstellt

  1. Laden Sie den neuesten e1000e NIC-Treiber von der Intel-Website herunter: e1000e Download-Link
  2. Die Tar-Datei wurde extrahiert
    tar xvf e1000e-3.6.0.tar.gz
    
  3. Erstellen Sie den Quellcode und stellen Sie sicher, dass die GCC- und Kernel-Devel-Bibliotheken installiert sind.

    cd e1000e-3.6.0/src
    make install
    

    Hinweis: Dieser Treiber wurde in einer Linux-Umgebung kompiliert, die mit CentOS 7.6 ISO erstellt wurde.

  4. Kopieren Sie die erstellte Datei e1000e.ko in den temporären Ordner (/tmp/image).

  5. Komprimieren Sie es in das .kz-Format

    xz -k e1000e.ko
    

    Ersetzen Sie den alten Treiber und packen Sie das initrd.img-Image neu

  6. Kopieren Sie die komprimierte Treiberdatei, um den vorhandenen Treiber zu ersetzen

    cp e1000e.ko.kz /tmp/image/initrd/files/lib/modules/3.10.0.957.el7.x86_64/kernel/drivers/net/ethernet/intel/e1000e
    
  7. Packen Sie die Datei initrd.img neu
    cd /tmp/image/initrd
    find . 2>/dev/null | cpio -c -o | xz -9 --check=crc32 > ../initrd.img
    
  8. Kopieren Sie die generierte Datei initrd.img zurück in das ISO unter isolinux/initrd.img und images/pxe/initrd.img

erwartete Ergebnisse

Nachdem ich den Treiber in initrd.img aktualisiert und in das ISO kopiert habe, erwarte ich, dass der neue Treiber (e1000e Version 3.6.0) geladen wird, nachdem der Bootvorgang der ISO-Installation abgeschlossen ist.

Tatsächliche Ergebnisse

Ich kann vom ISO booten und Centos 7 davon installieren. Nach der Installation von Centos muss ich jedoch den folgenden Befehl ausführen:

modinfo e1000e

Gibt die alte Version des Treibers zurück, die sich ursprünglich auf initrd.img befand (e1000e Version 3.2.6), und nicht Version 3.6.0, die ich auf das initrd.img-Image geladen habe.

Ich bin nicht ganz sicher, was ich falsch mache, ob ich den Treiber falsch erstelle, den Treiber falsch lade, die Datei initrd.img falsch erstelle oder etwas anderes.

Ich wäre für jede Hilfe dankbar, da ich in den letzten Tagen versucht habe, dies zum Laufen zu bringen. Dies ist mein erster Beitrag, also lassen Sie mich wissen, wenn ich etwas falsch mache oder wenn zusätzliche Informationen erforderlich sind, um dieses Problem zu beheben.

Prost

Antwort1

Habe das gerade herausgefunden. Die Treiber befinden sich auch in LiveOS/squashfs.img rootfs.img. Die initrd-Module werden also mit rootfs.img überlagert. Dies geschieht während des Installationsvorgangs, aber sobald das installierte System bootet, kommt der Treiber von einem installierten RPM (in diesem Fall wahrscheinlich dem Kernel), sodass initrd nichts mehr damit zu tun hat. Sie müssten dieses RPM aktualisieren oder ein separates RPM mit dem aktualisierten Treiber hinzufügen, damit es auf dem installierten System funktioniert.

verwandte Informationen