純屬個人學(xué)習(xí)總結(jié)所得,如果有不對的地方請留言指出,不勝感激。
經(jīng)過兩天的學(xué)習(xí),了解了linux啟動的兩種模式,在這里總結(jié)一下。
第一種為傳統(tǒng)的System V initialization,起源于Unix,大部分的linux系統(tǒng)都是以這個方式啟動(例如:centos,redhat)。
第二種為近幾年提出的Upstart方式,其特點是基于事件機制,所有的服務(wù)和任務(wù)都是由事件驅(qū)動,部分linux系統(tǒng)是以此啟動(例如:ubuntu,fedora,debian)
首先,介紹第一種,也是最為常見的linux啟動過程:
1、硬件讀取BIOS加載硬件信息以及進行開機自檢。
2、根據(jù)設(shè)置讀取并第一個可啟動的設(shè)備內(nèi)所存儲的MBR的boot loader(即grub)
3、不同的boot loader的設(shè)置不同,加載不同的kernel,之后kernel會進行硬件檢測和驅(qū)動程序的加載。
4、調(diào)用init進程。實質(zhì)上就是運行/etc/inittab文件,從中獲取run level的信息。
5、執(zhí)行/etc/rc.d/rc.sysinit文件(系統(tǒng)初始化進程)配置初始化系統(tǒng)。? (如果可以讀懂shell腳本的可以vim出來看看,文件內(nèi)有詳細的啟動過程和主要工作)
6、根據(jù)run level的不同執(zhí)行不同的/etc/rc.d/rc(0~6)文件和/etc/sysconfig。
其中/etc/rc.d/rc(0~6)文件中包含兩大類文件:K開頭的和S開頭的分別表示start和stop,所有文件都是鏈接到/etc/init.d/文件夾下的,這些都是啟動系統(tǒng)的必要服務(wù)
而/etc/sysconfig文件中為配置文件
7、最后執(zhí)行/etc/rc.d/rc.local文件(此文件為用戶自定義文件,自己寫的開機腳本可以放在此處)
8、執(zhí)行模擬程序mingetty啟動login進程,等待登錄。
接下來說一下第二種啟動方式:
首先,Upstart啟動方式和傳統(tǒng)方式的不同點在于,所有的服務(wù)和任務(wù)都是由事件驅(qū)動的。因此,Ubuntu的init進程不會直接去調(diào)用相對應(yīng)的文件,而是去/etc/init下面尋找對應(yīng)的配置文件,通過對配置文件的調(diào)用,來調(diào)用相對應(yīng)的文件。
其次相比較傳統(tǒng)的啟動方式,/etc目錄下的文件發(fā)生了變化。但是,在第三種啟動方式之前的步驟是一樣的,這里就不再說了,直接從第四步開始。
4、調(diào)用init進程,實質(zhì)上運行/etc/init/rc-sysinit.conf文件,設(shè)置默認的run level。
5、由于run level的改變觸發(fā)/etc/init/rc.conf文件。
打開/etc/init/rc.conf文件,最后一行就寫著:/etc/init.d/rc $RUNLEVEL。也就是說,直接觸發(fā)了/etc/init.d/rc文件。
打開rc文件我們可以看見根據(jù)這個文件系統(tǒng)會觸發(fā)相對應(yīng)的/etc/rc.(0~6)文件
由此觸發(fā)已經(jīng)配置好的系統(tǒng)腳本(這些腳本都是鏈接到/etc/init.d/目錄下,也就是說最終還是要調(diào)用該目錄下的腳本)。
同樣的,腳本的名字和第一種啟動方式的命名規(guī)則一樣,只不過沒有了K開頭的文件,用S表示調(diào)用開始
6、同樣最后觸發(fā)/etc/rc.local文件(此文件為用戶自定義文件,自己寫的開機腳本可以放在此處)
到此為止,系統(tǒng)啟動完畢,等待用戶登錄。
兩種啟動方式,總的來說都是在調(diào)用/etc/init.d下面的腳本文件,不過不同的方式調(diào)用的方法不一樣而已。本文只是簡單的記錄了我對調(diào)用init進
程之后,文件讀寫調(diào)用的一些理解,關(guān)于硬件讀取BIOS到內(nèi)核的調(diào)用并沒有詳細的記錄,有興趣的讀者可以自己下來看看。
最后,如果各位讀者發(fā)現(xiàn)不對的地方,請留言指出,萬分感激?。?!