Důvod, proč switch_root nefunguje na příkazovém řádku je tento kód v 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();
}
Nejste PID 1, takže spadáte do této bb_show_usage . Z toho vyplývá, že switch_root příkaz ve vašem initramfs init skriptu by měl spustit switch_root s exec . tj.
exec switch_root ...
Další problém s chybami „nenalezeno“ je pravděpodobně proto, že sdílené knihovny potřebné pro spustitelné soubory nebyly nalezeny, protože kořenový souborový systém initramfs je nemá. Pokud můžete získat switch_root pracovat s exec , pak je pravděpodobné, že chyba „nenalezeno“ zmizí.