標籤:
原文網址:http://blog.csdn.net/shuaishuai80/article/details/6202482
一、inittab檔案背景
(1)init進程的作用
使用uboot下載Linux核心時,環境變數bootargs決定了kernel向根檔案系統傳遞的參數,這些參數包括
bootargs=noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0
<1>root:指定了根檔案系統在Flash分區中的位置
<2>console:指定了核心啟動後首選的控制台.
<3>init:指定了Linux核心啟動完畢後調用的第一個、也是唯一的一個使用者態進程,即進程號為1的進程.其中,參數"init=linuxrc"非常重要.由於init進程是kernel啟動後的第一個、也是唯一的一個使用者態進程,使用者的許多應用程式,比如Mplayer、Qt、Boa都由該進程來啟動,換句話說,init進程是所有進程的發起者.
(2)linuxrc檔案的作用
<1>在嵌入式Linux中,init進程的執行程式通常是二選其一.這兩個執行程式分別是/sbin/init程式,或者是Busybox產生的linuxrc程式.init進程的作用即這個程式的功能.init進程具體運行哪個程式,則由uboot的環境變數bootargs決定,即init=/linuxrc.通常採用命令列參數"init=xxxx"指定某個程式作為init進程運行.比如,init=linuxrc.可以說,linuxrc程式的作用就是init進程的作用.
<2>linuxrc是一個程式,它的執行流程如下所示.其中,如何解析inittab檔案可以由使用者設定,其它兩個一般都不會修改.
1、設定訊號處理函數.
2、初始化控制台.
3、解析inittab檔案.
(3)/etc/inittab檔案的作用
從上可知,init進程,或者說linuxrc程式最後會解析inittab檔案.inittab,可以理解為init table(初始化表),它只是一個普通檔案,但系統會根據/etc/inittab的內容啟動相關進程或指令碼.
二、inittab檔案格式
(1)如果存在/etc/inittab檔案,Busybox init程式解析它,然後按照它的指示建立各種子進程,否則使用預設的配置建立子進程.
(2)/etc/inittab檔案中每個條目用來定義一個子進程,並確定它的啟動方法,格式如下
<id> : <runlevels> : <action> : <process>
<1>id :表示這個子進程要使用的控制台,如果省略,則使用與init進程一樣的控制台.
<2>runlevels:這個欄位沒有意義,可以省略。在linux有意義.
<3>action:表示init進程如何控制這個子進程,具體取值見下表.
<4>process:要執行的程式,它可以是可執行程式,也可以是指令碼.如果process欄位前有“-”字元,這個程式被稱為“互動的”.
【
attention】action取值
名稱 執行條件 說明
sysinit 系統啟動後最先執行 指定初始化指令碼路徑,只執行一次,init進程等待它結束才繼續執行其它動作
wait 系統執行完sysinit進程後 只執行一次,init進程等待它結束才繼續執行其它動作
once 系統執行完wait進程後 只執行一次,init進程不等待它結束
respawn 啟動完once進程後 init進程監測發現子進程退出時,重新啟動它,永不結束.如Shell命令直譯器
askfirst 啟動完respawn進程後 與respawn類似,不過init進程先輸出“Please press Enter toactivate this console”,等使用者輸入斷行符號後才啟動子進程
shutdown 當系統關機時 即重啟、關閉系統時執行的程式
restart 系統重啟時 init進程重啟時執行的程式,通常是init程式本身先重新讀取、解析/etc/inittab檔案,再執行restart程式
ctrl+alt+del 按下Ctrl+Alt+Del鍵時 按Ctrl+Alt+Del按鍵組合時執行的程式
(3)inittab檔案常式
<1>::sysinit:/etc/init.d/rcS
1.該條目的id省略,表示使用與init進程一樣的控制台.
2.該條目的runlevels在嵌入式Linux中都會省略.
3.該條目的action是sysinit,表示系統啟動後最先執行.
4.該條目的process是/etc/init.d/rcS,表示系統啟動後最先執行指令碼/etc/init.d/rcS.
<2>::respawn:-/bin/login
1.該條目的id省略,表示使用與init進程一樣的控制台.
2.該條目的runlevels在嵌入式Linux中都會省略.
3.該條目的action是respawn,表示init進程監測發現子進程退出時,重新啟動它,永不結束.
4.該條目的process是/bin/login,表示init進程監測發現/bin/login子進程退出時,重新啟動它,永不結束.
【轉】inittab檔案