[BIOS] BIOS Introduction

A.學習目標 (BIOS Introduction)
 
a. 瞭解BIOSPC中扮演的角色及相關的解釋名詞。
b. 瞭解基本的System Memory Map
c. 關於BIOS Training Course接下來課程的基本介紹。

B.大綱                                                
 
1. BIOS Brief Introduction
    1.1. What is BIOS?
    1.2. BIOS Definition    
    1.3. System Memory Map
    1.4. BIOS Category    
    1.5. BIOS Vendor    
    1.6. Vendors of Flash ROM
    1.7. First Instruction Executed

C. BIOS Brief Introduction
 
C.1. What is BIOS?
 
Acronym: Basic Input Output System
Function: Perform all necessary functions
                Properly initialize the system's hardware (POST-Power on Self Test)
                Keyboard, video display, communications ports, and disk drives
Store medium: Flash ROM (Read Only Memory)
Interface: Between OS/AP and H/W (Firmware韌體)
Language: Assembler or C (EFI BIOS)

C.2. BIOS Definition
 
BIOS -- Basic Input and Output System, is used for initializing, testing and putting the PC into the ready state so that an OS may be started. Part of the BIOS remains in the system main memory after POST (Power on Self Test). BIOS provides a consistent software interface to varying types of the hardware devices. It also provides the basic system level services to OS. The BIOS is also used for helping IHV to fix their hardware design bugs by using the SMM mode of the IA architecture.
BIOS,基本輸入輸出系統(Basic InputOutput System),其內容儲存在主機板上的一個ROM內,主要儲存著有關系統最重要的基本輸入輸出程式,系統訊息設置、Post程式和Boot to OS程式等。

所有會在BIOS之前發生的操作就只有Power On,也就是按下電腦上電源開關的那一瞬間。在Power On階段一開始,會進入BIOS的啟動流程,當使用者按下電源開關,CPU會先被啟動去尋找BIOS中的第一道指令,接著BIOS會在Flash Memory中執行,配合著CMOS中使用者所喜好的設置,然後BIOS會將自己解壓縮到電腦的主記憶體中繼續執行。

BIOS的基本功能:
(1.)   POST (Power On Self Test) 開機自我測試
       包括對CPU各項暫存器、MemoryROMMain boardCMOS記憶體video displaycommunications portsdisk drivesKeyboard進行測試。

(2.) Initialize
  初始化硬體,設置其基本狀態,使得整個計算機達到所謂的Ready State,使得硬體能夠按照PC的架構工作,
  BIOS必須要按照由IHV提供的手冊將硬體設置 好,比如寫幾個必須的register之類的,做一些enable的工作。
  初始化立的內容大致上有
  (a) Build up Interrupt Vector Table (建立中斷向量表)
  (b) System Resources Allocation
  (c) Register
  (d) I/O Device

  Note:
  IVH (Independent Hardware Vendor) An organization that makes electronic equipment. It implies a company that specializes in a niche area,
  such as display adapters or disk controllers, rather than a computer systems manufacturer.

(3.) 系統設置程式
       記錄系統的設定值並且儲存在 CMOS or FLASH Memory 的 ESCD 區域
        主要儲存著系統基本情況、CPU特性、軟硬碟驅動器、顯示器、鍵盤等部件的
        訊息。在 BIOS ROM 晶片中裝有"系統設置程式",主要用來設置CMOS RAM中的各項參數。
        這個程式在開機時按下某個特定鍵即可進入設置狀態,並提    供了良好的介面供操作人員使用。
        事實上,這個設置CMOS參數的過程,習慣上也稱為" BIOS設置"
        一旦CMOS RAM晶片中關於微機的配置訊息不正確時,輕者會使得系統整體執行性能降低、軟硬碟驅動器等部件不能識別,
        嚴重時就會由此引發系統的軟硬體故障。

        CMOS設置程式:BIOS啟動時會先去確認CMOS中的資料是否正確。
       如果正確,便會將之前使用者存儲在CMOS的資料,加上已存或找到的硬體資訊,
       整合成一個表格,寫到記憶體中,也就是所謂的SMBIOS
       如果發現錯誤,則會自動以預設值取代CMOS提供的資料。
       所以這份寫入記憶體的SMBIOS表格,就是使用者進入BIOS選項後,可以看到或選擇的所有資訊。

