|
一旦正確的頻率供給給system後, BIOS便依據既定的POST table(類似行程表)來做事. 首先,與chipset最為相關的便是 [chipset config stage]. 意即,在此階段BIOS必須對 chipset registers填入正確的值,俾使其正常運作. 一般而言,要config下列的 devices:& D0 `1 B' N( @3 \! ]9 |) ]* ^& f& s
- NB(還記得前面有提過北橋內部約可分 4 blocks; "有些" blocks 需要 在此 program...)- |. I) V9 z7 |/ Z2 L/ J1 J
- SB(即 PCI-ISA bridge)
+ |9 L6 c9 L" T. Q0 |- ACPI registers2 T1 S+ O0 Q/ @
- USB registers
1 D$ n7 Z6 h0 X2 ]8 q' T0 ^- SATA registers: T( ?+ M9 ]: D! B9 m
- PATA registers9 i0 h8 f4 m; L' K
..., K6 s3 a8 Y, c: c* u4 n/ M
% Q2 @. a' _. w+ v5 }$ Z* 在此所謂的 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之處 !!!$ |1 ]6 j7 S9 f: c9 M. r
/ u9 F0 }2 a6 x" B; t5 j
* ACPI registers通常透過 IO 來存取5 I6 x7 f0 Y. p) G
Ex. // assume ACPI Base is 800h,要 access ACPI Reg55h3 [& p- x/ ~9 r/ _5 D
mov dx, 855h
0 i' x/ D( O& {5 k- j4 Yin al, dx ; <- al = ACPI Reg55h's value
4 j" _9 Q5 v; z3 L8 E* V: n5 k- K! I% p: x
* 上述所列的 devices多為 PCI device,也都有唯一的PFA(PCI Function Address,即 bus#,device#,func#),也因此,只要對 device 下 PCI configuration read/write便可以 config device registers.( p- i( Z. D' ?* ?, V7 Y
3 T2 v4 l# o- r- s) e2 SEx. 假設: set SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)+ j' D+ q1 m2 I" ~' N
=> 簡單的 assembly can be:
3 n9 E. H3 O- O# |2 v# f# h) r7 w6 i0 }. h4 I( \; b: ]
mov eax, 80002750h
0 n* W' s; ^2 o& Umov dx, 0cf8h7 G0 J+ }8 B G! W: p, E
out dx, eax
8 {+ u$ g, a1 T) C1 J/ p R+ _1 A6 f( h/ {; D' g$ B7 c5 W2 @
mov dx, 0cfeh) h2 I9 e. G# u2 q& }5 {% o" @
in al, dx
5 u" A1 ]( t" H' |" [% Eor al, 00001000b
1 u5 ^; `$ ]: Y9 i; B$ _# Aout dx, al
7 [" m, f$ o4 k* r# e
/ f2 L% \- D, Q$ B0 F5 \% e事實上每家BIOS都 maintain many "tables" 來說明: 哪一個 device 中的哪些 registers要填?值.相關的 access routine都已經寫好. Programmer只需更改表裡面的值即可 ^_^! r; G8 i V7 y) [
# \0 e1 Z# V" K; y0 @
*當有人要求改 register setting時,我們必須知道三件事:$ l$ n' R2 x' [' B& G/ x, o; J5 X
1. why (為什麼要改?)* L# z! t& U* b6 u0 {# O
2. what(改成何值?)9 j, k' f8 E$ v, j7 h% N
3. when(什麼點改?)
' h2 I5 k, ?: q; M. i/ ]' ?" C5 {7 I+ p1 C$ f9 [) E, r7 b
*對於 BIOS kernel與 OEM coding的人言,這部分會是較少碰觸的,因為,這些code會由 chipset porting的人負責撰寫及維護.
! ]- y2 Z5 |- @+ N" j2 M張貼者: HARRISON HSIEH 位於 8:41 下午 + M" v n8 i& j4 n2 V& [
標籤: BIOS相關 8 A6 W* n" Y' \ [0 L: S- r' L
6 意見:
9 o8 l2 j9 ^: p 9 g r$ C0 J% i
tonyya 提到...
) s d( {4 u6 l4 Q% V無意間發現你的部落格1 L7 R4 ?" J: W+ r4 k
2 M: }: K* i4 a. Y
很多文章都覺得受益良多7 E0 H- l G2 M& o
# q! x/ m: U. o
我也剛接觸這門領域不久
& i- p/ u. Y* K ]3 [! ^# @, t
, v1 R6 y, W. n很多東西都似懂非懂
6 [" |$ X4 ]3 I- ~: H0 z/ O0 N1 E) R
不知對於一個新人而言
' k& D0 Z& b- Z8 p' h* ~ Y- e$ O0 m
有沒有什麼好的訓練方式
+ o! W5 [5 {0 r8 I! d, S$ X/ `( `9 s H1 i) t7 j
可以及早進入狀況
/ i2 G- I" [+ s4 L十月 03, 2007 5:53 上午 : m" \, q V2 V2 i1 C6 e( r B
7 {( `$ v+ F# J/ Z5 G' a# GHarrison 提到... 9 d% f! v5 G$ P2 N6 b, d. z0 N
現在的BIOS有分成Legacy BIOS(組合語言)與UEFI BIOS(C語言),但是這兩種BIOS對於一個剛接觸的新手來說就只是Win98跟WinXp使用方式的差別而已,介面不同,但是要做的事情幾乎一樣。
0 z7 a6 q% N% x! {' g# r3 R$ f
0 J& m. G w7 |. Y所以我的建議是多去了解這些工具的用法(組合語言指令/C語言用法)還有多看看Intel IA32 Architecture guide vol1~3(目前最新版是IA64),因為了解系統架構才是最基本的。
/ p; r/ U1 r. |) G/ {( R- Z1 B2 U' R* @: b4 U7 A* L% D0 ^# B
如果要快速上手的話,你就先必須知道"設定方式",例如: 如何填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: v" O1 g/ M
十月 04, 2007 5:39 下午 ; X3 c2 x: e" v1 o! f
0 R/ m) r6 X4 m- A/ b. _" J
tonyya 提到...
+ x) @9 {8 Y6 N! {3 b( f- C首先感謝你的回覆9 x- U" y3 o, Y4 ^- U0 S- X5 R2 a
: l( h/ A' a! W( ]% h6 C1.目前接觸的是Legacy BIOS(組合語言)
# e7 q8 S( l \4 J- ~5 E% c( o p D: l8 F7 D
2.IA32的系統架構有在看,目前也在積極補強一些相關的spec知識,不過還是要有實際做過才有感覺,對我而言如果只是光看的話無法深刻的體會2 u5 k& Q+ X* Z0 l( O" M
) r' u# z: }" Y! H* T
3.關於你說的設定方式,有的有碰過,像是PCI,ASL code,SMBUS/LPC, CPU Microcode更新,我會去補強你所提到而我沒碰到的部份
4 f0 E( Y3 U1 J* _- F% b0 _% L. G$ F& x5 Y% v
4.進入這行的感想是對於一些硬體的知識比以前來的了解,辛苦的是要一直摸索找方向,雖然東西很多要K,問題就在於太多東西反而有時不知從何著手 @@!+ `; K! f; F+ v4 k3 n
9 ?" s5 O' U/ M+ y1 _5.再次感謝你所提供的意見! i9 k8 w4 J* J6 e9 k8 u
十月 05, 2007 8:09 上午
, T/ [1 q9 z7 U$ q! N- r 7 O' z; r" e" _0 \
chiehlin@mail2000.com.tw 提到... , V' Z8 k4 }# ?& s ?/ X
PCI Register 是 cf8 cfc Index ,Data
3 Y2 C4 ~" r6 s+ U' ~十月 25, 2007 11:17 上午
* S/ I I C) S% x6 |% E" D |
" d% Z: O! W- z" k' |PT 提到...
+ @8 |- S0 U* D6 B4 B7 q關於SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)
" N2 e& e) D5 _( Amov eax, 80002750h8 b3 o& D; @, s8 `% a
依照我的理解方式是* M; B6 a: o( h- V! }; L6 R
10000000^00000000^00100^011^01010000
* W: i! j: f- L8 a: b7 ^所以應該是80002350h |
|