最小 根文件系統
(1)/dev/console(終端控制台, 提供標准輸入、標准輸出以及標准錯誤)
/dev/null (表示空設備終端, 所有寫到這個文件中的數據都會被丟棄掉。)
(2)init進程的程序(也就是busybox,因為init程序位於busybox中,已經完成)
(3)/etc/inittab(用於init進程讀取配置, 然后執行inittab里的指定應用程序)
(4)應用程序(被inittab配置文件調用的應用程序)
(5)C庫(glibc,被應用程序調用的C庫函數,比如:printf,strcmp,fopen等)
注:以下操作均是在/home目錄下操作,實操前請注意修改path
1、創建終端文件(/dev/console 和 /dev/null)
mkdir first_fs;cd first_fs
1.1查看pc /dev/console 和 /dev/null
ls /dev/console /dev/null -al
crw------- 1 root root 5, 1 Feb 21 18:53 /dev/console
crw-rw-rw- 1 root root 1, 3 Feb 12 22:08 /dev/null
1.2參照pc 創建字符設備/dev/console 和 /dev/null
mkdir dev;cd dev
sudo mknod console c 5 1 //創建console字符設備, 5:主設備號 1:次設備號
sudo mknod null c 1 3 //創建null 字符設備
cd -
2、busybox已做好,所以init進程的程序也就做好了
3、構造/etc/inittab
mkdir etc
touch etc/inittab
vi etc/inittab
輸入
console::askfirst:-/bin/sh //action值必須小寫 id可以寫成/dev/xx或xx
表示action= askfirst(每次啟動/bin/sh進程之前等待用戶按下enter鍵),然后指定/bin/sh的終端對應/dev/console字符設備
4、應用程序
因為是最小根文件系統,所以用戶程序可以先不制作。
5、安裝 glibc lib(cross compile lib)
mkdir lib
cd /home/gcc-3.4.5-glibc-2.3.6/arm-linux/lib //進入源目錄
cp *.so* /home/first_fs/lib -d //復制glibc庫到lib目錄(*:匹配符,-d:保持鏈接)
6、完善系統(內核虛擬文件系統proc制作)
它是通過proc虛擬文件系統掛接到proc目錄,然后當前進程的信息會以文件的形式保存到proc目錄
以ps命令為例:
mkdir proc //創建proc目錄
6.1 inittab配置文件中追加內容,避免手動mount掛載proc
方法1:
在inittab里追加內容:
::sysinit:/etc/init.d/rcS //將/etc/init.d/rcS腳本設置成系統的初始化文件
創建etc/init.d/rcS文件
mkdir -p etc/init.d
vi etc/init.d/rcS //添加一行命令(也可以添加其它命令)
mount -t proc none /proc //掛載proc(前提根文件系統有proc目錄)
sudo chmod +x etc/init.d/rcS //加上可執行權限使腳本rcS能夠執行命令
方法2:
除了使用在rcS中添加mount -t proc non /proc命令
也可以用mount -a 作用是加載文件/etc/fstab中配置的所有設備
它會依賴一個配置文件/etc/fstab
在inittab里追加內容:
::sysinit:/etc/init.d/rcS //將/etc/init.d/rcS腳本設置成系統的初始化文件
創建etc/init.d/rcS文件
mkdir -p etc/init.d
vi etc/init.d/rcS, 添加一行命令
mount -a //加載文件/etc/fstab中配置的所有設備
創建fstab文件
vi etc/fstab
輸入內容:
#device mount-point type options dump fsck order
proc /proc proc defaults 0 0
7、完善系統——使用udev自動在/dev下創建設備節點
在dev下只有2個字符設備(/dev/console /dev/null),如果大量增加設備的話,手動創建太麻煩,可以使用udev 自動創建/dev/設備節點。
busybox 中mdev 是udev的一個迷你版, 它主要的功能是管理/dev目錄底下的設備節點。它同時也是用來接替devfs及熱插拔的功能
7.1 創建sysfs、devpts要掛載的目錄
mkdir sys //創建sysfs要掛載的目錄
7.2、vi etc /fstab,添加sysfs、tmpfs掛載內容:
sysfs /sys sysfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
7.3 vi etc/init.d/rcS, 追加熱拔插命令和配置/dev設備,添加內容如下:
mount -a
mkdir /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s