Ich versuche einen PXE-Boot-Kernel zu erstellen fürKlonenBereitstellen. Ich habe eine Netzwerkkarte, die einige Treiber benötigt, die nicht sofort funktionieren, bei einer Ubuntu-Installation jedoch einwandfrei funktionieren. Daher dachte ich, ich könnte einfach per PXE mit dem Kernel und initrd booten, von denen ich mein Ubuntu boote (da ich mich mit Linux nicht besonders gut auskenne, fällt mir keine bessere Möglichkeit ein, die Dinge zu erledigen; Versuche, meinen eigenen Kernel zu bauen, haben bisher keine funktionierende Netzwerkkarte hervorgebracht).
Ich verwende eine aktuelle 18.04.2-Installation. Also habe ich die Dateien kopiert:
vmlinuz-4.18.0-20-generic
und initrd.img-4.18.0-20-generic
an die richtigen Stellen meines PXE-Systems und versuche, von ihnen zu booten.
Dies ist die (ipxe) Boot-Befehlszeile (mit gekürzten Speicherorten der Bilder, um die Lesbarkeit zu verbessern):
kernel http://.../IpxeBoot?filename=vmlinuz-4.18.0-20-generic&type=kernel initrd=initrd.img-4.18.0-20-generic root=/dev/ram0 rw ramdisk_size=1560000 web=http://.../ USER_TOKEN= task=debug consoleblank=0
imgfetch --name initrd.img-4.18.0-20-generic http://.../IpxeBoot?filename=initrd.img-4.18.0-20-generic&type=bootimage
boot
Beim Booten werden eine Reihe relevanter Geräte initialisiert (einschließlich meiner Netzwerkkarte!), aber dann tritt der folgende Fehler auf:
gave up waiting for root file system device
ALERT! /dev/ram0 does not exist. Dropping to a shell!
ich habe gefundendiese Frage, was darauf hindeutet, dass ich während des Bootvorgangs irgendwo einen zusätzlichen Schritt ausführen muss, um das brd-Modul zu laden und das initrd in eine tatsächlich nutzbare RAM-Disk umzuwandeln. Es wurde vorgeschlagen add "brd rd_size=16777216" to /etc/initramfs/modules
, aber wenn ich die Datei initrd.img-4.18.0-20-generic (mit unmkinitramfs
) entpacke, gibt es kein /etc/initramfs. (Ich stelle auch fest, rd_nr=1 rd_size=1048576
dass ich wahrscheinlich nur ram0 erstellen sollte, anstatt ram0 bis ram15).
Wie überwinde ich den Boot-Fehler? Und wenn das Laden von brd erforderlich ist, wie mache ich das für diese Kernel-Version?
Antwort1
Die anfängliche Ramdisk (in Ihrem Fall ist es das ) wird während der Kernelinstallation in Ihrem System automatisch initrd.img-4.18.0-20-generic
vom Tool generiert .update-initramfs
update-initramfs
überprüft Ihr System und fügt die erforderlichen Module hinzu, initrd
um es während des Bootvorgangs zu laden.
Es gibt zwei Speicherorte, an denen Sie Ihre Skripte ablegen können initial ramdisk
:
/usr/share/initramfs-tools
Und
/etc/initramfs-tools
In Ihrem Fall müssen Sie diese Zeile einfügen /etc/initramfs-tools/modules
und ausführen
update-initramfs -u
für Ihren aktuellen Kernel.
Dann schauen Sie sich das Ergebnis an:
mkdir myinitramfs
cd myinitramfs
zcat /boot/initrd.img-4.18.0-20-generic | cpio --extract
cat conf/modules
Überprüfen Sie, ob Ihr Modul in der Liste enthalten ist