Il motivo per cui switch_root
non funziona sulla riga di comando è questo codice 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();
}
Non sei PID 1, quindi stai cadendo in questo bb_show_usage
. L'implicazione è che il switch_root
Il comando nello script init initramfs dovrebbe eseguire switch_root
con exec
. cioè
exec switch_root ...
L'altro problema con i tuoi errori "non trovato" è probabilmente dovuto al fatto che le librerie condivise necessarie per gli eseguibili non vengono trovate, perché il filesystem root initramfs non le ha. Se puoi ottenere switch_root
per lavorare con exec
, è probabile che l'errore "non trovato" scompaia.