首先,介紹下列幾個定義
根文件系統:系統啓動所必需的文件,如內核映像文件、內核啓動後運行的第一個程序(init)、給用戶提供操作界面的shell程序、應用程序所依賴的庫,這些必需、基本的文件合稱爲根文件系統。
掛接點或安裝點(mount point):Linux以樹狀結構管理所有目錄、文件,其他分區掛接在某個目錄上,這個目錄就稱爲掛接點或安裝點。
文件系統類型:分區上存儲文件時,要遵循一定的格式,這種格式稱爲文件系統類型。(fat16、fat32、ntfs、ext2、ext3、yaffs、jffs2等)(虛擬文件系統類型:proc、sysfs等),常常把文件系統類型簡稱爲“文件系統”。
FHS標準(Filesystem Hierarchy Standard,文件系統層次標準),定義了系統運行所需的最小文件、目錄的集合,並列舉了不遵循這些原則的例外情況及其原因。
/
|___ /bin 存放所有用戶可以使用的、基本的命令。必須與根文件系統在同一個分區。
|___ /sbin 存放系統命令,管理員才能使用。還可存放在/usr/sbin、/usr/local/sbin,啓動、修復系統
|___ /dev 存放設備文件。通過讀寫某個設備文件操作某個具體的外設。
|___ /etc 存放各種配置文件。
|___ /lib 存放共享庫和可加載模塊(驅動程序)。
|___ /home 用戶目錄,可選。
|___ /root 根用戶目錄。
|___ /usr 可存放在另一個分區,存放的是共享、只讀的程序和數據。只讀。
|___ /var 存放可變的數據,如spool(mail、news、打印機等用的),log文件、臨時文件。
|___ /proc 空目錄,作爲proc文件系統掛接點。(常在/etc/fstab進行設置自動掛接)
|___ /mnt 通常爲空目錄,臨時掛接某個文件系統的掛接點。/mnt/cdrom、/mnt/hda1
|___ /tmp 存放臨時文件,通常爲空目錄。
在構造根文件系統時使用動態鏈接的busybox,構造根文件時需要在/lib目錄下面放置glibc庫文件。
1、編譯安裝busybox
首先修改busybox根目錄下的Makefile,使用交叉編譯器。在189行的ARCH?=$(SUBARCH)修改爲ARCH?=arm,在164行的CROSS_COMPILE?=修改爲CROSS_COMPILE?=arm-linux-修改後執行make;make install,在busybox的根目錄下有_install文件夾,裏面就是我們所生成的文件和目錄如下所示:
由於每個版本的配置選項組織有所不同。不管怎樣,我們注意以下選項就行了:
1) Support for devfs
2) Build BusyBox as a static binary ( no shared libs ) //將busybox編譯成靜態鏈接
3) Do you want to build busybox with a Cross Compile?
(/usr/local/arm/3.3.2/bin/arm-linux-) Cross Compile prefix //指定交叉編譯器
4) init
5) Support reading an inittab file //支持init讀取/etc/inittab 配置文件
6) (X) ash選中ash //建立的rcS腳本才能執行
7)ash
8)cp cat ls mkdir mv //可執行命令工具的選擇,自己看着辦吧,需要用到的就選上
9) mount
10) umount
11) Support loopback mounts
12) Support for the old /etc/mtab file
13) insmod
14) Support version 2.2.x to 2.4.x Linux kernels
15) Support version 2.6.x Linux kernels
16) vi
17)don’t use user
以上內容必須選上,其他可按默認值;如果要支持其他功能,如網絡支持等,可按需選擇.
2、建立root根目錄root_nfs
進入root_nfs目錄,通過mkdir dev etc home lib mnt opt proc root sys tmp var web目錄
同時將 _install文件夾下的內容也放到root_nfs下,如下所示:
3、創建etc目錄下的文件
3.1 創建etc/inittab文件
init進程根據/etc/inittab文件來創建其他子進程,比如調用腳本文件配置ip地址、掛接其他文件系統,最後啓動shell等。
參考busybox源碼下面的"examples/inittab"文件,創建inittab代碼如下:
::sysinit:/etc/init.d/rcS//指定系統啓動的腳本
::respawn:/bin/sh//打開一個登錄會話
ttySAC0::askfirst:/bin/sh//打開一個無需登陸驗證的shell,以ttySAC0作爲控制檯
::ctrlaltdel:/sbin/reboot//指定當按下ctrl+alt+del時執行命令
::shutdown:/bin/umount -a -r//關機時執行的操作
3.2 創建etc/init.d/rcS文件
rcS文件,藉助啓動腳本設置各種程序開機後自動運行,也可進行其他系統設置,創建的文件內容如下:
#! /bin/sh
ifconfig eth0 up XXX.XXX.XXX.XXX
mount -a
mk /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s