พารามิเตอร์ที่ส่งผ่านบรรทัดคำสั่งเคอร์เนลไม่จำเป็นต้องมีความหมายสำหรับเคอร์เนล: เอกสารของพารามิเตอร์เคอร์เนลบอกว่า
เคอร์เนลแยกวิเคราะห์พารามิเตอร์จากบรรทัดคำสั่งเคอร์เนลจนถึง“ -”; หากไม่รู้จักพารามิเตอร์และไม่มี '.' พารามิเตอร์จะถูกส่งผ่านไปยัง 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เอลฟ์หรือสคริปต์ซ้ำลึกเกินไปหรืออะไรก็ตามที่ไม่สามารถเอ็กซีคิ้วท์ได้?