萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

initramfs 基礎構建流程:目錄樹、裝置節點、chroot 測試、mdev 自動掛載

基礎目錄樹建立


mkdir -p image/{dev,proc,sys,etc,mnt}
# dev: 裝置節點
# proc: 核心資訊虛擬檔案系統
# sys: sysfs 虛擬檔案系統 (裝置/驅動資訊)
# etc: 設定檔
# mnt: 根分區掛載點

建立基礎裝置節點 (需 root)


mknod -m 600 image/dev/console c 5 1   # 主控台
mknod -m 600 image/dev/null c 1 3      # 空裝置
# 其他常用:tty1-4, zero, random, ptmx 等

chroot 測試 BusyBox 環境


# 綁定掛載宿主裝置/虛擬檔案系統 (僅測試用,正式 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 無宿主環境,必須自行管理裝置節點。

mdev 自動生成裝置節點 (正式流程)


# 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 介面,根據裝置類型/主次號自動建立節點。

最簡 init 腳本


#!/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 驗證裝置節點生成狀況。

遞進式開發路徑

  1. 最簡 init → 互動 Shell (本文)
  2. 加入 mount /dev/sdaX /mnt; exec switch_root /mnt /sbin/init → 切換真實系統
  3. 加入核心模組載入 (insmod/modprobe) → 支援更多硬體
  4. 整合 udev 替代 mdev → 完整裝置管理、持久命名、規則引擎
  5. 加入網路、加密、LVM、RAID、iSCSI 等進階功能 → 完整發行版級 initramfs

每一步皆可獨立驗證,降低除錯複雜度。

copyright © 萬盛學電腦網 all rights reserved