一般而言,BIOS会在POST时 locate 3 devices:
- Input device(Ex. Keyboard)
- Output device(Ex. Display device)
- IPL(Initial Program Load, Ex. HDD)
这次要提到的是 Display device,即 VGA !
在PCI_SCAN之后,BIOS会在内存中建立一个data structure,代表整个系统的 PCI architecture.
Ex. Ponter-> NB->P2P->SB->IDE->AUDIO->LAN->USB 2.0->USB 1.1->...->VGA->...->End
在VGA_init的阶段,BIOS会去 go-through this list,一个个的问:"有没有人需要shadow Option ROM的 ?"
-------------------------------
*1 在此,先break,并说明一些观念:
1. Option ROM是 for H/W的 firmware;像BIOS一样是 for MB.有可能直接在硬件上 ,or 包在BIOS image中
2. 有Option ROM的 H/W可能有: VGA card,Lan card, RAID card,...etc
3. VGA's Option ROM 也就是 VBIOS ! 专门处理 screen I/O operation(主要是int10h)
4. VGA "shadow" 即代表: 将 VBIOS copy 到 shadow RAM, Ex. C0000h~C7FFFh处(32K)
5. VGA init这个阶段只 consider "VGA device" ! for 其他 device,之后再考虑其 shadow的事宜
-------------------------------
(承接前面的 flow):此时,VGA device会举手说:"我要" !此时,BIOS会去寻找VGA device's Option ROM(即VBIOS)在哪里;此时,VBIOS有可能在card上 or "当初" 被包在 BIOS image中(*2)
一但找到,则会先 作一些 checks:Ex.
- Option ROM signature is 0xAA55 ?
- 比较 Option ROM内的 Vendor ID/Device ID = H/W's IDs ?
- class code and sub-class code correct ?
- length = 0 ?
...etc...
若都符合,则视它为 VGA Option ROM(VBIOS) ! 之后,利用 memory to memory copy将之 copy到 shadow memory,从 C0000h处开始存放...
复 制完后,再 check "checksum"是否正确;if yes then jump to "entry of initialization code(image的offset 3)",控制权自此转移至 VGA Option ROM,由它去做 initialize VGA的工作 ! ( 若是CRT屏幕,user会听到ㄉ一ㄤ的一声 ! 即代表 initialize VGA成功 !!! )
<- 此为 VGA_init的工作 !!!
*2 说"当初"的原因是: VGA BIOS若包在BIOS image中,在 BIOS shadow时,也会被一并 copy到内存的某处放着;当然,会记住存放处 !
[Note] 一般遇到 VGA init fail的issue时,可以先 check:是否 VGA BIOS已被 copy 至 C0000h处;若有,则check是否已经 jump to VBIOS or NOT;若否,则可以往前 check是否前面所列的一些 "关卡"没过 (Ex. ID不 match, or checksum 不相等...etc )
<Summary> VGA 若 ok,计算机就是彩色的 ^_^
阅读全文类别:我所知道的bios系列整理(转载小华的部落格) 查看评论