BIOS源代碼結(jié)構(gòu)分析 (1)_第1頁(yè)
BIOS源代碼結(jié)構(gòu)分析 (1)_第2頁(yè)
BIOS源代碼結(jié)構(gòu)分析 (1)_第3頁(yè)
BIOS源代碼結(jié)構(gòu)分析 (1)_第4頁(yè)
BIOS源代碼結(jié)構(gòu)分析 (1)_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、1 引言1.1 文檔目的對(duì)于電腦用戶來說,打開電源啟動(dòng)電腦幾乎是每天必做的事情,但計(jì)算機(jī)在顯示這些啟動(dòng)畫面的時(shí)候在做什么呢?大多數(shù)用戶都未必清楚了。下面就向大家介紹一下從打開電源到出現(xiàn)Linux的登錄窗口,計(jì)算機(jī)到底干了些什么工作,BIOS在其中起到什么作用。電腦的啟動(dòng)過程中有一個(gè)非常完善的硬件自檢機(jī)制。對(duì)于采用Award BIOS的電腦來說,它在上電自檢那短暫的幾秒鐘里,就可以完成100多個(gè)檢測(cè)步驟。1.2 術(shù)語(yǔ)和縮寫術(shù)語(yǔ)或縮寫描述BIOS基本輸入/輸出系統(tǒng)CMOS保存系統(tǒng)當(dāng)前的硬件配置情況和用戶的設(shè)定參數(shù)POSTPower on self test, 加電自檢2 基本概念2.1 BIOSB

2、IOS即基本輸入/輸出系統(tǒng),它是被固化在計(jì)算機(jī)ROM芯片上的一組程序。它是微機(jī)系統(tǒng)軟、硬件之間的一個(gè)可編程接口,通過跳線開關(guān)和系統(tǒng)配帶的驅(qū)動(dòng)程序盤,可以對(duì)ROM進(jìn)行重寫,方便地實(shí)現(xiàn)BIOS升級(jí)。2.2 CMOSCMOS是一塊可讀寫的RAM芯片,保存系統(tǒng)當(dāng)前的硬件配置情況和用戶的設(shè)定參數(shù);BIOS中裝有一個(gè)程序稱為“系統(tǒng)設(shè)置程序”,設(shè)置CMOS中的參數(shù);CMOS由電池供電,斷電后數(shù)據(jù)會(huì)丟失;前16字節(jié)用于存儲(chǔ)時(shí)間2.3 AMI、AWARD和PHONIX三大主流廠商開發(fā)BIOS是一件技術(shù)含量很高的工作,從業(yè)人員也少;一流主板廠商的BIOS研發(fā)人員,年薪往往是以七位數(shù)字來計(jì)算的!3 BIOS主要功能

3、BIOS的主要功能概括來說包括如下幾部分:1)POST加電自檢,檢測(cè)CPU各寄存器、計(jì)時(shí)芯片、中斷芯片、DMA控制器等2)Initial枚舉設(shè)備,初始化寄存器,分配中斷、IO端口、DMA資源等3)Setup進(jìn)行系統(tǒng)設(shè)置,存于CMOS中。一般開機(jī)時(shí)按Del或者F2進(jìn)入到BIOS的設(shè)置界面。4)常駐程序INT 10h、INT 13h、INT 15h等,提供給操作系統(tǒng)或應(yīng)用程序調(diào)用。5)啟動(dòng)自舉程序在POST過程結(jié)束后,將調(diào)用INT 19h,啟動(dòng)自舉程序,自舉程序?qū)⒆x取引導(dǎo)記錄,裝載操作系統(tǒng)。4 BIOS源代碼結(jié)構(gòu)分析4.1 AMI BIOS代碼結(jié)構(gòu)分析AMI BIOS的代碼主要分成三大部分:核心代

