小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

BIOS啟動過程分析

 txwl 2015-05-10

1        引言

1.1    文檔目的

對于電腦用戶來說,打開電源啟動電腦幾乎是每天必做的事情,但計算機(jī)在顯示這些啟動畫面的時候在做什么呢?大多數(shù)用戶都未必清楚了。下面就向大家介紹一下從打開電源到出現(xiàn)Linux的登錄窗口,計算機(jī)到底干了些什么工作,BIOS在其中起到什么作用。

電腦的啟動過程中有一個非常完善的硬件自檢機(jī)制。對于采用Award BIOS的電腦來說,它在上電自檢那短暫的幾秒鐘里,就可以完成100多個檢測步驟。

1.2    術(shù)語和縮寫

術(shù)語或縮寫

描述

BIOS

基本輸入/輸出系統(tǒng)

CMOS

保存系統(tǒng)當(dāng)前的硬件配置情況和用戶的設(shè)定參數(shù)

POST

Power on self test, 加電自檢

 

 

 

2       基本概念

2.1    BIOS

BIOS即基本輸入/輸出系統(tǒng),它是被固化在計算機(jī)ROM芯片上的一組程序。它是微機(jī)系統(tǒng)軟、硬件之間的一個可編程接口,通過跳線開關(guān)和系統(tǒng)配帶的驅(qū)動程序盤,可以對ROM進(jìn)行重寫,方便地實(shí)現(xiàn)BIOS升級。

2.2    CMOS

CMOS是一塊可讀寫的RAM芯片,保存系統(tǒng)當(dāng)前的硬件配置情況和用戶的設(shè)定參數(shù);BIOS中裝有一個程序稱為系統(tǒng)設(shè)置程序,設(shè)置CMOS中的參數(shù);CMOS由電池供電,斷電后數(shù)據(jù)會丟失;前16字節(jié)用于存儲時間

2.3    AMIAWARDPHONIX三大主流廠商

開發(fā)BIOS是一件技術(shù)含量很高的工作,從業(yè)人員也少;一流主板廠商的BIOS研發(fā)人員,年薪往往是以七位數(shù)字來計算的!

 

3       BIOS主要功能

BIOS的主要功能概括來說包括如下幾部分:

1POST

加電自檢,檢測CPU各寄存器、計時芯片、中斷芯片、DMA控制器等

2Initial

枚舉設(shè)備,初始化寄存器,分配中斷、IO端口、DMA資源等

3Setup

進(jìn)行系統(tǒng)設(shè)置,存于CMOS中。一般開機(jī)時按Del或者F2進(jìn)入到BIOS的設(shè)置界面。

4)常駐程序

INT 10h、INT 13h、INT 15h等,提供給操作系統(tǒng)或應(yīng)用程序調(diào)用。

5)啟動自舉程序

POST過程結(jié)束后,將調(diào)用INT 19h,啟動自舉程序,自舉程序?qū)⒆x取引導(dǎo)記錄,裝載操作系統(tǒng)。

4       BIOS源代碼結(jié)構(gòu)分析

4.1    AMI BIOS代碼結(jié)構(gòu)分析

AMI BIOS的代碼主要分成三大部分:核心代碼、芯片代碼和OEM代碼。

核心代碼目錄結(jié)構(gòu)如下:

4.2    AWARD BIOS代碼結(jié)構(gòu)分析

AWARD BIOS的源代碼為進(jìn)行目錄分類,所有的源碼、編譯鏈接工具、生成的中間文件都在同一個目錄中。沒有AMI代碼結(jié)構(gòu)組織得好。

5       BIOS常駐程序介紹

開機(jī)自檢程序運(yùn)行完后,將撤出內(nèi)存。BIOS提供了一組常駐程序,主要包括INT 10h,INT 13hINT 15h等等中斷服務(wù)例程,提供給操作系統(tǒng)或應(yīng)用程序調(diào)用,下面介紹幾個常用的中斷服務(wù)例程。X86提供了256個中斷,中斷向量表在內(nèi)存的起始地址1024byte上,每個中斷向量地址占用4個字節(jié)。

5.1    INT 13h中斷例程

INT 13hBIOS提供的對磁盤進(jìn)行操作的中斷例程,包括如下幾種調(diào)用方式:

