許多人對(duì)Linux的啟動(dòng)過程感到很神秘,,因?yàn)樗械膯?dòng)信息都在屏幕上一閃而過,。其實(shí),
Linux的啟動(dòng)過程并不象啟動(dòng)信息所顯示的那樣復(fù)雜,,它主要分成兩個(gè)階段:
1.啟動(dòng)內(nèi)核,。在這個(gè)階段,,內(nèi)核裝入內(nèi)存并在初始化每個(gè)設(shè)備驅(qū)動(dòng)器時(shí)打印信息。
2.執(zhí)行程序init,。裝入內(nèi)核并初始化設(shè)備后,,運(yùn)行init程序。init程序處理所有程序的啟動(dòng),,
包括重要系統(tǒng)精靈程序和其它指定在啟動(dòng)時(shí)裝入的軟件,。
下面以Red Hat為例簡(jiǎn)單介紹一下Linux的啟動(dòng)過程。
一,、啟動(dòng)內(nèi)核
首先介紹啟動(dòng)內(nèi)核部分,。電腦啟動(dòng)時(shí),BIOS裝載MBR,,然后從當(dāng)前活動(dòng)分區(qū)啟動(dòng),,LILO獲得引
導(dǎo)過程的控制權(quán)后,會(huì)顯示LILO提示符,。此時(shí)如果用戶不進(jìn)行任何操作,LILO將在等待制定
時(shí)間后自動(dòng)引導(dǎo)默認(rèn)的操作系統(tǒng),,而如果在此期間按下TAB鍵,,則可以看到一個(gè)可引導(dǎo)的操作
系統(tǒng)列表,選擇相應(yīng)的操作系統(tǒng)名稱就能進(jìn)入相應(yīng)的操作系統(tǒng),。
當(dāng)用戶選擇啟動(dòng)LINUX操作系統(tǒng)時(shí),,LILO就會(huì)根據(jù)事先設(shè)置好的信息從ROOT文件系統(tǒng)所在的分
區(qū)讀取LINUX映象,然后裝入內(nèi)核映象并將控制權(quán)交給LINUX內(nèi)核,。LINUX內(nèi)核獲得控制權(quán)后,,
以如下步驟繼續(xù)引導(dǎo)系統(tǒng):
1. LINUX內(nèi)核一般是壓縮保存的,因此,,它首先要進(jìn)行自身的解壓縮,。內(nèi)核映象前面的一些
代碼完成解壓縮。
2. 如果系統(tǒng)中安裝有可支持特殊文本模式的,、且LINUX可識(shí)別的SVGA卡,,LINUX會(huì)提示用戶
選擇適當(dāng)?shù)奈谋撅@示模式。但如果在內(nèi)核的編譯過程中預(yù)先設(shè)置了文本模式,,則不會(huì)提示選
擇顯示模式,。該顯示模式可通過LILO或RDEV工具程序設(shè)置。
3. 內(nèi)核接下來檢測(cè)其他的硬件設(shè)備,,例如硬盤,、軟盤和網(wǎng)卡等,并對(duì)相應(yīng)的設(shè)備驅(qū)動(dòng)程序
進(jìn)行配置,。這時(shí),,顯示器上出現(xiàn)內(nèi)核運(yùn)行輸出的一些硬件信息,。
4. 接下來,內(nèi)核裝載ROOT文件系統(tǒng),。ROOT文件系統(tǒng)的位置可在編譯內(nèi)核時(shí)指定,,也可通過
LILO或RDEV指定。文件系統(tǒng)的類型可自動(dòng)檢測(cè),。如果由于某些原因裝載失敗,,則內(nèi)核啟動(dòng)
失敗,最終會(huì)終止系統(tǒng),。
二,、執(zhí)行init程序
其次介紹init程序,利用init程序可以方便地定制啟動(dòng)其間裝入哪些程序,。init的任務(wù)是
啟動(dòng)新進(jìn)程和退出時(shí)重新啟動(dòng)其它進(jìn)程,。例如,在大多數(shù)Linux系統(tǒng)中,,啟動(dòng)時(shí)最初裝入
六個(gè)虛擬的控制臺(tái)進(jìn)程,,退出控制臺(tái)窗口時(shí),進(jìn)程死亡,,然后init啟動(dòng)新的虛擬登錄控制臺(tái),,
因而總是提供六個(gè)虛擬登陸控控制臺(tái)進(jìn)程。
控制init程序操作的規(guī)則存放在文件/etc/inittab中,。Red Hat Linux缺省的inittab文
件如下:
#
#inittab This file describes how the INIT process should set up the system in a certain
#run-level.
#
#
#Default runlevel.The runlevels used by RHS are:
#0-halt(Do NOT set initdefault to this)
#1-Single user mode
#2-Multiuser,without NFS(the same as 3,if you do not have networking)
#3-Full multiuser mode
#4-unused
#5-X11
#6-reboot(Do NOT set initdefault to this)
#
id:3:initdefault:
#system initialization
si::sysinit:/etc/rc.d/rc.sysinit
10:0:wait:/etc/rc.d/rc 0
11:1:wait:/etc/rc.d/rc 1
12:2:wait:/etc/rc.d/rc 2
13:3:wait:/etc/rc.d/rc 3
14:4:wait:/etc/rc.d/rc 4
15:5:wait:/etc/rc.d/rc 5
16:6:wait:/etc/rc.d/rc 6
#Things to run in every runlevel
ud:once:/sbin/update
#Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
#When our UPS tells us power has failed,assume we have a few minutes of
power left.Schedule a
#shutdown for 2 minutes from now.
#This does,of course,assume you have powered installed and your UPS
connected and working
#correctly.
pf::powerfail:/sbin/shutdown -f -h +2 "Power Restored;Shutdown Cancelled"
#Run gettys in standard runlevels
1:12345:respawn:/sbin/minggetty tty1
2:2345:respawn:/sbin/minggetty tty2
3:2345:respawn:/sbin/minggetty tty3
4:2345:respawn:/sbin/minggetty tty4
5:2345:respawn:/sbin/minggetty tty5
6:2345:respawn:/sbin/minggetty tty6
#Run xdm in runlevel 5
x:5:respawn:/usr/bin/X11/xdm -nodaemon
Linux有個(gè)運(yùn)行級(jí)系統(tǒng),,運(yùn)行級(jí)是表示系統(tǒng)當(dāng)前狀態(tài)和init應(yīng)運(yùn)行哪個(gè)進(jìn)程并保持在這種
系統(tǒng)狀態(tài)中運(yùn)行的數(shù)字。在inittab文件中,,第一個(gè)項(xiàng)目指定啟動(dòng)時(shí)裝入的缺省運(yùn)行級(jí),。
上例中是個(gè)多用戶控制臺(tái)方式,運(yùn)行級(jí)為3,。然后,,inittab文件中每個(gè)項(xiàng)目指定第二個(gè)
字段的項(xiàng)目用哪種運(yùn)行級(jí)(每個(gè)字段用冒號(hào)分開)。因此,,對(duì)運(yùn)行級(jí)3,,下列行是相關(guān)的:
13:3:wait:/etc/rc.d/rc 3
1:12345:respawn:/sbin/minggetty tty1
2:2345:respawn:/sbin/minggetty tty2
3:2345:respawn:/sbin/minggetty tty3
4:2345:respawn:/sbin/minggetty tty4
5:2345:respawn:/sbin/minggetty tty5
6:2345:respawn:/sbin/minggetty tty6
最后六行建立Linux提供的六個(gè)虛擬控制臺(tái)。第一行運(yùn)行啟動(dòng)腳本/etc/rc.d/ rc 3,;
這將運(yùn)行目錄/etc/
rc.d/rc3.d中包含的所有腳本,,這些腳本表示系統(tǒng)初始化時(shí)要啟動(dòng)的程序。一般來說,,
這些腳本不需要編輯或改變,,是系統(tǒng)缺省的。