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