在上一節分析出制作一個最小的根文件系統至少需要:
(1)/dev/console(終端控制台, 提供標准輸入、標准輸出以及標准錯誤)
/dev/null (為空的話就是/dev/null, 所有寫到這個文件中的數據都會被丟棄掉。)
(2)init進程的程序(也就是busybox,因為init程序位於busybox中)
(3)/etc/inittab(用於init進程讀取配置, 然后執行inittab里的指定應用程序)
(4)應用程序(被inittab配置文件調用的應用程序)
(5)C庫(glibc,被應用程序調用的C庫函數,比如:printf,strcmp,fopen等)
本節目的:
編譯配置busybox (因為制作最小的根文件系統需要init進程,以及運行各種命令等)
1 編譯配置busybox
1.1 首先將busybox源碼(位於資料光盤/system)放在linux中/work/system下
cd /work/system
tar -xjf busybox-1.7.0.tar.bz2
解壓后,cd busybox-1.7.0 進入busybox-1.7.0目錄
2 查看busybox-1.7.0/INSTALL文件,讓我們知道如何編譯配置它,如下圖:
得出:
make menuconfig //通過配置菜單配置.config文件
make //編譯busybox可執行文件
make install //直接安裝,該命令會安裝到PC機中,將破壞系統
make CONFIG_PREFIX=/path/from/root install //安裝到指定目錄/path/from/root下
3 所以首先make menuconfig 配置.config,如下圖:
3.1 在Library Tuning(庫調整)子菜單中設置按tab鍵補齊,如下圖:
3.2 取消靜態連接,如下圖:
因為使用庫函數glibc時,如果靜態編譯busybox,會出現很多警告信息:
庫函數glibc需要放在/lib目錄下
3.3 選擇tar命令:
3.4選擇insmod/rmod/lsmod命令,支持2.6.x內核:
3.5 支持mdev(並支持medv.conf和熱拔插),選擇mount/umount命令(並支持NFS文件系統)
3.6 選擇ifconfig命令
4 通過make直接編譯
make編譯后發現有錯:
原因是 busybox-1.7.0頂層目錄下Makefile沒有使用交叉編譯”arm-linux-”
在Makefile中添加”arm-linux-”:
然后重新make編譯即可
5 安裝到指定目錄
mkdir -p /work/nfs_root/mini_fs //先創建指定目錄
make CONFIG_PREFIX=/work/nfs_root/mini_fs install //安裝到指定目錄
cd /work/nfs_root/mini_fs 進入安裝的目錄:
從上圖看出共有3個目錄和1個linuxrc文件,其中
bin包含用戶工具,包括了大部分命令,該子目錄下所有文件指向busybox
sbin目錄包含操作系統工具,同樣也指向busybox。
linuxrc是一個鏈接文件,指向busybox。
busybox做好后,下一節就開始構建根文件系統