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.