OK, eu fiz muita pesquisa extensa e descobri o que estava errado. Vamos começar um por um:
- Quando usamos o esquema de inicialização
initramfs, o primeiro processo invocado pelo kernel é o script/init. O kernel nunca tentará executar/sbin/initdiretamente. -
/inité atribuído ao identificador do processo 1. Isso é muito importante! - O problema agora é que
/sbin/initsó pode ser iniciado comoPID 1, mas já estamos executando/initcomo PID 1. - A solução é executar a linha de comando
exec /sbin/initenquanto ainda estivermos dentro de/init. Dessa forma, o novo processo (que é/sbin/init) herdará o PID de seu pai (/initcom PID 1) e isso é tudo o que precisamos fazer.
O problema que experimentei com minha configuração inicial (veja a pergunta) deveu-se ao fato de que a última coisa que meu script /init faz é gerar novo /bin/sh processo que é designado a um novo PID. A partir deste ponto, é impossível rodar /sbin/init diretamente do console interativo, porque mesmo quando executamos a linha de comando exec /sbin/init , o melhor que conseguimos é atribuir o mesmo PID que já foi atribuído ao shell e este PID definitivamente não é PID 1.
Longa história curta - execute a linha de comando exec /sbin/init diretamente de /init e isso é tudo.