busybox
wget http://www.busybox.net/downloads/busybox-1.20.2.tar.bz2
make defconfig
make CROSS_COMPILE=arm-linux-gnueabi-
make install
編譯完install後會默認安裝在busybox源碼目錄下_install目錄內,但是此文件系統並不完整,只有四個目錄
root-># ls
bin linuxrc sbin usr
雖然可以直接用這個簡易的文件系統啓動內核,但是功能在以後的使用過程中會很受限制。
構建/etc目錄及幾個關鍵文件
/etc/inittab文件
::sysinit:/etc/init.d/rcS
ttySAC0::askfirst:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
格式:<id>:<runlevels>:<action>:<process>例如上邊
id:表示輸出的終端,省略的話表示輸出到init終端
runlevels:運行等級,busybox中沒有意義,省略
action:如下
process:要執行的程序,“-”開頭表示這個程序是交互的。
action名稱 | 執行條件 | 說明 |
---|---|---|
sysinit | 系統啓動後最先執行 | 只執行一次,init進程等待它執行結束後才執行其他進程 |
wait | 系統執行完sysinit進程後 | 同上 |
once | 系統執行完wait進程後 | 只執行一次,但不等待它結束 |
respawn | 系統執行完once進程後 | init進程檢測,發現子進程退出後,重新啓用它 |
askfirst | 系統執行完respawn進程後 | 與respawn類似,但是先輸出“Please press Enter to active this console”,等用戶鍵入回車後才啓動 |
shutdown | 系統關機時 | 重啓,關機命令執行時 |
restart | Busybox中配置CONFIG_FEATURE_USE_INITTAB,並且init進程接收到SIGHUP信號時 | 先重新讀取、解析/etc/inittab文件再執行restart |
ctrlaltdel | 按下ctrl+alt+del組合鍵時 |
創建/etc/ini.d/rcS文件
#!/bin/sh
ifconfig eth0 192.168.1.222
mount -a #這個命令會自動讀取/etc/fstab文件並按要求掛載制定的文件系統
mkdir /dev/pts
mount -t devpts devpts /dev/pts //用來支持外部網連接(telnet)
echo /sbin/mdev > /proc/sys/kernel/hotplug #最後的兩行是爲了mdev能夠以守護進程的形式運行,當驅動程序插入內核的時候能夠自動創建設備文件節點。
mdev -s
此外還要修改此文件的權限,使它能夠運行。
創建/etc/fstab文件
#device mount-point type options dump fsck order
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0 //mdev需要
tmpfs /dev tmpfs defaults 0 0 //mdev需要
這裏把/dev目錄掛載上tmpfs文件系統,是爲了mdev(pc機上是udev)程序能夠動態的創建刪除設備文件。
oprions的參數如下,當同時滿足多個時,用逗號分隔
參數名 | 說明 | 默認值 |
---|---|---|
auto\noauto | 執行”mount -a”時是否自動掛載 | auto |
user\nouser | 允許普通用戶掛載還是隻能root掛載 | nouser |
exec\noexec | 是否允許執行所掛載設備上的程序 | execc |
ro | 以只讀方式掛載文件系統 | |
rw | 以讀寫方式掛載文件系統 | |
sync\async | sync:修改文件時會同步寫入設備 | sync |
defaults | rw,suid,,dev,exec,auto,nouser,async的組合 |
dump是一個用來備份文件的程序,fsck是一個用來檢查磁盤的程序
dump根據dump字段的值決定是否需要備份此文件系統,如果沒有這個字段或者這個字段爲0,則dump忽略此文件系統
fsck程序根據fsck order字段決定檢查磁盤的順序,一般將根文件系統設置爲1,其他文件系統設置爲2,如果爲0,則fsck程序忽略這個文件系統。
總結
先解析/etc/inittab文件,然後執行/etc/init.d/rcS腳本,並根據/etc/fatab文件掛載其他文件系統。
補全其他幾個目錄
mkdir -p lib lib/modules dev proc tmp sys