4、碼、芯片代碼和OEM代碼。核心代碼目錄結(jié)構(gòu)如下:4.2 AWARD BIOS代碼結(jié)構(gòu)分析AWARD BIOS的源代碼為進(jìn)行目錄分類,所有的源碼、編譯鏈接工具、生成的中間文件都在同一個(gè)目錄中。沒有AMI代碼結(jié)構(gòu)組織得好。5 BIOS常駐程序介紹開機(jī)自檢程序運(yùn)行完后,將撤出內(nèi)存。BIOS提供了一組常駐程序,主要包括INT 10h,INT 13h,INT 15h等等中斷服務(wù)例程,提供給操作系統(tǒng)或應(yīng)用程序調(diào)用,下面介紹幾個(gè)常用的中斷服務(wù)例程。X86提供了256個(gè)中斷,中斷向量表在內(nèi)存的起始地址1024byte上,每個(gè)中斷向量地址占用4個(gè)字節(jié)。5.1 INT 13h中斷例程INT 13h為BIOS提供的

5、對(duì)磁盤進(jìn)行操作的中斷例程,包括如下幾種調(diào)用方式:1)INT 13H,AH=00H軟、硬盤控制器復(fù)位;2)INT 13H,AH=02H讀扇區(qū)說明;3)INT 13H,AH=03H寫扇區(qū);4)INT 13H,AH=04H檢測(cè)扇區(qū);以上調(diào)用方法詳細(xì)的說明請(qǐng)參考相關(guān)技術(shù)文檔。舉例:讀取軟驅(qū)0面0道1扇區(qū)的內(nèi)容到0:200mov ax,0 /* 初始化ax寄存器為0 */mov es,ax /* 將es置為0 */mov bx,200h /* 將bx設(shè)置為200h ,此時(shí)es:dx = 0:200,為內(nèi)存地址*/mov al,1 /* al保存扇區(qū)數(shù)*/mov ch,0 /* ch保存磁道號(hào)*/mov

6、cl,1 /* cl保存扇區(qū)號(hào)*/mov dl,0 /* dl保存驅(qū)動(dòng)器,0表示軟驅(qū)A */mov dh,0 /* dh保存磁頭號(hào)*/mov ah,2 /* ah保存int13要調(diào)用的功能號(hào),2表示讀*/int 13h /* 調(diào)用int13中斷*/入口參數(shù):ah=int 13h的功能號(hào)al=讀取的扇區(qū)數(shù)ch=磁道號(hào)cl=扇區(qū)號(hào)dh=磁頭號(hào)(對(duì)于軟盤即面號(hào),因?yàn)橐粋€(gè)面用一個(gè)磁頭來讀寫)dl=驅(qū)動(dòng)器號(hào) 軟驅(qū)從0開始,0:軟驅(qū)A,1:軟驅(qū)B;硬盤從80h開始,80h:硬盤C,81h:硬盤D。es:bx指向接收從扇區(qū)讀入數(shù)據(jù)的內(nèi)存區(qū)返回參數(shù):操作成功:ah=0,al=讀入的扇區(qū)數(shù)操作失?。篴h=出錯(cuò)代

7、碼5.2 INT 10h中斷例程屏幕I/O接口,切換各文字/圖形模式,提供顯示/繪圖卷頁(yè)服務(wù)。詳細(xì)的調(diào)用方法可以參考相關(guān)的文檔。例如00號(hào)功能:功能號(hào):00H 功能:設(shè)置顯示模式入口參數(shù):AH=00H AL=顯示模式顯示模式列表:顯示模式顯示模式屬性 00H 4025 16色 文本 01H 4025 16色 文本 02H 8025 16色 文本 04H 320200 4色 05H 320200 4色 06H 640200 2色 07H 8025 2色 文本 08H 160200 16色 09H 320200 16色 0AH 640200 4色 0BH 保留 0CH 保留 0DH 320200