1INT 13H,AH=00H 軟、硬盤控制器復(fù)位;

2INT 13HAH=02H 讀扇區(qū)說明;

3INT 13HAH=03H 寫扇區(qū);

4INT 13HAH=04H 檢測扇區(qū);

以上調(diào)用方法詳細(xì)的說明請參考相關(guān)技術(shù)文檔。

舉例:讀取軟驅(qū)001扇區(qū)的內(nèi)容到0:200

mov ax,0                     /* 初始化ax寄存器為0 */

mov es,ax                    /* es置為0 */

mov bx,200h        /* bx設(shè)置為200h ,此時es:dx = 0:200,為內(nèi)存地址*/

mov al,1                      /* al保存扇區(qū)數(shù) */

mov ch,0                     /* ch保存磁道號 */

mov cl,1                  /* cl保存扇區(qū)號 */

mov dl,0               /* dl保存驅(qū)動器,0表示軟驅(qū)A */

mov dh,0                     /* dh保存磁頭號 */

mov ah,2                     /* ah保存int13要調(diào)用的功能號,2表示讀 */

int 13h                         /* 調(diào)用int13中斷 */

入口參數(shù):

ah=int 13h的功能號

al=讀取的扇區(qū)數(shù)

ch=磁道號

cl=扇區(qū)號

dh=磁頭號(對于軟盤即面號,因?yàn)橐粋€面用一個磁頭來讀寫)

dl=驅(qū)動器號 軟驅(qū)從0開始,0:軟驅(qū)A1:軟驅(qū)B;硬盤從80h開始,

80h:硬盤C,81h:硬盤D

esbx指向接收從扇區(qū)讀入數(shù)據(jù)的內(nèi)存區(qū)

返回參數(shù):

操作成功:ah=0,al=讀入的扇區(qū)數(shù)

操作失敗:ah=出錯代碼

 

5.2    INT 10h中斷例程

屏幕I/O接口,切換各文字/圖形模式,提供顯示/繪圖卷頁服務(wù)。詳細(xì)的調(diào)用方法可以參考相關(guān)的文檔。例如00號功能:

功能號:00H

功能:設(shè)置顯示模式
入口參數(shù):AH=00H
   AL=
顯示模式

顯示模式列表:

顯示模式  顯示模式屬性
  00H       40×25    16
文本
  01H       40×25    16
文本
  02H       80×25    16
文本
  04H       320×200   4

  05H       320×200   4

  06H       640×200   2

  07H       80×25     2
文本
  08H       160×200  16

  09H       320×200  16

  0AH       640×200   4

  0BH      
保留
  0CH      
保留
  0DH       320×200  16

  0EH       640×200  16

  0FH       640×350   2
色(單色)
  10H       640×350   4

  11H       640×480   2

  12H       640×480  16

  13H       320×200 256

 

5.3    INT 16h中斷例程

BIOS提供的鍵盤讀取中斷服務(wù),功能如下表:

AH

功能

返回參數(shù)

0

從鍵盤讀一字符

AL=字符碼

AH=掃描碼

1

讀鍵盤緩沖區(qū)的字符

ZF=0

AL=字符碼

AH=掃描碼

ZF=1,緩沖區(qū)空

2

取鍵盤狀態(tài)字節(jié)

AL=鍵盤狀態(tài)字節(jié)

 

調(diào)用方法:

MOV  AH0         ; 讀字符功能
INT
  16H          ; 鍵盤BIOS調(diào)用

 

5.4    debug工具獲取中斷例程的內(nèi)存地址

DOS模式下,進(jìn)入DEBUG,輸入

a100

int 10

t=100

0210:08A9

int 10h的中斷服務(wù)程序入口地址存放在中斷向量表中的物理地址是0000:0040H~0043H,指向CS:IP(0210:08A9),如下圖執(zhí)行結(jié)果:

 

6       啟動過程分析

6.1    Linux系統(tǒng)開機(jī)啟動的總體流程

 

 

6.2    BIOS啟動過程概述

BIOS啟動的過程主要包括POST過程和自舉過程,其流程和執(zhí)行指令地址的變化如下:

 

6.3    POST過程分析

POST過程在AWARD BIOS的源碼中在BOOTROM.ASM文件中BootBlock_POST函數(shù)過程中實(shí)現(xiàn),主要步驟如下:

