System V init啟動過程
概括地講,Linux/Unix系統一般有兩種不同的初始化啟動方式.
1) BSD system init
2) System V init
大多數發行套件的Linux使用了與System V init相仿的init也就是Sys V init,它比傳統的BSD system init更容易且更加靈活, System V init的主要思想是定義了不同的"運行級別(runlevel)". 通過配置文件/etc/inittab定義了系統引導時的運行級別, 進入或者切換到一個運行級別時做什麼. 每個運行級別對應於一個子目錄/etc/rc.d/rc n.d.
以下是一個大致的System V init過程:
(1)init 過程執行的第一個腳本是/etc/rc.d/rc.sysinit , 它主要做在各個運行級別中進行初始化工作,包括: 啟動交換分區;檢查磁盤;設置主機名;檢查並掛載文件系統;加載並初始化硬件模塊.
(2)執行缺省的運行級別模式
這一步的內容主要在/etc/inittab中體現, inittab文件會告訴init進程要進入什麼運行級別,以及在哪裡可以找到該運行級別的配置文件.
(3)執行/etc/rc.d/rc.local腳本文件
這也是init過程中執行的最後一個腳本文件,所以用戶可以在這個文件中添加一些需要在登錄之前執行的命令.
(4)執行/bin/login程序
Busybox init 啟動過程分析
它的init進程主要進行以下工作:
<*> 為init進程設置信號處理進程
<*>對控制台進行初始化
<*>解析/etc/inittab
<*>在默認情況下,Busybox會運行初始化腳本/etc/init.d/rcS
當init進程對控制台進行初始化完成之後,Busybox會去檢查/etc/inittab文件是否存在,如果存在,就會解析該文件並執行相應的運行級別.
Busybox支持的inittab格式如下所示:
id : runlevel : action : process
這裡需要注意的一點是,Busybox所認識的/etc/inittab的格式盡管與Sys V init非常相似,但其中的操作域id具有不同的含義. Busybox中的id用來指定啟動的控制台,如果所啟動的進程不是可以交互的Shell,就可以空著id的操作域不用去填寫.
[需要注意]不論Busybox是否能找到inittab文件, Busybox下的init進行執行的第一個腳本都是/etc/init.d/rcS, 而不是Sys V init結構下執行的腳本文件/etc/rc.d/rc.sysinit.
BusyBox各版本下載 http://www.linuxidc.com/Linux/2011-08/40704.htm