8、16色 0EH 640200 16色 0FH 640350 2色(單色) 10H 640350 4色 11H 640480 2色 12H 640480 16色 13H 320200 256色5.3 INT 16h中斷例程BIOS提供的鍵盤讀取中斷服務(wù),功能如下表:AH功能返回參數(shù)0從鍵盤讀一字符AL=字符碼AH=掃描碼1讀鍵盤緩沖區(qū)的字符如ZF=0AL=字符碼AH=掃描碼如ZF=1,緩沖區(qū)空2取鍵盤狀態(tài)字節(jié)AL=鍵盤狀態(tài)字節(jié)調(diào)用方法:MOVAH,0 ; 讀字符功能INT 16H ; 鍵盤BIOS調(diào)用5.4 用debug工具獲取中斷例程的內(nèi)存地址在DOS模式下,進(jìn)入DEBUG,輸入a100int

9、 10t=100得0210:08A9int 10h的中斷服務(wù)程序入口地址存放在中斷向量表中的物理地址是0000:0040H0043H,指向CS:IP(0210:08A9),如下圖執(zhí)行結(jié)果:6 啟動(dòng)過程分析6.1 Linux系統(tǒng)開機(jī)啟動(dòng)的總體流程 6.2 BIOS啟動(dòng)過程概述BIOS啟動(dòng)的過程主要包括POST過程和自舉過程,其流程和執(zhí)行指令地址的變化如下:6.3 POST過程分析POST過程在AWARD BIOS的源碼中在BOOTROM.ASM文件中BootBlock_POST函數(shù)過程中實(shí)現(xiàn),主要步驟如下:1)初始化各種主板芯片組2)初始化鍵盤控制器80423)初始化中斷向量 ,中斷服務(wù)例程.

10、4)初始化VGA BIOS 控制器5)顯示BIOS的版本和公司名稱6)掃描軟驅(qū)和各種介質(zhì)容量7)讀取CMOS的啟動(dòng)順序配置,并檢測(cè)啟動(dòng)裝置是否正常8)調(diào)用INT 19h啟動(dòng)自舉程序以上每個(gè)過程都有大量的代碼,在這不一一做仔細(xì)分析,請(qǐng)參考源代碼。下面對(duì)第三步源碼做一些分析。6.4 中斷向量表初始化過程源碼分析中斷向量表存儲(chǔ)在內(nèi)存的第一個(gè)1k空間里,本節(jié)主要分析AWARD BIOS中中斷向量服務(wù)例程的初始化過程。;=; Initialize int. vectors (0-77h) to the spurious interrupt; handler. Then initialize 00h-1f

11、h to their proper places.;= POST_CODE 12movax,csmovds,ax; Initialize vectors 00-77h to SPURIOUS_INT_HDLR; 。; Initialize vectors 00-1fh to the real handlers;lea si,DGROUP:Int_Tblp10_21:lodsb ;load next offsetcmp al,0ffh ;over?je short Init_Vect_Over ;Yes,skipmovzx di,al ;get vector numbershl di,2 ;se

12、t to coresspond offsetmovsw ;load offset from DS:SImov ax,cs ;get segmentstosw ;load segmentjmp short p10_21 ;next cycleInit_Vect_Over:mov al,10111100b ;Enable IRQ 0,1,6out a8259+1,alsti看以上藍(lán)色部分代碼,為初始化中斷服務(wù)例程,紅色部分Int_Tb1為BIOS定義的中斷服務(wù)例程列表,用于替換相應(yīng)的中斷服務(wù)。Int_Tb1的定義如下:INT_TBL: db 2 ; INT02DW OFFSET DGROUP:NM

13、I_VECT ; INT02 offsetdb 6 ; INT06DW OFFSET DGROUP:LOADALL ; INVALID OP-CODEdb 8 ; INT08DW OFFSET DGROUP:TIMER_VECT ; INT08 offsetdb 9 ; INT09DW OFFSET DGROUP:KBDINT_VECT ; INT09 offsetdb 0eh ; INT0EDW OFFSET DGROUP:DSKINT_VECT ; INT0E offsetdb 11h ; INT11DW OFFSET DGROUP:EQ_VECT ; INT11 offsetdb 12h

