mkdir -p image/{dev,proc,sys,etc,mnt}
# dev: 裝置節點
# proc: 核心資訊虛擬檔案系統
# sys: sysfs 虛擬檔案系統 (裝置/驅動資訊)
# etc: 設定檔
# mnt: 根分區掛載點
mknod -m 600 image/dev/console c 5 1 # 主控台
mknod -m 600 image/dev/null c 1 3 # 空裝置
# 其他常用:tty1-4, zero, random, ptmx 等
# 綁定掛載宿主裝置/虛擬檔案系統 (僅測試用,正式 initramfs 不適用)
mount -v --bind /dev $INITRD/dev
mount -vt devpts devpts $INITRD/dev/pts
mount -vt tmpfs shm $INITRD/dev/shm
mount -vt proc proc $INITRD/proc
mount -vt sysfs sysfs $INITRD/sys
# 進入 chroot 環境
chroot $INITRD /bin/sh
# 測試指令:ls, fdisk -l, mdev -s 等
exit
# 清理掛載
umount $INITRD/dev/pts $INITRD/dev/shm $INITRD/dev $INITRD/proc $INITRD/sys
注意:chroot 測試使用宿主 /dev 綁定掛載,正式 initramfs 無宿主環境,必須自行管理裝置節點。
# 1. 掛載虛擬檔案系統 (mdev 依賴 sysfs)
mount -t proc proc /proc
mount -t sysfs sysfs /sys
# 2. 掃描 sysfs 建立所有裝置節點
mdev -s
# /dev 下將出現 sda, sda1, tty1-63, loop0-7, 等完整節點
mdev 讀取 /sys/class/, /sys/block/, /sys/devices/ 等 sysfs 介面,根據裝置類型/主次號自動建立節點。
#!/bin/sh
# image/init
mount -t proc proc /proc
mount -t sysfs sysfs /sys
mdev -s
/bin/sh # 進入互動 Shell,供除錯/手動操作
chmod +x image/init
touch image/etc/mdev.conf # 避免 mdev 讀取缺失報錯
cd image
find . | cpio -o -H newc | gzip > ../test-initramfs.cpio.gz
# QEMU 測試
qemu-system-x86_64 -kernel /boot/vmlinuz -initrd ../test-initramfs.cpio.gz -nographic
啟動後將進入 /bin/sh 互動環境,可執行 mount, fdisk, ls /dev 驗證裝置節點生成狀況。
mount /dev/sdaX /mnt; exec switch_root /mnt /sbin/init → 切換真實系統insmod/modprobe) → 支援更多硬體每一步皆可獨立驗證,降低除錯複雜度。