Параметры, передаваемые в командной строке ядра, не должны быть значимыми для ядра: в документации по параметрам ядра сказано
Ядро анализирует параметры из командной строки ядра до «-»; если он не распознает параметр и не содержит «.», параметр передается в init: параметры с «=» попадают в среду init, другие передаются в качестве аргументов командной строки для init. Все после «-» передается в качестве аргумента для init.
Это не относится к initи rootкоторые действительно являются параметрами ядра, и обрабатываются ядром. На них также может воздействовать пользовательское пространство, поскольку они появляются в /proc/cmdline. (Так, например, systemd учитывает quietпараметр ядра, чтобы уменьшить его вывод.)
Когда ядро загружается с помощью initramfs, rootпараметр не используется ядром напрямую, а initпараметр используется только в случае rdinitсбоя. initзапускается kernel_init, который работает следующим образом:
- если есть «команда выполнения ramdisk» (либо значение, указанное
rdinitв командной строке ядра, либо /init), которое доступно, ядро пытается выполнить это;
- если это терпит неудачу, и есть «команда выполнения» (значение, указанное
initв командной строке ядра), ядро пытается запустить это и паникует, если не может;
- в крайнем случае , ядро пытается бежать
/sbin/init, /etc/init, /bin/init, и /bin/sh; если ни один из них не может быть запущен, это паникует .
Когда есть initramfs, все это происходит там, и целевой том не монтируется ядром. То, что происходит после того, как ядро запускает первую initпрограмму (обычно /initскрипт в initramfs), зависит от программы, а не от ядра. Аргументы, которые не переданы init, все еще доступны, /proc/cmdlineесли /procфайловая система смонтирована.
ld-linux.soELF или слишком глубокий сценарий рекурсии или что-то просто не может быть выполнено?