busybox init進程和/etc/inittab關係

嵌入式系統下的 linux 啓動過程一般是:
1. 在 bootloader 中制定各種要求傳給 linux 內核的參數,製作 ramdisk 或 ramfs 文件系統,並在開機後首先 mount 上,該文件系統主要負責包含啓動運行的配置文件,嵌入式系統主要是/etc/inittab 和/etc/rcS 文件;
2. 在 init 進程啓動後,進程首先執行/etc/inittab 文件,該文件語法下面介紹,一般包括三項內容就可
以啓動。
busybox 的 init 完成系統的初始化工作,關機前的工作等等,我們知道在 Linux 的內核被載入之後,機器就把控制權轉交給內核, linux 的內核啓動之後,做了一些工作,然後找到根文件系統裏面的 init 程序,並執行它, BusyBox 的 init 進程會依次進行以下工作:
1. 爲 init 設置信號處理過程
2. 初始化控制檯
3. 剖析/etc/inittab 文件
4. 執行系統初始化命令行,缺省情況下會使用/etc/init.d/rcS
5. 執行所有導致 init 暫停的 inittab 命令(動作類型: wait)
6. 執行所有僅執行一次的 inittab(動作類型: once)
一旦完成以上工作, init 進程便會循環執行以下進程:
1. 執行所有終止時必須重新啓動的 inittab 命令(動作類型: respawn)
2. 執行所有終止時必須重新啓動但啓動前必須詢問用戶的 inittab 命令(動作類型: askfirst)
初始化控制檯之後, BusyBox 會檢查/etc/inittab 文件是否存在,如果此文件不存在, BusyBox 會使用缺省的 inittab 配置,它主要爲系統重引導,系統掛起以及 init 重啓動設置缺省的動作,此外它還會爲四個虛擬控制檯(tty1 到 tty4)設置啓動 shell 的動作。如果未建立這些設備文件, BusyBox 會報錯。
inittab 文件中每一行的格式如下所示:(busybox 的根目錄下的 example 文件夾下有詳盡的 inittab 文件範例)

id:runlevel:action:process


儘管此格式與傳統的 Sytem V init 類似,但是, id 在 BusyBox 的 init 中具有不同的意義。對 BusyBox 而
言, id 用來指定啓動進程的控制 tty。如果所啓動的進程並不是可以交互的 shell,例如 BusyBox 的 sh(ash),
應該會有個控制 tty,如果控制 tty 不存在, Busybox 的 sh 會報錯。 BusyBox 將會完全忽略 runlevel 字段,所
以空着它就行了, 保留它大概是爲了和傳統的 Sytem V init 保持一致的格式吧。 process 字段用來指定所執
行程式的路徑,包括命令行選項。 action 字段用來指定下面表中 8 個可應用到 process 的動作之一。
 

動作 結果
sysinit 爲init提供初始化命令行的路徑,一般是rcS路徑
respawn 每當相應的進程終止時就會從新啓動
askfirs 類似 respawn,不過它的主要用途是減少系統上執行的終端應用程序的數量。它將會促使 init在控制檯上顯示“Please press Enter to active this console”的信息,並在重新啓動之前等待用戶按下 enter 鍵
wait 告訴 init 必須等到相應的進程完成之後才能繼續執行
once 僅執行相應的進程一次,而且不會等待它完成
ctratldel 當按下 Ctrl+Alt+Delete 組合鍵時,執行相應的進程
shutdown 當系統關機時,執行相應的進程
restart 當 init 重新啓動時,執行相應的進程,通常此處所執行的進程就是 init 本身

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章