|
|
一旦正確的頻率供給給system後, BIOS便依據既定的POST table(類似行程表)來做事. 首先,與chipset最為相關的便是 [chipset config stage]. 意即,在此階段BIOS必須對 chipset registers填入正確的值,俾使其正常運作. 一般而言,要config下列的 devices:$ Z- r& c* o+ Q3 V
- NB(還記得前面有提過北橋內部約可分 4 blocks; "有些" blocks 需要 在此 program...)+ j5 j8 y- a$ d4 Q
- SB(即 PCI-ISA bridge)
. `* c* t. Y) f. u- ACPI registers3 c+ h: a Z6 A# ]0 p$ j3 n
- USB registers
; l- E7 d) y8 @; l- SATA registers
8 i+ H5 ?3 I5 i, w) R# t# z- ^- PATA registers7 V( K l, x8 \- Q( ?3 | i
...; F5 _ ?4 I' y( Q
9 ]% l% a+ p W+ V
* 在此所謂的 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之處 !!!
7 u4 \ [- X$ ?9 Y9 x: W! k
$ y6 D5 M! P! ?& k# G& w9 {" Z* ACPI registers通常透過 IO 來存取 Y' \& G) J$ c- e* a5 H5 k& Q
Ex. // assume ACPI Base is 800h,要 access ACPI Reg55h2 \) y. l' t6 y+ o2 V
mov dx, 855h+ n4 L2 z2 a6 W2 ~
in al, dx ; <- al = ACPI Reg55h's value
& N) G z3 z8 Q, S4 Y: F; _) ^( Z% q }( K! w" `( h8 D5 U
* 上述所列的 devices多為 PCI device,也都有唯一的PFA(PCI Function Address,即 bus#,device#,func#),也因此,只要對 device 下 PCI configuration read/write便可以 config device registers.% a+ [ u0 S' D
3 Q* S' s/ N; G- ^, f' h- b
Ex. 假設: set SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)
0 p! I# @* N) n: G0 M3 V=> 簡單的 assembly can be:
- C9 ~% @, W4 k$ I6 s! e
# d/ R2 C9 ~" q& ^9 \" imov eax, 80002750h; G! v$ \- I8 h0 l2 f; @
mov dx, 0cf8h
2 y- m3 L$ K3 X' u5 b! t( mout dx, eax! ~* k$ h9 I. l% d, X
% R* [# r) `1 k5 j2 c6 j" Gmov dx, 0cfeh
& ~4 H! W$ h$ R Lin al, dx
4 ~+ T$ w5 @* @" d+ Oor al, 00001000b
* B% ]' A7 C! k' ^out dx, al
J! [ ~ G. `# Y1 t* s3 F4 J. k: O/ ^( f3 x; ~' w
事實上每家BIOS都 maintain many "tables" 來說明: 哪一個 device 中的哪些 registers要填?值.相關的 access routine都已經寫好. Programmer只需更改表裡面的值即可 ^_^8 X' K+ F1 ?2 w4 z# P4 k
F" {7 J" o0 m y: A*當有人要求改 register setting時,我們必須知道三件事:
" Z# C M/ F6 k/ r( a1. why (為什麼要改?)
; m/ z: P' Y+ Z/ F$ Z T! @, f2 n2. what(改成何值?)
. j+ n) G- ~9 Z& C8 v3. when(什麼點改?)- k) e7 p+ Z; {1 O6 [7 `
6 b, I$ S$ H6 i) t8 c b0 ~*對於 BIOS kernel與 OEM coding的人言,這部分會是較少碰觸的,因為,這些code會由 chipset porting的人負責撰寫及維護.
" R1 b" ?) g, j+ m, c# Z8 N: u0 d張貼者: HARRISON HSIEH 位於 8:41 下午
( H4 V _+ w; a( q/ P5 B* P. D標籤: BIOS相關
+ I. W( h3 B$ u% ~' V6 意見:
3 Q' [$ V- \& d3 [5 B# e+ g
% ^0 U2 K0 f: }) J& ^. j5 _tonyya 提到...
7 V+ a! }, X: e/ s8 r) @6 F無意間發現你的部落格1 b& R+ @3 O1 c, {$ v
4 H( m0 f! i9 R4 M7 w, O3 X. x/ h5 I
很多文章都覺得受益良多
. h+ ~& k8 M9 j6 ?
7 U- b, n1 s3 V+ h" _4 T我也剛接觸這門領域不久
# n! R n% n& E3 f- t% V' d; w
/ w3 Q( j. ]: Y" A很多東西都似懂非懂% {: @$ s$ o4 s' G- s; T
5 e* v; `( i' O+ P: @3 Q不知對於一個新人而言
2 }% X7 P5 R E
# T3 L( v* `$ E, ~, J有沒有什麼好的訓練方式
1 E8 l: ^' n9 n" F& @' s/ i( h2 J) }+ q6 H
可以及早進入狀況* X7 @! e! p2 m3 _2 g/ p/ T6 B
十月 03, 2007 5:53 上午 k0 D. q2 f+ O7 {; }6 h
7 A) e1 u' P/ \ ?' ^# c1 xHarrison 提到... 5 v$ H% R8 V3 T3 L7 o$ V
現在的BIOS有分成Legacy BIOS(組合語言)與UEFI BIOS(C語言),但是這兩種BIOS對於一個剛接觸的新手來說就只是Win98跟WinXp使用方式的差別而已,介面不同,但是要做的事情幾乎一樣。
/ r& b) r/ u7 z! O3 p( H4 _+ d4 U9 x4 d
所以我的建議是多去了解這些工具的用法(組合語言指令/C語言用法)還有多看看Intel IA32 Architecture guide vol1~3(目前最新版是IA64),因為了解系統架構才是最基本的。. D; y) S2 t2 H
' D9 f9 a4 n; |" ~ g如果要快速上手的話,你就先必須知道"設定方式",例如: 如何填CMOS/PCI Register(CF8/CF9),還有如何調整PIRQ/GPIO/ASL Code...等,如何透過SMbus/LPC存取? 何謂KBC/EC? 又要如何把OpROM 載入到記憶體,然後把控制權交給OpROM,執行後又把控制權還給BIOS/CPU Microcode如何更新?...etc. 這些都是基本OEM BIOS會做的事情,至於BIOS核心就必須很了解IA32架構你才有辦法去做。2 h9 P x6 m* h2 [; C; h. T$ g
十月 04, 2007 5:39 下午
- L- U1 V o; w3 J0 O, N 9 m6 ~+ A6 f( f x j
tonyya 提到... 7 B6 A# A3 J$ G6 S& u$ b4 R* Z
首先感謝你的回覆5 }2 T8 l5 E" ?5 S8 q
9 x3 `; y' v" \& v! b* V/ o4 @
1.目前接觸的是Legacy BIOS(組合語言)/ g* S2 x* ]6 O
# q4 {+ M O, T d) s, ?; f. M
2.IA32的系統架構有在看,目前也在積極補強一些相關的spec知識,不過還是要有實際做過才有感覺,對我而言如果只是光看的話無法深刻的體會
6 {/ Q: P3 r" y- r9 K( C; |( Z# q% ~6 a, i" @& A
3.關於你說的設定方式,有的有碰過,像是PCI,ASL code,SMBUS/LPC, CPU Microcode更新,我會去補強你所提到而我沒碰到的部份 e- D, \7 ], D' Z8 \. m
; e! Y# C# o2 q1 D+ ]4.進入這行的感想是對於一些硬體的知識比以前來的了解,辛苦的是要一直摸索找方向,雖然東西很多要K,問題就在於太多東西反而有時不知從何著手 @@!, w; K& y2 H7 B" z7 z6 O
( ]1 d: o* K* Z& U' T- P5.再次感謝你所提供的意見
# b: @3 o1 g! b十月 05, 2007 8:09 上午 6 J) q% H) k$ {: O
) |1 ^5 y0 y; c, i$ }; s
chiehlin@mail2000.com.tw 提到...
$ l0 A: @+ r O9 P/ _PCI Register 是 cf8 cfc Index ,Data, O+ v/ d$ h) R, q' P
十月 25, 2007 11:17 上午 1 U9 y( ^% W, {8 ~% v* o0 ?
5 Z2 @" A3 d( {! x0 S: }8 v) F# @PT 提到...
: M- m' p/ R7 e, m關於SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)
. J" k }- Q! l0 h6 S, Imov eax, 80002750h' D5 \4 R( ]5 r6 I% ^/ E! X
依照我的理解方式是6 I! w. u" V: b0 W+ m1 Y7 Z
10000000^00000000^00100^011^01010000' A/ B# E, a0 t+ ~& m2 R* q. _
所以應該是80002350h |
|