(4.)  Boot to OS
        啟動OS Loader引導載入作業系統。
        啟動操作系統,這也是BIOS必須要做的事情之一。啟動的方式是由BIOS規定,操作系統必須按照BIOS的要求來設計。
        這也是為什麼操作系統從DOS一直到Vista,都只能把自己的loader放在MBR,因為BIOS只讀MBR。當然,在EFI時代,這一點有所改變,
        EFI支援的Boot From File不在需要MBR
        系統在完成 POST自檢後, ROM BIOS 就首先按照系統 CMOS設置中儲存的啟動順序搜尋軟硬碟驅動器及CD-ROM
        網路服務器等有效地啟動驅動器,讀入操作系統啟始記錄,然後將系統控制權交給啟始記錄,並由啟始記錄來完成系統的順利啟動
        (Between OS/AP and H/W)
                

       (5.)  程式服務處理和中斷服務程式 *(提供常駐程式庫)
       在OS啟動起來以後,BIOS的一部分繼續常駐於記憶體,提供OS以及其他軟體基本的系統服務,這兩部分是兩個獨立的內容,但在使用上密切相關。
       程式服務處理程式主要是為應用程式和作業系統服務,這些服務主要與輸入    輸出設備有關,例如讀磁片、檔輸出到印表機等。
       為了完成這些操作, BIOS必須直接與電腦的IO設備打交道,它通過I/O Port發出命令,向各種外部設備傳送資料以及接收資料,
       使程式能夠脫離具體的硬體操作,而硬體中斷處理則分別處理PC硬體的需求,因此這兩部分分別為軟體和硬體服務,組合到一起,
       使電腦系統正常運行。
       BIOS的服務功能是通過調用中斷服務程式來實現的,這些服務分為很多組,每組有一個專門的中斷。例如視頻服務(10H);螢幕列印(05H)
       磁片及串列口服務(14H)等。
       每一組又根據具體功能細分為不同的服務號。應用程式需要進行操作只需要在程式中用相應的指令說明即可,無需直接控制。
    BIOS會告訴CPU各硬體設備的IRQ,當周邊裝置、介面卡,或零件有狀況,就會發出IRQ中斷通知,接著CPU就會根據IRQ訊號使用相對應的硬體完成工作,
    之後該設備再送出EOI(end of interrupt)的訊號方式通知CPU,然後返回原先被中斷的程式繼續執行。

(6.) 修復硬體缺陷
        IA32e有個模式叫System Management ModeBIOS在每次開機時進SMM,利用BIOS載入Microcode修正CPU硬體上的bug,這叫做CPU Microcode update
        這樣CPU廠商不用回收出問題CPU

C.3 System Memory Map

 
這是一張DOS下的System Memory Map,看起來非常簡單,但是有一些重要的資訊,很值得一開始學習BIOS的我們仔細去看一看。
 
(1.) Interrupt Vector Table 內中放4byte為一組的pointer 指到真正interrupt code存放的memory位置,
      所以根據這個範圍0000:0000h~0000:0400h 我們可以知道,DOS    下最多只能有256 Interrupt
(2.) BIOS Data Area 放有關於PC的一些information(沒有固定的放置方法)
(3.) System BIOSExtended BIOS 範圍內放runtime service
(4.) C000:0000VGA相關的資料

Note:
個人電腦的RAM共可分為5種記憶體..
傳統記憶體(Conventional Memory):
640k以下。
 
延伸式記憶體(Extended Memory):
1M 以上。
 
