Der Grund dafür, dass switch_root
funktioniert nicht auf der Kommandozeile ist dieser Code in busybox:
if (st.st_dev == rootdev || getpid() != 1) {
// Show usage, it says new root must be a mountpoint
// and we must be PID 1
bb_show_usage();
}
Sie sind nicht PID 1, also fallen Sie in diese bb_show_usage
durch . Die Implikation ist, dass switch_root
Der Befehl in Ihrem initramfs-Init-Skript sollte switch_root
ausführen mit exec
. d.h.
exec switch_root ...
Das andere Problem mit Ihren „nicht gefunden“-Fehlern liegt wahrscheinlich daran, dass die gemeinsam genutzten Bibliotheken, die von den ausführbaren Dateien benötigt werden, nicht gefunden werden, weil das initramfs-Root-Dateisystem sie nicht hat. Wenn Sie switch_root
bekommen können um mit exec
zu arbeiten , dann wird der "nicht gefunden"-Fehler wahrscheinlich verschwinden.