基本製作過程
General 更新 2024年11月25日
建立目錄和檔案
在imgae目錄下建立dev, proc , sys , etc ,mnt 四個目錄
建立如下兩個裝置檔案
mknod -m 600 dev/console c 5 1
mknod -m 600 dev/null c 1 3
proc,dev,sys都是用來mount核心資訊的。
etc是用來放配製檔案的。
更詳細請看“Linux 目錄詳解”
測試一下
載入核心資訊
首先要載入核心資訊。其中$INITRD為一環境變數,儲存映象資料夾的位置如“/initrd”。
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 $INITRD /bin/sh
命令進入busybox的環境。出現shell的命令提示符,可以試著輸入幾個命令,看看執行結果。例如,輸入 fdisk -l 命令看看是否能顯示
mdev自動生成/dev下的裝置檔案
上節用chroot方法試驗busybox時,為了簡單,是用“繫結”的方式把主機的/dev中的裝置檔案對映到image目錄下的dev目錄。在initramfs上,這種方法顯然不能使用。
生成系統的裝置檔案,現在通常都是用udev動態生成,而initramfs為了做到通用,動態生成的要求是必須的。在busybox中有一個mdev命令,就是用來動態生成裝置檔案,填充到/dev目錄的。
在系統啟動時,用
mdev -s
命令可以根據核心的sysfs檔案系統在/dev目錄中自動生成相應的裝置檔案。
命令執行前,需要先掛載核心的proc和sysfs虛擬檔案系統。
最簡init檔案
在image目錄下寫一個最簡單的init指令碼,這也預設我們是用initramfs製作映象了,linuxrc檔案可以刪除,只有在製作initrd時都用它。
#!/bin/sh
mount -t proc proc /proc
mount -t sysfs sysfs /sys
mdev -s
/bin/sh
系統最終會啟動到一個shell互動環境,和測試一下中類似。前提是dev,proc,sys目錄已經建立。
為init檔案設定可執行許可權,當前目錄為映象根目錄:
chmod +x init
有些busybox配置中,mdev命令需要讀取/etc/mdev.conf檔案,為了避免出錯資訊,我們建立一個空檔案。
touch etc/mdev.conf
mdev.conf檔案是用 來控制mdev生成的裝置檔案的讀寫許可權的,在這裡我們不需要對裝置檔案設定特別的許可權,就使用mdev預設的660的許可權設定。有關mdev的裝置檔案 許可權的控制詳細資訊,可參考busybox原始碼樹docs目錄下的mdev.txt檔案。
如何最簡核心配置