擴展式記憶體( Expanded Memory):
另一種添加記憶體的方式,但是它不像延伸記憶體般線性地排列在1MB之後,
而是獨立於一旁,只要透過一塊640K~1MB間的位址空間,大小64KB的頁框(Page Frame),就可以將我們想要存放的資料或程式碼映射(Mapping)到擴展記憶體上。
早期的擴展記憶體是附在一張擴展記憶體擴充卡上。
 
UMB (Upper Memory Block):
640K1M之間的記憶體稱為UPPER MEMORY AREA (A0000H  FFFFFH),保留做為ROM BIOS及視訊等使用未被使用的記憶空間稱為Upper Memory Block
 
HMA (High Memory Area):
早期cpuregister16bits所能定址的記憶空間為0000:0000  FFFF:FFFF,但位址線只有20條,
所以當超過1MEGA就會繞回(wrapping)。現在的CPU其位址線都已超過20,我們可以令A20 enable,使wrapping的現象不再發生,如此即可控制1M以上的記憶空間了。
此塊區域(FFFF:0010  FFFF:FFFF)64K稱為HMA(High Memory Area)

C.4 BIOS Category
(1.) System BIOS
(2.) Video BIOS
(3) KBC BIOS
(4) I/O BIOS - SCSI BIOS or BOOT ROM (PXE ROM)

C.5 BIOS Vendor
(1.) Phoenix BIOS (Award BIOS被這家併購了)
(2.) AMI BIOS
(3.) Insyde Software

C.6 Vendors of Flash ROM
(1.) SST
(2.) Winbond
(3.) MXIC
(4.) Atmel

C.7 First Instruction Executed
The first instruction that is fetched and executed following a hardware reset is located at physical address FFFFFFF0H.
This address is 16 bytes below the processor supper most physical address.
The EPROM contains the software-initialization code must be located at this address.
The address FFFFFFF0H is beyond the 1-M Byte addressable range of the processor while in real-address mode.
hardware reset
後第一條指令的抓取和執行定址在FFFFFFF0H物理位址。
這一位址是處理器能定址到的最高的16位元組物理位址,
EPROM包含的軟體初始化程式碼正是定位在這裡(即FFFFFFF0H)。
FFFFFFF0H已經超出了處理器在實模式下可定址的1M位元組範圍。

The processor is initialized to this starting address as flows.
The CS register has two parts: the visible segment selector part and the hidden base address part.
In real-address mode, the base address is normally formed by shifting the 16-bit segment selector value 4 bits to the left to produce a 20-bit base address.
However, during a hardware reset, the segment selector in the CS register is loaded with F000H and the base address is loaded with FFFF0000H.
The starting address is thus formed by adding the base address to the value in the EIP register (that is, FFFF0000+FFF0H=FFFFFFF0H)處理器是這樣初始化這個開始位址的:
CS register
有兩個部分:可見的段選擇器部分和隱藏的基底位址部分。
Real mode下,正常是把segment selector左移4位而得到20位的base address(CS base address = CS segment selector*16)
然而,在hardware reset 期間 CS register 被載入為F000H並且base address被載入為FFFF0000H
所以開始位址是通過base address + EIP register的值得到的也就是,FFFF0000FFFF0H=(FFFFFFF0H

The first time the CS register is loaded with a new value after a hardware reset,
the processor will follow the normal rule for address translation in real-address mode (that is ,[CS base address=CS segment selector*16]).
To insure that the base address in the CS register remains unchanged until the EPROM based software-initialization code is completed,
the code must not contain a far jump or allow an interrupt to occur(which would cause the CS selector value to be changed). hardware reset 後,CS register第一次被載入了一個新值,
處理器會依照一般的real address mode轉換規則(也就是,CS base address CS selector * 16)。
為了確保在CS register存放的base address不被改變,直到EPROM的軟體初始化程式碼完成,
程式碼千萬不要包含 far jump 或者允許中斷發生 (這樣會導致CS selector value改變)

留言