1)初始化各種主板芯片組

2)初始化鍵盤控制器8042

3)初始化中斷向量 ,中斷服務(wù)例程.

4)初始化 VGA BIOS 控制器

5)顯示BIOS的版本和公司名稱

6)掃描軟驅(qū)和各種介質(zhì)容量

7)讀取CMOS的啟動順序配置,并檢測啟動裝置是否正常

8)調(diào)用INT 19h啟動自舉程序

以上每個過程都有大量的代碼,在這不一一做仔細(xì)分析,請參考源代碼。下面對第三步源碼做一些分析。

6.4    中斷向量表初始化過程源碼分析

中斷向量表存儲在內(nèi)存的第一個1k空間里,本節(jié)主要分析AWARD BIOS中中斷向量服務(wù)例程的初始化過程。

;[]==============================================================[]

;

;      Initialize int. vectors (0-77h) to the spurious interrupt

;      handler. Then initialize 00h-1fh to their proper places.

;

;[]==============================================================[]        

POST_CODE 12

 

              mov ax,cs

              mov ds,ax

 

;

;      Initialize vectors 00-77h to SPURIOUS_INT_HDLR

;   。。。。。。

       。。。。。。

       。。。。。。

;

;      Initialize vectors 00-1fh to the real handlers

;

 

              lea   si,DGROUP:Int_Tbl

p10_21:

              lodsb                           ;load next offset

              cmp al,0ffh                   ;over?

              je    short Init_Vect_Over   ;Yes,skip

              movzx    di,al               ;get vector number

              shl   di,2                      ;set to coresspond offset

              movsw                        ;load offset from DS:[SI]

              mov ax,cs             ;get segment

              stosw                          ;load segment

              jmp short p10_21 ;next cycle

Init_Vect_Over:

 

              mov al,10111100b              ;Enable IRQ 0,1,6

              out  a8259+1,al

              sti

看以上藍(lán)色部分代碼,為初始化中斷服務(wù)例程,紅色部分Int_Tb1BIOS定義的中斷服務(wù)例程列表,用于替換相應(yīng)的中斷服務(wù)。Int_Tb1的定義如下:

INT_TBL:     db   2                          ; INT02

              DW OFFSET DGROUP:NMI_VECT           ; INT02 offset

              db   6                          ; INT06

              DW OFFSET DGROUP:LOADALL             ; INVALID OP-CODE

              db   8                          ; INT08

              DW OFFSET DGROUP:TIMER_VECT       ; INT08 offset

              db   9                          ; INT09

              DW OFFSET DGROUP:KBDINT_VECT    ; INT09 offset

              db   0eh                       ; INT0E

              DW OFFSET DGROUP:DSKINT_VECT     ; INT0E offset

              db   11h                       ; INT11

              DW OFFSET DGROUP:EQ_VECT              ; INT11 offset

              db   12h                      ; INT12

              DW OFFSET DGROUP:MEM_SZ_VECT   ; INT12 offset

              db   13h                      ; INT13

              DW OFFSET DGROUP:DSK_VECT           ; INT13 offset

              db   15h                      ; INT15

              DW OFFSET DGROUP:Multi_Service   ; INT15 offset

              db   16h                      ; INT16

              DW OFFSET DGROUP:KBD_VECT           ; INT16 offset

              db   19h                      ; INT19

              DW OFFSET DGROUP:INT19_VECT  ; INT19 offset

              db   1Ah                      ; INT1A

              DW OFFSET DGROUP:INT1A_VECT       ; INT1A offset

              db   1Eh                      ; INT1E

              DW OFFSET DGROUP:FD_BIOS_PARMS       ; INT1E offset

              db   0ffh                      ; over

中斷服務(wù)例程對應(yīng)的函數(shù)也在Bootrom.asm文件中有實(shí)現(xiàn)。替換的中斷服務(wù)例程總結(jié)如下。

中斷號

BIOS中斷例程

屬性

備注

INT02

NMI_VECT

硬中斷

None Maskable Interrupt,不可屏蔽中斷

INT06

LOADALL

錯誤中斷

非法,不支持的指令

INT08

TIMER_VECT

硬中斷

IRQ0,系統(tǒng)定時器中斷

INT09

KBDINT_VECT

硬中斷

