พารามิเตอร์ที่ส่งผ่านบรรทัดคำสั่งเคอร์เนลไม่จำเป็นต้องมีความหมายสำหรับเคอร์เนล: เอกสารของพารามิเตอร์เคอร์เนลบอกว่า
เคอร์เนลแยกวิเคราะห์พารามิเตอร์จากบรรทัดคำสั่งเคอร์เนลจนถึง“ -”; หากไม่รู้จักพารามิเตอร์และไม่มี '.' พารามิเตอร์จะถูกส่งผ่านไปยัง init: พารามิเตอร์ที่มี '=' เข้าสู่สภาพแวดล้อมของ init ส่วนอื่น ๆ จะถูกส่งผ่านเป็นอาร์กิวเมนต์บรรทัดคำสั่งเพื่อเริ่มต้น ทุกอย่างหลังจาก“ -” ถูกส่งผ่านเป็นอาร์กิวเมนต์เพื่อเริ่มต้น
สิ่งนี้ใช้ไม่ได้init
และroot
สิ่งใดที่เป็นพารามิเตอร์ของเคอร์เนลและได้รับการจัดการโดยเคอร์เนล พวกเขายังสามารถดำเนินการใด ๆ /proc/cmdline
โดยผู้ใช้พื้นที่ตั้งแต่พวกเขาปรากฏใน (ตัวอย่างเช่น systemd ใช้quiet
พารามิเตอร์เคอร์เนลเข้าบัญชีเพื่อลดเอาต์พุต)
เมื่อเคอร์เนลถูกบูทด้วย initramfs root
พารามิเตอร์จะไม่ถูกใช้โดยเคอร์เนลโดยตรงและinit
พารามิเตอร์จะถูกใช้หากrdinit
ล้มเหลวเท่านั้น init
มีการจัดการเริ่มต้นในkernel_init
ซึ่งทำงานดังนี้:
- หากมีคำสั่ง“ ramdisk execute” (ทั้งค่าที่กำหนดให้
rdinit
กับบรรทัดคำสั่งเคอร์เนลหรือ/init
) ซึ่งสามารถเข้าถึงได้เคอร์เนลจะพยายามเรียกใช้งานนั้น
- หากสิ่งนั้นล้มเหลวและมี“ รันคำสั่ง” (ค่าที่กำหนดให้
init
กับบรรทัดคำสั่งเคอร์เนล) เคอร์เนลพยายามเรียกใช้นั้นและตื่นตระหนกหากไม่สามารถทำได้
- เป็นที่พึ่งสุดท้ายเคอร์เนลพยายามที่จะเรียก
/sbin/init
, /etc/init
, /bin/init
และ/bin/sh
; ถ้าไม่มีผู้ที่สามารถทำงานก็ตื่นตกใจ
เมื่อมีการเริ่มต้นทั้งหมดนี้เกิดขึ้นที่นั่นและปริมาณเป้าหมายไม่ได้ถูกเมานท์โดยเคอร์เนล เกิดอะไรขึ้นหลังจากเคอร์เนลรันinit
โปรแกรมแรก(โดยปกติแล้ว/init
สคริปต์ใน initramfs) จะขึ้นอยู่กับโปรแกรมไม่ใช่เคอร์เนล อาร์กิวเมนต์ที่ไม่ถูกส่งไปinit
ยังจะยังคงใช้ได้/proc/cmdline
หาก/proc
ระบบไฟล์ถูกเมาท์
ld-linux.so
เอลฟ์หรือสคริปต์ซ้ำลึกเกินไปหรืออะไรก็ตามที่ไม่สามารถเอ็กซีคิ้วท์ได้?