|
|
一旦正確的頻率供給給system後, BIOS便依據既定的POST table(類似行程表)來做事. 首先,與chipset最為相關的便是 [chipset config stage]. 意即,在此階段BIOS必須對 chipset registers填入正確的值,俾使其正常運作. 一般而言,要config下列的 devices:8 Y* H, u! c" j
- NB(還記得前面有提過北橋內部約可分 4 blocks; "有些" blocks 需要 在此 program...). u) g7 s: E7 F7 k
- SB(即 PCI-ISA bridge)
" w/ T. n) }) u3 A1 V- ACPI registers
n! n2 l) \3 w" a+ u1 V& p& \1 O- USB registers7 [& k7 U' [3 G) @2 H6 ^
- SATA registers! ^$ ~( j7 Q9 v& ^( v1 Y: l0 G. t
- PATA registers2 @$ J% R Y+ h# G2 W: s
...
8 V1 W" `) b2 a# O
5 W# k9 B" \+ i. S4 i4 Q* 在此所謂的 registers指的是: PCI config registers(除了ACPI registers以外). PCI spec所定義的 PCI config registers 00~3Fh 為 PCI header part,這個範圍的registers並不是此階段的主要工作(當然還是會touch,只是不多),而是稍後BIOS PCI kernel的事情.此階段將 focus on ffset 40h以後的 registers,因為,這些是 device specific的部分,是 chipset自己加function/feature之處 !!!
9 v C T3 a+ [' i( }+ n/ g# v' Z6 B6 d; s, Y- J1 h! z* Z
* ACPI registers通常透過 IO 來存取
6 V; n3 @* {" ^5 x3 j; TEx. // assume ACPI Base is 800h,要 access ACPI Reg55h+ W |0 H- F/ K/ w4 H& X5 ^% X
mov dx, 855h
- G( B; l7 P1 iin al, dx ; <- al = ACPI Reg55h's value( @# U, `% q1 e5 S/ `" R
) N6 s. s3 R" G; h3 F! ?/ |% Y" r* 上述所列的 devices多為 PCI device,也都有唯一的PFA(PCI Function Address,即 bus#,device#,func#),也因此,只要對 device 下 PCI configuration read/write便可以 config device registers.
9 j( K2 @4 z6 ^+ X( {+ ^# S$ [5 p/ b$ `9 Y! s7 z" m
Ex. 假設: set SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)+ {% j( e2 \6 ]1 Y2 Y, z
=> 簡單的 assembly can be:3 V$ ^6 l# R; @4 q/ I# P6 \4 M
/ S6 i1 V k, R/ t7 u
mov eax, 80002750h
g: t' j/ a; P; h2 \mov dx, 0cf8h+ D- ]" V2 k: }" D9 e1 k# t
out dx, eax
1 Q0 S) d. r! z( |: }) S
3 g, [ W- S+ W9 \4 _mov dx, 0cfeh/ j) F0 i" Y; @$ W
in al, dx7 e0 w0 }+ M# x" Q0 q4 \- \8 \7 y8 {+ P
or al, 00001000b# ^; m, m3 m+ V: d6 Q8 U" P: q
out dx, al ) Z5 c) R' b) A- v% J
" {3 @5 t% Y7 W& G, g2 q事實上每家BIOS都 maintain many "tables" 來說明: 哪一個 device 中的哪些 registers要填?值.相關的 access routine都已經寫好. Programmer只需更改表裡面的值即可 ^_^& m6 W+ P5 r6 C9 _; s
- W* Z- D9 F$ A$ _
*當有人要求改 register setting時,我們必須知道三件事:
, W) ~' ?+ B( X! E7 s8 g" [1. why (為什麼要改?)& Q( |, p" z$ N6 ]
2. what(改成何值?)$ O9 C y: F: b, i8 U6 T3 u6 G- S. P
3. when(什麼點改?)) h" F& W) L& R
+ f J# W5 e- l/ b% V
*對於 BIOS kernel與 OEM coding的人言,這部分會是較少碰觸的,因為,這些code會由 chipset porting的人負責撰寫及維護.
2 B" S, ?" {) u8 X6 o張貼者: HARRISON HSIEH 位於 8:41 下午 + g2 N" E: }2 |( ^
標籤: BIOS相關
3 b5 U0 @1 P/ W3 o/ X6 意見:
. r$ A1 `; y7 F* T/ t7 {0 G 8 a5 \( s7 A8 z+ g; v3 v% R
tonyya 提到...
" _' m7 k# b7 j1 |* s無意間發現你的部落格& W8 u1 c+ I) [
" W/ e6 C7 G/ o9 Y7 E5 N8 e/ n
很多文章都覺得受益良多
# z8 p) A$ y) O, H) @/ S, u$ c
& M4 g2 H% a& Q% g7 J我也剛接觸這門領域不久* X* ^& s1 u1 H% M) h X
" ?0 i* o$ u8 u, H& m+ S& g6 S
很多東西都似懂非懂/ x6 \" Z7 e! @ p; o' }& {" L0 m! F3 a
6 ]+ R% M5 T3 }- z! ^. W" j
不知對於一個新人而言- v! ?/ j" ^9 U
9 V* g3 i$ M3 m# {7 u有沒有什麼好的訓練方式
7 Y1 `% R5 S2 V. z D4 e$ v+ l1 t; O7 [7 r# `( q
可以及早進入狀況* Y2 |) e+ e1 q) V
十月 03, 2007 5:53 上午
0 M5 s0 U7 w. u4 R8 X
4 t: b9 r" y( J0 k8 wHarrison 提到... 5 {! a. y: E8 Y, J
現在的BIOS有分成Legacy BIOS(組合語言)與UEFI BIOS(C語言),但是這兩種BIOS對於一個剛接觸的新手來說就只是Win98跟WinXp使用方式的差別而已,介面不同,但是要做的事情幾乎一樣。
0 A2 D3 {0 j2 _1 R4 N- p$ K$ K, R, g# _9 T' j2 b+ Z
所以我的建議是多去了解這些工具的用法(組合語言指令/C語言用法)還有多看看Intel IA32 Architecture guide vol1~3(目前最新版是IA64),因為了解系統架構才是最基本的。
: o! I, `3 k3 N) J( z& u7 @% }7 M) ` \- ^* U! n
如果要快速上手的話,你就先必須知道"設定方式",例如: 如何填CMOS/PCI Register(CF8/CF9),還有如何調整PIRQ/GPIO/ASL Code...等,如何透過SMbus/LPC存取? 何謂KBC/EC? 又要如何把OpROM 載入到記憶體,然後把控制權交給OpROM,執行後又把控制權還給BIOS/CPU Microcode如何更新?...etc. 這些都是基本OEM BIOS會做的事情,至於BIOS核心就必須很了解IA32架構你才有辦法去做。
) A- R, k$ h" c& V \! ~6 d7 [十月 04, 2007 5:39 下午 3 G, z5 J$ I7 u# D$ @4 v, s$ C
: Q$ b! M4 g) G) H
tonyya 提到...
4 W6 `$ r- n9 v$ e( p& x7 `$ X首先感謝你的回覆, D/ f0 G6 i& ~. ]- w& z2 W
( O# q2 Z5 f) Y2 Q3 e! j9 b1.目前接觸的是Legacy BIOS(組合語言)
* z b8 T) N$ u, }
$ n9 j+ B3 [! E/ w# @% C2.IA32的系統架構有在看,目前也在積極補強一些相關的spec知識,不過還是要有實際做過才有感覺,對我而言如果只是光看的話無法深刻的體會
2 F& {! r- Q3 Z! I3 C7 v( u6 Y: g! m/ c2 ^" A4 Y
3.關於你說的設定方式,有的有碰過,像是PCI,ASL code,SMBUS/LPC, CPU Microcode更新,我會去補強你所提到而我沒碰到的部份
* `2 Q5 \! a+ ?5 E4 r$ S7 q4 H8 v: w" n$ _6 z
4.進入這行的感想是對於一些硬體的知識比以前來的了解,辛苦的是要一直摸索找方向,雖然東西很多要K,問題就在於太多東西反而有時不知從何著手 @@!
- C- v1 T6 V6 O+ N6 ?" E! B$ H0 K2 X
5.再次感謝你所提供的意見
* ?+ q. O% n2 M3 a+ {; Q( D十月 05, 2007 8:09 上午 & M' N8 t7 W- N/ q* L
8 l6 y: S" T. u& }* x3 i: r
chiehlin@mail2000.com.tw 提到... , N* c+ L4 v& `' b" p" e
PCI Register 是 cf8 cfc Index ,Data& Q; t1 d: P5 Q1 ~9 B/ j
十月 25, 2007 11:17 上午 A( r/ n9 T) U5 {
$ j2 j P+ K' @& }2 m2 g# l$ A
PT 提到...
$ Q$ c( M3 P* V& r$ x關於SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)
* y' F: {9 n$ K$ wmov eax, 80002750h# J: k4 H3 {$ e! ~
依照我的理解方式是4 P" C3 ^, _, l2 n E
10000000^00000000^00100^011^01010000# M* F8 j8 Z; X: ?
所以應該是80002350h |
|