ฉันกำลังผ่านการสอนเกี่ยวกับการตั้งค่า initramfsที่กำหนดเองซึ่งระบุว่า:
สิ่งเดียวที่ขาดหายไปคือ / init ไฟล์เรียกทำงานในรูทของ initramfs ที่ถูกเรียกใช้โดยเคอร์เนลเมื่อโหลดแล้ว เนื่องจาก sys-apps / busybox มีเชลล์ที่ใช้งานได้อย่างสมบูรณ์ซึ่งหมายความว่าคุณสามารถเขียนไบนารี / init ของคุณเป็นเชลล์สคริปต์แบบง่าย ๆ (แทนที่จะทำให้มันเป็นแอพพลิเคชั่นที่ซับซ้อนที่เขียนใน Assembler หรือ C ที่คุณต้องรวบรวม)
และให้ตัวอย่างของ init เป็นเชลล์สคริปต์ที่ขึ้นต้นด้วย #!/bin/busybox sh
จนถึงตอนนี้ฉันอยู่ภายใต้การแสดงผลที่ init เป็นกระบวนการหลักที่เปิดตัวและกระบวนการพื้นที่ผู้ใช้อื่น ๆ ทั้งหมดเป็นลูกของ init ในที่สุด อย่างไรก็ตามในตัวอย่างที่กำหนดกระบวนการแรกนั้นจริง ๆ แล้วbin/busybox/ sh
ซึ่ง init นั้นจะเกิดขึ้นในภายหลัง
นี่เป็นการรบกวนที่ถูกต้องหรือไม่? ตัวอย่างเช่นถ้าฉันมีล่ามที่มีอยู่ ณ ตอนนั้นฉันสามารถเขียน init เป็นสคริปต์ Python ได้หรือไม่?
/
ไม่ได้หายไปในอากาศบาง - มันคือการติดตั้งมากกว่า( แต่มักจะเนื้อหาของมันจะถูกลบออกทั้งหมดก่อนก็คือการบันทึกความทรงจำ) มันเป็นยังคงมีswitch_root
syscall ทำอะไรswitchroot
- ซึ่งเป็นสิ่งที่เคอร์เนล devs จัดไว้ให้เมื่อพวกเขาเปลี่ยนกระบวนการบูตในเคอร์เนล 2.6 บางสิ่งบางอย่างเพื่อต้องการ initramfs มันเป็นเคอร์เนลที่ทำเวทมนต์