Da der MIPS-Port von kexec
den --initrd
Parameter nicht unterstützt, suche ich nach Problemumgehungen, um die Funktion zu imitieren. Laut Linux / MIPS-Wiki unterstützen MIPS-Kernel rd_start
und rd_size
Kernel-Befehlszeilenargumente zur Angabe des Speicherorts von initrd. Ich frage mich, ob es möglich ist, initrd in den Speicher zu laden und es an die Kernel-Parameter weiterzugeben.
Wenn es möglich ist, wo im Speicher sollte ich die Datei laden und wie lade ich sie? Ich dachte darüber nach, den Kernel und die initrd in eine Datei zu verketten, aber wie erhalte ich die Adresse, kexec
unter der der neue Kernel geladen wurde?
Ein bisschen Hintergrundwissen: Ich habe einen WNDR3700- WLAN-Router, auf dem OpenWrt mit einem kexec-Kernel ausgeführt wird. Mein Ziel ist es, einen Vanille OpenWrt-Kernel zu booten, der auf USB gespeichert ist, um Upgrades zu vereinfachen. Das Problem ist (derzeit), dass die USB-Module nicht in den Kernel integriert sind, sondern als ladbare Kernel-Module bereitgestellt werden. Ich kann mit einem eingebetteten initramfs von usb auf einen anderen Kernel booten, aber mit einem initramfs muss ich den Kernel kompilieren, nicht wahr? Könnte ich initramfs / initrd alternativ in eine vorhandene Kernel-Binär- / Elf-Datei (ohne Ramdisk) einbetten und ein erneutes Kompilieren des Kernels vermeiden?
Wenn Sie die USB-Module offensichtlich in den Kernel kompilieren möchten, müssen Sie den Kernel neu kompilieren. Dies ist also keine Option.
cat /proc/mtd
sagt folgendes für meinen aktuellen, modifizierten Kernel mit einer eingebauten initrd, die mit kexec gebootet wird:mtd0: 00800000 00010000 "spi0.0"
und sonst nichts. Wenn ich mir den/proc/mtd
aus dem vorherigen Kernel anschaue, wird natürlich das reale Layout angezeigt.