Parameter yang dikirimkan pada baris perintah kernel tidak harus bermakna untuk kernel: dokumentasi parameter kernel mengatakan
Kernel mem-parsing parameter dari baris perintah kernel hingga “-”; jika tidak mengenali parameter dan tidak mengandung '.', parameter akan diteruskan ke init: parameter dengan '=' masuk ke lingkungan init, yang lain dilewatkan sebagai argumen baris perintah untuk init. Semuanya setelah "-" diteruskan sebagai argumen untuk init.
Ini tidak berlaku untuk initdan rootyang benar-benar parameter kernel, dan ditangani oleh kernel. Mereka juga dapat ditindaklanjuti oleh ruang pengguna, karena mereka muncul di /proc/cmdline. (Jadi misalnya systemd memperhitungkan quietparameter kernel untuk mengurangi outputnya.)
Ketika kernel di-boot dengan initramfs, rootparameter tidak digunakan oleh kernel secara langsung, dan initparameter hanya digunakan jika rdinitgagal. initstartup ditangani kernel_init, yang berfungsi sebagai berikut:
- jika ada "ramdisk execute command" (baik nilai yang diberikan
rdinitpada baris perintah kernel, atau /init) yang dapat diakses, kernel mencoba menjalankannya;
- jika gagal, dan ada "eksekusi perintah" (nilai yang diberikan
initpada baris perintah kernel), kernel mencoba untuk menjalankannya, dan panik jika tidak bisa;
- sebagai upaya terakhir, kernel mencoba untuk menjalankan
/sbin/init, /etc/init, /bin/init, dan /bin/sh; jika tidak ada yang bisa dijalankan, itu panik .
Ketika ada initramfs, semua ini terjadi di sana, dan volume target tidak di-mount oleh kernel. Apa yang terjadi setelah kernel menjalankan initprogram pertama (biasanya, /initskrip di initramfs) bergantung pada program, bukan kernel. Argumen yang tidak diteruskan initmasih tersedia /proc/cmdlinejika /procsistem file dipasang.
ld-linux.soELF atau skrip terlalu rekursi atau apa saja yang tidak dapat dijalankan?