Параметри, передані в командному рядку ядра, не повинні мати значення для ядра: документація щодо параметрів ядра говорить
Ядро аналізує параметри з командного рядка ядра до “-”; якщо він не розпізнає параметр і не містить '.', параметр передається 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 або занадто глибокий рекурсійний сценарій, або що-небудь просто неможливо виконати?