Os parâmetros passados na linha de comando do kernel não precisam ser significativos para o kernel: a documentação dos parâmetros do kernel diz
O kernel analisa os parâmetros da linha de comando do kernel até “-”; se ele não reconhece um parâmetro e não contém um '.', o parâmetro é passado para o init: os parâmetros com '=' entram no ambiente do init, outros são passados como argumentos de linha de comando para o init. Tudo depois de "-" é passado como argumento para o init.
Isso não se aplica inite rootquais são realmente os parâmetros do kernel, e são tratados pelo kernel. Eles também podem ser usados pelo espaço do usuário, uma vez que aparecem no /proc/cmdline. (Assim, por exemplo, systemd leva quietem consideração o parâmetro do kernel para reduzir sua saída.)
Quando o kernel é inicializado com um initramfs, o rootparâmetro não é usado diretamente pelo kernel e o initparâmetro é usado apenas se rdinitfalhar. inita inicialização é tratada kernel_init, que funciona da seguinte maneira:
- se houver um "comando de execução do ramdisk" (o valor fornecido
rdinitna linha de comando do kernel ou /init) que seja acessível, o kernel tentará executá-lo;
- se isso falhar, e houver um "comando de execução" (o valor atribuído
initna linha de comando do kernel), o kernel tenta executá-lo e entra em pânico se não puder;
- como último recurso, o kernel tenta correr
/sbin/init, /etc/init, /bin/init, e /bin/sh; se nenhum desses puder ser executado, entra em pânico .
Quando há um initramfs, tudo isso acontece lá, e o volume de destino não é montado pelo kernel. O que acontece depois que o kernel executa o primeiro initprograma (normalmente, o /initscript no initramfs) depende do programa, não do kernel. Os argumentos para os quais não foram passados initainda estão disponíveis /proc/cmdlinese o /procsistema de arquivos estiver montado.
ld-linux.soELF ou um script muito profundo da recursão ou se algo não puder ser executado?