時(shí)間:2015-06-28 00:00:00 來(lái)源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評(píng)論(0)
Linux的啟動(dòng)流程(/etc/inittab)
1. 從BIOS到KERNEL
BIOS自檢->MBR(GRUB)->KERNEL->KERNEL自解壓->內(nèi)核初始化->內(nèi)核啟動(dòng)
BIOS自檢
當(dāng)電腦開(kāi)機(jī)的時(shí)候,電腦會(huì)進(jìn)入BIOS,BIOS的工作主要是偵測(cè)電腦的周邊配套設(shè)備是否工作正常,如CPU的類型、速度、緩存等
主板類型
內(nèi)存的速度,容量
硬盤(pán)的大小,類型和工作模式
風(fēng)扇速度等
主要是為了檢查這些設(shè)備在開(kāi)機(jī)的時(shí)候是否能通過(guò)檢測(cè),如果能通過(guò)檢測(cè),說(shuō)明電腦可以正常的工作。
?。?/p>
一、載入啟動(dòng)程序
BIOS自檢完成后,BIOS會(huì)根據(jù)用戶設(shè)置的啟動(dòng)順序來(lái)由那個(gè)設(shè)備來(lái)啟動(dòng)電腦的操作系統(tǒng),這個(gè)設(shè)備一般是硬盤(pán)。
也就是進(jìn)入到硬盤(pán)的MBR區(qū)域(引導(dǎo)扇區(qū)),這個(gè)區(qū)域中的有512個(gè)字節(jié)的大小,其中前446個(gè)字節(jié)中保存的程序是選擇啟動(dòng)分區(qū),也就是電腦由那個(gè)硬盤(pán)分區(qū)來(lái)載入開(kāi)機(jī)的程序。那么在這個(gè)446個(gè)字節(jié)的空間中保存的就是啟動(dòng)程序,然后由這個(gè)小程序來(lái)加載存儲(chǔ)在其他位置的操作系統(tǒng),也就是啟動(dòng)grub程序。
當(dāng)找到啟動(dòng)設(shè)備(硬盤(pán))時(shí),第一階段所用的boot loader(存放在引導(dǎo)扇區(qū))被裝載到RAM中并被執(zhí)行。這里的boot loader在大小上小于一個(gè)扇區(qū)的大小,也就是512字節(jié),而它的任務(wù),就是加載第二階段的boot loader。
當(dāng)負(fù)責(zé)第二階段的boot loader位于內(nèi)存中并被執(zhí)行時(shí),通常會(huì)顯示一個(gè)一閃而過(guò)的屏幕,然后linux以及可選的初始化內(nèi)存盤(pán)(一種臨時(shí)的根文件系統(tǒng),如果想得到具體的介紹,請(qǐng)?jiān)L問(wèn)http://likunarmstrong.bokee.com/5502266.html)會(huì)被裝載到存儲(chǔ)器中。當(dāng)系統(tǒng)鏡像被加載時(shí),第二階段的boot loader將把控制權(quán)轉(zhuǎn)交給內(nèi)核鏡像,與此同時(shí),內(nèi)核開(kāi)始自解壓并初始化。在這個(gè)階段,第二階段的boot loader會(huì)檢查系統(tǒng)的硬件,枚舉那些附加的硬件設(shè)備,掛載根設(shè)備,之后加載需要的內(nèi)核模塊。完成之后,第一個(gè)用戶空間程序(init)開(kāi)始執(zhí)行,更高層次的系統(tǒng)初始化開(kāi)始。
這就是從表面上看,linux的啟動(dòng)過(guò)程。好了,現(xiàn)在,讓我們更進(jìn)一步,更深入地探索linux啟動(dòng)過(guò)程中的一些細(xì)節(jié)。
二、 系統(tǒng)的啟動(dòng)
系統(tǒng)啟動(dòng)的階段,依賴于linux在哪個(gè)硬件設(shè)備上啟動(dòng)。在嵌入式系統(tǒng)中,當(dāng)系統(tǒng)被打開(kāi)或者重新啟動(dòng)的時(shí)候,就要使用啟動(dòng)加載的環(huán)境。這方面的例子包括U -BOOT,RedBoot,和Lucent推出的MicroMonitor。嵌入式平臺(tái)通常是綁定了啟動(dòng)監(jiān)視器的。這些程序位于目標(biāo)硬件上flash存儲(chǔ)器的特定位置,提供了將linux內(nèi)核鏡像下載到flash存儲(chǔ)器的方法,并在接下來(lái)的過(guò)程中執(zhí)行它。除了擁有存儲(chǔ)和啟動(dòng)linux鏡像的功能外,這些啟動(dòng)監(jiān)視器還能進(jìn)行一定程度上的系統(tǒng)檢測(cè)和硬件初始化。在一個(gè)嵌入式的目標(biāo)板中,這些啟動(dòng)監(jiān)視器通常覆蓋了第一階段與第二階段boot loader的功能。
/************************************************************************************************/
小知識(shí):如何查看你的MBR內(nèi)容。如果你希望查看你MBR的具體內(nèi)容,請(qǐng)用以下命令:
# dd if=/dev/hda of=mbr.bin bs=512 count=1
# od -xa mbr.bin
需要以root身份運(yùn)行的dd命令,讀取你的第一個(gè)集成電子驅(qū)動(dòng)器或者IDE驅(qū)動(dòng)器的前512字節(jié),并將他們寫(xiě)入
mbr.bim文件。od命令則是以十六進(jìn)制和ASCII碼形式打印出這個(gè)二進(jìn)制文件
/************************************************************************************************/
在個(gè)人電腦中,linux的啟動(dòng)是從0xFFFF0地址開(kāi)始的。BIOS的第一步動(dòng)作就是進(jìn)行上電自檢(POST)。POST的工作是檢查硬件設(shè)備。BIOS的第二步動(dòng)作就是枚舉本地設(shè)備并初始化。
由于BIOS功能使用上的不同,它由兩個(gè)部分組成:POST碼runtime服務(wù)。POST完成后,它將從存儲(chǔ)器中被清除,但是BIOS runtime服務(wù)會(huì)被保留,用于目標(biāo)操作系統(tǒng)。
為了啟動(dòng)操作系統(tǒng),BIOS的runtime服務(wù)將搜索那些激活狀態(tài)的或是可引導(dǎo)啟動(dòng)的設(shè)備,搜索的順序則由CMOS設(shè)置決定(也就是我們平時(shí)所謂的在 BIOS中設(shè)置的啟動(dòng)順序)。一個(gè)軟驅(qū),一臺(tái)光驅(qū),一個(gè)硬盤(pán)上的分區(qū),網(wǎng)絡(luò)上的設(shè)備甚至一個(gè)usb 閃存盤(pán)都可以作為一個(gè)啟動(dòng)設(shè)備。
當(dāng)然,linux通常是從硬盤(pán)啟動(dòng)的。硬盤(pán)上的MBR(主啟動(dòng)記錄)包含有基本的boot loader,它是一個(gè)512字節(jié)大小的扇區(qū),位于磁盤(pán)的第一個(gè)扇區(qū)(0磁頭0磁道1扇區(qū))。當(dāng)MBR被裝載到RAM中后,BIOS就會(huì)將控制權(quán)轉(zhuǎn)交給MBR。
三、 第一階段boot loader
位于MBR中的主boot loader是一個(gè)512字節(jié)的鏡像,其中不僅包含了程序代碼,還包含了一個(gè)小的分區(qū)表,如圖2所示。最初的446字節(jié)是主boot loader,它里面就包含有可執(zhí)行代碼以及錯(cuò)誤消息文本。接下來(lái)的64字節(jié)是分區(qū)表,其中包含有四個(gè)分區(qū)的各自的記錄(一個(gè)分區(qū)占16字節(jié))。MBR通過(guò)特殊數(shù)字0xAA55(譯者注:在電子界中AA55確實(shí)是具有傳奇色彩的數(shù)字,想知道為什么么?將它展開(kāi)成二進(jìn)制形式,看看有什么規(guī)律)作為兩個(gè)字節(jié)的結(jié)束標(biāo)志。0x55AA同時(shí)也是MBR有效的校驗(yàn)確認(rèn)。
主boot loader的工作是尋找并加載第二boot loader。它通過(guò)分析分區(qū)表,找出激活分區(qū)來(lái)完成這個(gè)任務(wù),當(dāng)它找到一個(gè)激活分區(qū)時(shí),它將繼續(xù)掃描剩下的分區(qū)表中的分區(qū),以便確認(rèn)他們都是未激活的。確認(rèn)完畢后,激活分區(qū)的啟動(dòng)記錄從設(shè)備中被讀到RAM,并被執(zhí)行。
四、 第二階段boot loader
起著次作用,或者說(shuō)是第二boot loader,可以更加形象得被稱為內(nèi)核加載程序。這個(gè)階段的任務(wù)就是加載linux內(nèi)核,以及可選的初始化內(nèi)存盤(pán)。
/*******************************************************************/
小知識(shí):GRUB階段的boot loaders
在/boot/grub目錄中包含有stage1,stage2和stage1.5的boot loaders,同時(shí)還有不少可選的loaders(例如,CD-ROM使用的就是iso9660_stage_1_5)
/*******************************************************************/
把第一階段和第二階段的boot loaders聯(lián)合起來(lái),就是在x86個(gè)人電腦中,我們所說(shuō)的linux loader(LILO)或者GRand Unified Bootloader(GRUB)。由于GRUB修正了一些LILO中存在的缺陷,因此下面就讓我們來(lái)看看GRUB(如果你希望得到更多的關(guān)于GRUB, LILO和與之相關(guān)話題的討論資源,請(qǐng)見(jiàn)文后的參考資料)
對(duì)于GRUB來(lái)說(shuō),一個(gè)比較好的方面就是它包含了linux文件系統(tǒng)的知識(shí)。與LILO使用裸扇區(qū)不同的是,GRUB能夠從ext2或者ext3文件系統(tǒng)中加載linux內(nèi)核。它是通過(guò)將本來(lái)兩階段的boot loader轉(zhuǎn)換成三個(gè)階段的boot loader。在第一階段(MBR)中會(huì)啟動(dòng)stage1.5的boot loader來(lái)理解linux內(nèi)核鏡像中的特殊的文件系統(tǒng)格式,例如,reiserfs_stage1-5(用于從reiserf日志文件系統(tǒng)中進(jìn)行加載)或e2fs+stage1_5(用于從wxt2或ext3文件系統(tǒng)進(jìn)行加載)。當(dāng)stage1.5的boot loader被加載并運(yùn)行時(shí),stage2 的boot loader才能被加載。
當(dāng)stage2被加載時(shí),GRUB能根據(jù)請(qǐng)求的情況顯示一個(gè)可選內(nèi)核的清單(在 /etc/grub.conf 中進(jìn)行定義,同時(shí)還有幾個(gè)軟符號(hào)鏈接 /etc/grub/menu.lst 和 /etc/grub.conf)。你可以選擇一個(gè)內(nèi)核,修改其附加的內(nèi)核參數(shù)。同時(shí),你可以選擇使用命令行的shell來(lái)對(duì)啟動(dòng)過(guò)程進(jìn)行更深層次的手工控制。
在第二階段boot loader存在與內(nèi)存中后,就可以對(duì)文件系統(tǒng)進(jìn)行查詢了,同時(shí),默認(rèn)的內(nèi)核鏡像以及初始化內(nèi)存盤(pán)鏡像也被加載到內(nèi)存中。一切準(zhǔn)備完畢之后,第二階段的boot loader就會(huì)調(diào)用內(nèi)核鏡像。
#p#副標(biāo)題#e#
2. 內(nèi)核啟動(dòng):創(chuàng)建1#進(jìn)程并執(zhí)行,由它創(chuàng)建若干內(nèi)核線程(kernel thread),然后裝入并執(zhí)行程序/sbin/init(變成一個(gè)用戶進(jìn)程)。此后,init根據(jù)/etc/inittab配置文件來(lái)執(zhí)行相應(yīng)的腳本進(jìn)行系統(tǒng)初始化,如設(shè)置鍵盤(pán)、字體,裝載模塊,設(shè)置網(wǎng)絡(luò)等。
對(duì)于Redhat來(lái)說(shuō),執(zhí)行的順序?yàn)椋?/p>
/etc/rc.d/rc.sysinit # 由init執(zhí)行的第一腳本
/etc/rc.d/rc $RUNLEVEL # init執(zhí)行指定運(yùn)行級(jí)別($RUNLEVEL為缺省的運(yùn)行模式)的各腳本;
/etc/rc.d/rc.local #運(yùn)行模式2、3、5時(shí)會(huì)運(yùn)行的腳本
/sbin/mingetty(或getty) # 等待用戶登錄
/etc/inittab中指定了系統(tǒng)的運(yùn)行級(jí)別(RUNLEVEL),init根據(jù)運(yùn)行級(jí)別啟動(dòng)相關(guān)的服務(wù)(一些后臺(tái)進(jìn)程),實(shí)現(xiàn)不同的功能。
RUNLEVEL值為:0-6
0:halt, 1:?jiǎn)斡脩簦?:多用戶,3:多用戶并啟動(dòng)NFS服務(wù)
4:保留,5:運(yùn)行xdm(X window)以圖形界面方式登錄
6:reboot
3./etc/inittab文件
/etc/inittab的文件內(nèi)容如下:
# 設(shè)定系統(tǒng)開(kāi)機(jī)預(yù)設(shè)的RUNLEVEL:
id:3:initdefault:
# 開(kāi)始進(jìn)行RUNLEVEL的服務(wù)啟動(dòng)前,使用來(lái)偵測(cè)與初始化系統(tǒng)環(huán)境的設(shè)定文件:
si::sysinit:/etc/rc.d/rc.sysinit
# 7 個(gè)不同 run level 的,需要啟動(dòng)的服務(wù)的 scripts 放置路徑:
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
# 是否允許按下 [ctrl]+[alt]+[del] 就重新開(kāi)機(jī)的設(shè)定項(xiàng)目:
ca::ctrlaltdel:/sbin/shu
關(guān)鍵詞標(biāo)簽:Linux啟動(dòng)過(guò)程
相關(guān)閱讀
熱門(mén)文章 安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程 Tomcat9.0如何安裝_Tomcat9.0環(huán)境變量配置方法 多種操作系統(tǒng)NTP客戶端配置 Linux操作系統(tǒng)修改IP
人氣排行 Linux下獲取CPUID、硬盤(pán)序列號(hào)與MAC地址 dmidecode命令查看內(nèi)存型號(hào) linux tc實(shí)現(xiàn)ip流量限制 安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程 linux下解壓rar文件 lcx.exe、nc.exe、sc.exe入侵中的使用方法 Ubuntu linux 關(guān)機(jī)、重啟、注銷(xiāo) 命令 查看linux服務(wù)器硬盤(pán)IO讀寫(xiě)負(fù)載