IRQ1,鍵盤中斷

INT0E

DSKINT_VECT

硬中斷

IRQ6,軟盤驅(qū)動器讀寫中斷

INT11

EQ_VECT

軟中斷

PC外圍設(shè)備檢查

INT12

MEM_SZ_VECT

軟中斷

PC主存儲器大小檢查

INT13

DSK_VECT

軟中斷

磁盤I/O接口(讀寫、復(fù)位等)

INT15

Multi_Service

軟中斷

卡帶接口服務(wù)程序,AT擴(kuò)展中斷服務(wù)調(diào)用,程序多任務(wù)

INT16

KBD_VECT

軟中斷

鍵盤讀取服務(wù)程序

INT19

INT19_VECT

軟中斷

激活操作系統(tǒng)的入口點(diǎn)

INT1A

INT1A_VECT

軟中斷

BIOS時間接口

INT1E

FD_BIOS_PARMS

軟中斷

軟盤驅(qū)動器參數(shù)地址表

AWARD的其他中斷服務(wù)調(diào)用未在BIOS中指定服務(wù)例程。

6.5    自舉過程源碼分析

自舉過程即為執(zhí)行中斷INT19的中斷服務(wù)例程INT19_VECT的過程,該過程在AWARDBootrom.asm文件中實(shí)現(xiàn),其主要功能為讀取操作系統(tǒng)啟動塊,將其讀入到內(nèi)存0000:7C00h,并跳轉(zhuǎn)至此處執(zhí)行。下面分析一下操作系統(tǒng)啟動塊MBR是如何從磁盤中讀取到內(nèi)存0000:7C00h處的。

new_dsk:

              xor  dx,dx

              mov es,dx                    ; set to load at 0:offset Boot

 

              mov bx,offset Boot       ; location to load boot sector

              mov cx,1                      ; set to read one sector

[U1] 

              xor  ax,ax

              int    13h                             ; reset disk

[U2] 

              mov ax,0201h              ; read boot record

              int    13h                             ; read disk

              jc    short Boot_fail

[U3] 

              call  Check_Boot_Record  ; check boot sector valid ?

              jc    short Boot_fail             ; invalid boot sector.

              jmp far ptr Boot               ; go to boot code

[U4] Boot_Fail:

              lea   ax,Bad_Disk_Msg       ; boot failed

              mov cx,Bad_Disk_Msg_Len

              call  Disk_Fail_Routine

[U5]         xor  ax,ax                           ; g_ram

              jmp short new_dsk

[U6] 

 

 

Disk_Fail_Routine:

 

              mov dx,0ff01h

              call  Display_Str

 

       ;Beep out if no bootable media

              mov bl,2                      ; beep on override

              mov cx,1700h

              call  SND_SPKR_TONE

              xor  cx,cx

              loop       short $

              mov bl,5                      ; beep on override

              mov cx,3000h

              call  SND_SPKR_TONE

[U7] 

       ;wait for 'Enter' key to continue

endless:

              xor  ah,ah                           ;wait ENTER key

              int    16h

              cmp ah,1ch

              jne   short endless

 

              ret

[U8] 

流程圖如下:

 

7       參考資料

1AMIAWARDBIOS源碼

2grub-0.97.tar.gz源碼

3AMI BIOS98 User Guide

4AMI BIOS98 Technical Reference

5)《BIOS研發(fā)技術(shù)剖析》

6)網(wǎng)站搜索內(nèi)容:

BIOS之家:www.

Google


 [U1]初始化es:dx = 0000:7C00

 [U2]復(fù)位磁盤

 [U3]讀取引導(dǎo)記錄,失敗則跳轉(zhuǎn)至Boot_Fail

 [U4]檢查啟動扇區(qū)內(nèi)容是否有效,無效則跳轉(zhuǎn)至Boot_Fail,有效則直接跳轉(zhuǎn)至啟動代碼

 [U5]Boot_Fail過程,初始化啟動失敗信息,并調(diào)用磁盤失敗例程

 [U6]跳轉(zhuǎn)至new_dsk,重新引導(dǎo)

 [U7]磁盤失敗例程,顯示啟動失敗信息,并發(fā)出兩次報警

 [U8]等待用戶輸入”Enter”鍵,并返回至調(diào)用處,即批注U6處。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多