首頁 > 軟體

構建根檔案系統

2020-06-16 17:28:56

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的引數如下,當同時滿足多個時,用逗號分隔

引數名說明預設值
autonoauto 執行”mount -a”時是否自動掛載 auto
usernouser 允許普通使用者掛載還是只能root掛載 nouser
execnoexec 是否允許執行所掛載裝置上的程式 execc
ro 以唯讀方式掛載檔案系統  
rw 以讀寫方式掛載檔案系統  
syncasync 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

本文永久更新連結地址http://www.linuxidc.com/Linux/2016-11/137063.htm


IT145.com E-mail:sddin#qq.com