14、 ; INT12DW OFFSET DGROUP:MEM_SZ_VECT ; INT12 offsetdb 13h ; INT13 DW OFFSET DGROUP:DSK_VECT ; INT13 offsetdb 15h ; INT15DW OFFSET DGROUP:Multi_Service ; INT15 offsetdb 16h ; INT16DW OFFSET DGROUP:KBD_VECT ; INT16 offsetdb 19h ; INT19DW OFFSET DGROUP:INT19_VECT ; INT19 offsetdb 1Ah ; INT1ADW OFFSET D

15、GROUP:INT1A_VECT ; INT1A offsetdb 1Eh ; INT1EDW OFFSET DGROUP:FD_BIOS_PARMS ; INT1E offsetdb 0ffh ; over中斷服務(wù)例程對(duì)應(yīng)的函數(shù)也在Bootrom.asm文件中有實(shí)現(xiàn)。替換的中斷服務(wù)例程總結(jié)如下。中斷號(hào)BIOS中斷例程屬性備注INT02NMI_VECT硬中斷None Maskable Interrupt,不可屏蔽中斷INT06LOADALL錯(cuò)誤中斷非法,不支持的指令I(lǐng)NT08TIMER_VECT硬中斷IRQ0,系統(tǒng)定時(shí)器中斷INT09KBDINT_VECT硬中斷IRQ1,鍵盤中斷INT0EDS

16、KINT_VECT硬中斷IRQ6,軟盤驅(qū)動(dòng)器讀寫中斷INT11EQ_VECT軟中斷PC外圍設(shè)備檢查INT12MEM_SZ_VECT軟中斷PC主存儲(chǔ)器大小檢查INT13DSK_VECT軟中斷磁盤I/O接口(讀寫、復(fù)位等)INT15Multi_Service軟中斷卡帶接口服務(wù)程序,AT擴(kuò)展中斷服務(wù)調(diào)用,程序多任務(wù)INT16KBD_VECT軟中斷鍵盤讀取服務(wù)程序INT19INT19_VECT軟中斷激活操作系統(tǒng)的入口點(diǎn)INT1AINT1A_VECT軟中斷BIOS時(shí)間接口INT1EFD_BIOS_PARMS軟中斷軟盤驅(qū)動(dòng)器參數(shù)地址表AWARD的其他中斷服務(wù)調(diào)用未在BIOS中指定服務(wù)例程。6.5 自舉過程

17、源碼分析自舉過程即為執(zhí)行中斷INT19的中斷服務(wù)例程INT19_VECT的過程,該過程在AWARD的Bootrom.asm文件中實(shí)現(xiàn),其主要功能為讀取操作系統(tǒng)啟動(dòng)塊,將其讀入到內(nèi)存0000:7C00h,并跳轉(zhuǎn)至此處執(zhí)行。下面分析一下操作系統(tǒng)啟動(dòng)塊MBR是如何從磁盤中讀取到內(nèi)存0000:7C00h處的。new_dsk:xor dx,dxmov es,dx ; set to load at 0:offset Bootmov bx,offset Boot ; location to load boot sectormov cx,1 ; set to read one sectorU1xor ax,a

18、xint 13h ; reset diskU2 mov ax,0201h ; read boot recordint 13h ; read diskjc short Boot_failU3 call Check_Boot_Record ; check boot sector valid ?jc short Boot_fail ; invalid boot sector.jmp far ptr Boot ; go to boot codeU4Boot_Fail:lea ax,Bad_Disk_Msg ; boot failedmovcx,Bad_Disk_Msg_Lencall Disk_Fail_RoutineU5 xor ax,ax ; g_ramjmp short new_dskU6Disk_Fail_Routine:movdx,0ff01hcall Display_Str;Beep out if no bootable mediamov bl,2 ; beep on overridemovcx,1700hcall SND_SPKR_TONExor cx,cxloop short $mov bl

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論