ฉันกำลังสร้างระบบลีนุกซ์ที่น้อยมากซึ่งเพิ่งประกอบไปด้วยเคอร์เนล (v4.1-rc5) และ initramfs ที่บรรจุด้วย busybox (v1.23.2) มันใช้งานได้ดีส่วนใหญ่ แต่ฉันสังเกตเห็นความแตกต่างในพฤติกรรมของการดำเนินการคำสั่งใน / init ไม่ว่าฉันจะใช้ initramfs ฝังตัวกับภายนอก
สคริปต์ / init คือ:
#!/bin/sh
dmesg -n 1
mount -t devtmpfs none /dev
mount -t sysfs none /sys
mount -t proc none /proc
echo "Welcome"
while true
do
setsid cttyhack /bin/sh
done
จากนั้นฉันจะตั้งค่าตัวเลือก CONFIG_INITRAMFS_SOURCE ในเคอร์เนล. config ไปยังไดเรกทอรีที่มีโฟลเดอร์ทั้งหมดสำหรับ initramfs หรือฉันเรียกใช้
find . | cpio -H newc -o | gzip > ../rootfs.cpio.gz
เพื่อสร้างมัน
เมื่อฉันคอมไพล์เคอร์เนลไม่ว่าจะมีหรือไม่มีชุด CONFIG_INITRAMFS_SOURCE ฉันก็จบลงด้วยสองตัวแปรในระบบของฉัน:
bzImage ที่มี initramfs ฝังอยู่
bzImage + rootfs.cpio.gz (ผู้เริ่มต้นภายนอก)
เมื่อฉันเริ่มใช้ qemu
qemu-system-x86_64 -enable-kvm -kernel bzImage
หรือ
qemu-system-x86_64 -enable-kvm -kernel bzImage -initrd rootfs.cpio.gz
ฉันได้รับพฤติกรรมที่แตกต่างดังต่อไปนี้:
ด้วยรุ่น 2 (เริ่มต้นภายนอก) ทุกอย่างทำงานได้ดี "ยินดีต้อนรับ" จะปรากฏขึ้นและฉันได้รับพรอมต์ อย่างไรก็ตามด้วยเวอร์ชัน 1 (initramfs แบบฝัง) ฉันได้รับคำเตือน
unable to open an initial console
"ยินดีต้อนรับ" ไม่ปรากฏขึ้นและฉันได้รับพรอมต์ของฉัน
เท่าที่ฉันเข้าใจกระบวนการ initramfs ทั้งสองรุ่นควรมีไฟล์เดียวกันตั้งแต่ฉันสร้างมัน (หรือมีเคอร์เนลสร้าง) จากโฟลเดอร์ที่เหมือนกัน
ฉันสงสัยว่าใครสามารถช่วยฉันอธิบายเกี่ยวกับพฤติกรรมนี้ได้บ้าง
* อัพเดท *
ตามที่ mikeserv กล่าวไว้ในความคิดเห็นเคอร์เนลมีการเริ่มต้นฝังตัวน้อยที่สุดต่อค่าเริ่มต้น สิ่งนี้ยังคงปรากฏเมื่อใช้อุปกรณ์ภายนอก แต่จะถูกเขียนทับหากคุณฝังของคุณเอง ฉันพบว่าขัดกับข้อกำหนดนี้แน่นอนไม่ว่างเปล่า แต่มีโฟลเดอร์ dev, โฟลเดอร์รากและอุปกรณ์ / dev / console อุปกรณ์นี้จะถูกใช้เมื่อใช้ initramfs ภายนอก แต่จะถูกเขียนทับหากคุณฝังของคุณเอง ดังนั้นคุณต้องรวมอุปกรณ์ / dev / console ในแหล่ง initramfs ของคุณmknod -m 622 initramfs_src/dev/console c 5 1
เมื่อทำการฝังของคุณเอง
ขอบคุณมากสำหรับ mikeserv, frostschutz และ JdeBP ที่ช่วยให้ฉันเข้าใจเรื่องนั้น!
/dev/console
ในตัวของคุณ? ฉันคิดว่าความแตกต่างอาจเกี่ยวกับผู้ที่บรรจุในสองกรณี