資源描述:
《linux系統(tǒng)啟動(dòng)過程分析下》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、linux系統(tǒng)啟動(dòng)過程分析(下)第二節(jié)Linux0.01啟動(dòng)分析引導(dǎo)過程的描述引導(dǎo)流程和內(nèi)核鏡像文件計(jì)算機(jī)加電過程BIOS程序操作系統(tǒng)引導(dǎo)部分代碼的分析Boot.s的分析head.s的分析Head.s的作用AT&T匯編語言初步引導(dǎo)過程的描述引導(dǎo)流程和內(nèi)核鏡像文件計(jì)算機(jī)加電過程BIOS程序引導(dǎo)的步驟一般來說,操作系統(tǒng)的引導(dǎo)過程分兩個(gè)步驟:首先,計(jì)算機(jī)硬件經(jīng)過開機(jī)自檢(PowerOnSelf-Test,POST)之后,從軟盤或硬盤的固定位置裝載一小段代碼,這段代碼一般稱為“引導(dǎo)裝載器”。然后,由引導(dǎo)
2、裝載器負(fù)責(zé)裝入操作系統(tǒng)內(nèi)核鏡像文件并將控制權(quán)交給操作系統(tǒng)進(jìn)行進(jìn)一步的初始化和運(yùn)行操作系統(tǒng)引導(dǎo)裝載器非常小,一般只有幾百個(gè)字節(jié),而操作系統(tǒng)龐大而復(fù)雜,上述分成兩階段的引導(dǎo)過程,可將計(jì)算機(jī)中的固化軟件保持得足夠小,同時(shí)也便于實(shí)現(xiàn)對(duì)不同操作系統(tǒng)的引導(dǎo)。Linux0.01內(nèi)核鏡像文件由build.c程序生成寫入到磁盤(makedisk&&dd)計(jì)算機(jī)加電過程當(dāng)機(jī)算機(jī)的電源鍵被按下時(shí),同這個(gè)鍵相聯(lián)的電信號(hào)線就會(huì)送出一個(gè)電信號(hào)給主板,主板將此電信號(hào)傳給供電系統(tǒng),供電系統(tǒng)開始工作,為整個(gè)系統(tǒng)供電,并送出一個(gè)電
3、信號(hào)給BIOS,通知BIOS供電系統(tǒng)已經(jīng)準(zhǔn)備完畢。隨后BIOS啟動(dòng)一個(gè)程序,進(jìn)行主機(jī)自檢,主機(jī)自檢的主要工作是確保系統(tǒng)的每一個(gè)部分都得到了電源支持,內(nèi)存儲(chǔ)器、主板上的其它芯片、鍵盤、鼠標(biāo)、磁盤控制器及一些I/O端口正??捎茫撕?,自檢程序?qū)⒖刂茩?quán)還給BIOS。接下來BIOS讀取BIOS設(shè)置,得到引導(dǎo)驅(qū)動(dòng)器的順序,然后依次檢查,直到找到可以用來引導(dǎo)的驅(qū)動(dòng)器(或說可以用來引導(dǎo)的磁盤,包括軟盤、硬盤、光盤等),然后調(diào)用這個(gè)驅(qū)動(dòng)器上磁盤的引導(dǎo)扇區(qū)進(jìn)行引導(dǎo)。基本輸入輸出系統(tǒng)BIOS存放在ROM中的BIOS
4、程序執(zhí)行開機(jī)是系統(tǒng)個(gè)部分自檢,經(jīng)過一系列操作之后,BIOS會(huì)將有關(guān)代碼和數(shù)據(jù)存放在內(nèi)存低端1MB末端的64KB處,然后跳轉(zhuǎn)到這個(gè)地方讓CPU進(jìn)入實(shí)地址模式工作將內(nèi)核文件加載到內(nèi)存后,LINUX不再使用BIOS功能,因此BIOS中斷向量表在引導(dǎo)過程中被覆蓋。BIOS將所檢查磁盤的第一個(gè)扇區(qū)(512B)載入內(nèi)存,放在0x0000:0x7c00處,如果個(gè)扇區(qū)的最后兩個(gè)字節(jié)是“55AA”,那么這就是一個(gè)引導(dǎo)扇區(qū),這個(gè)磁盤也就是一塊可引導(dǎo)盤。通常這個(gè)大小為512B的程序就稱為引導(dǎo)程序(boot)。如果最后
5、兩個(gè)字節(jié)不是“55AA”,那么BIOS就檢查下一個(gè)磁盤驅(qū)動(dòng)器。BIOS是怎么知道或說分辨哪一個(gè)磁盤可以用來引導(dǎo)的呢?引導(dǎo)程序所具有的特點(diǎn):它的大小是512B,不能多一字節(jié)也不能少一字節(jié),因?yàn)锽IOS只讀512B到內(nèi)存中去。它的結(jié)尾兩字節(jié)必須是“55AA”,這是引導(dǎo)扇區(qū)的標(biāo)志。它總是放在磁盤的第一個(gè)扇區(qū)上(0磁頭,0磁道,1扇區(qū)),因?yàn)锽IOS只讀第一個(gè)扇區(qū)。利用BIOS13號(hào)中斷讀取磁盤扇區(qū)AH寄存器:存放功能號(hào),為2的時(shí)候,表示使用讀磁盤功能DL寄存器:存驅(qū)動(dòng)器號(hào),表示欲讀哪一個(gè)驅(qū)動(dòng)器CH寄存
6、器:存磁頭號(hào),表示欲讀哪一個(gè)磁頭CL寄存器:存扇區(qū)號(hào),表示欲讀的啟始扇區(qū)AL寄存器:存計(jì)數(shù)值,表示欲讀入的扇區(qū)數(shù)量在設(shè)置了這幾個(gè)寄存器后,我們就可以使用int13這條指令調(diào)用BIOS13號(hào)中斷讀取指定的磁盤扇區(qū),它將磁盤扇區(qū)讀入ES:BX處,因此,在調(diào)用它之前,我們實(shí)際上還需要設(shè)置ES與BX寄存器,以指出數(shù)據(jù)在內(nèi)存中存放的位置0.01版內(nèi)核,以軟盤啟動(dòng)為例:1開機(jī)2BIOS加電自檢(PowerOnSelfTest,POST),內(nèi)存地址為0ffff:00003將軟盤第一個(gè)扇區(qū)(0頭0道1扇區(qū),也就
7、是BootSector)讀入內(nèi)存地址0000:7c00處。4檢查(WORD)0000:7dfe是否等于0xaa55,若不等于則轉(zhuǎn)去嘗試其他啟動(dòng)介質(zhì),如果沒有其他啟動(dòng)介質(zhì)則顯示"NoROMBASIC"然后死機(jī)。5跳轉(zhuǎn)到0000:7c00處執(zhí)行MBR中的程序。6MBR將自己移動(dòng)到9000:00007將內(nèi)核模塊從軟盤讀入到1000:00008將內(nèi)核模塊移動(dòng)到0000:00009進(jìn)入保護(hù)模式10讀取COMS信息,設(shè)置有關(guān)表格,然后調(diào)用操作系統(tǒng)初始化程序MAIN.C1-5完全由BIOS完成,6-10由BO
8、OTBOOT.SHEAD.S完成其中BOOT.S的目標(biāo)代碼就是MBR(主引導(dǎo)記錄MasterBootRecord)中的程序操作系統(tǒng)引導(dǎo)流程Linux0.01系統(tǒng)引導(dǎo)過程中內(nèi)核代碼在內(nèi)存中的位置變化操作系統(tǒng)引導(dǎo)部分代碼的分析Boot.s的分析head.s的分析Head.s的作用AT&T匯編語言初步操作系統(tǒng)引導(dǎo)部分代碼0.01版源代碼樹中/boot文件夾中的兩個(gè)匯編語言程序文件Boot.sHead.sBoot.s的作用引導(dǎo)裝載器,存放在mbr中的一段程序,負(fù)責(zé)將操作系統(tǒng)加載到內(nèi)存合適的地方,這一部