找回密码
 加入计匠网
搜索
热搜: BIOS ACPI CPU Windows
查看: 15994|回复: 0

[转载]我所知道的BIOS- Chipset Config 5

[复制链接]
发表于 2010-7-1 11:31:10 | 显示全部楼层 |阅读模式
一旦正確的頻率供給給system後, BIOS便依據既定的POST table(類似行程表)來做事. 首先,與chipset最為相關的便是 [chipset config stage]. 意即,在此階段BIOS必須對 chipset registers填入正確的值,俾使其正常運作. 一般而言,要config下列的 devices:
4 B& m$ z  }8 z. W3 |6 m4 N! `- NB(還記得前面有提過北橋內部約可分 4 blocks; "有些" blocks 需要 在此 program...)
7 U6 s5 H8 K0 ]- U- SB(即 PCI-ISA bridge)% [8 l) p" S+ g# p* H4 O, \1 z
- ACPI registers
1 B6 p: Q( D# j* E- USB registers
( y: b( X; |  n0 E# i! a5 n- SATA registers! b( B! l% t1 s1 g6 J
- PATA registers. z2 ]0 P: l8 _
...
1 x; v: G0 P- U* i) K1 }4 t: e" V$ g3 D
* 在此所謂的 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之處 !!!' e2 p3 u4 \  T
- T# A- ]" q; T6 e" Y  p' J- G
* ACPI registers通常透過 IO 來存取
% Q- S6 L) E( F* g" b* aEx. // assume ACPI Base is 800h,要 access ACPI Reg55h8 N2 W' P! B5 Z: b
mov dx, 855h
9 M/ O. u# p7 z( c. i# i6 hin al, dx ; <- al = ACPI Reg55h's value
+ t+ _) L/ p! J) \+ d
/ n) `3 i! a- A1 U+ U& k* 上述所列的 devices多為 PCI device,也都有唯一的PFA(PCI Function Address,即 bus#,device#,func#),也因此,只要對 device 下 PCI configuration read/write便可以 config device registers.% s2 f4 |9 y+ k' ?, O, e( f
- d+ G" w3 _  d
Ex. 假設: set SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)
6 X( h5 d+ j, }. _/ C0 l=> 簡單的 assembly can be:
5 \* }7 h' x$ E8 `. Z* @
- e5 r( ^/ H; y2 xmov eax, 80002750h
9 v$ `" U4 N4 ]- imov dx, 0cf8h
2 ]1 i$ I9 o% e  sout dx, eax
) l& H) x. E2 r2 e5 O- S1 ?( W4 N8 s3 _; G) y1 e
mov dx, 0cfeh5 m$ z) O8 f* \* E4 m* t
in al, dx
* i3 \0 r/ P; `& Y8 |. l) Dor al, 00001000b/ {4 k6 I+ T5 g# g8 z+ v/ V+ ^) k
out dx, al + K/ x6 i( Q$ Q& N, o# r2 R% i
+ P# v  L& v9 n, T" I2 l( N+ f
事實上每家BIOS都 maintain many "tables" 來說明: 哪一個 device 中的哪些 registers要填?值.相關的 access routine都已經寫好. Programmer只需更改表裡面的值即可 ^_^: u( b0 \. s% V2 w& Y  @6 f. D

0 w1 b; Z% z2 I9 F0 s" C+ s% W9 D4 U*當有人要求改 register setting時,我們必須知道三件事:) |+ z# C) ~* |; C* @: q0 k
1. why (為什麼要改?)  n, J" V2 S$ F5 w. o
2. what(改成何值?)
! r' x) k6 r0 Q" o- ]3 G3. when(什麼點改?)( f9 ?; _- F# v! a& B1 v: }6 c7 J( @
, [6 p1 z' ^6 _6 D  m* m+ j& r
*對於 BIOS kernel與 OEM coding的人言,這部分會是較少碰觸的,因為,這些code會由 chipset porting的人負責撰寫及維護.
- R  m: v! p3 m4 h+ {0 Y* j張貼者: HARRISON HSIEH 位於 8:41 下午   
" P  [* b& @1 D& Z標籤: BIOS相關 & @% a2 G: _% r" M! J
6 意見:
; B& E7 ~! I  I) S) ~9 @
' f- n% G9 c4 Y& x9 m; |tonyya 提到... % d7 V- t5 n4 ?% m6 ^' K
無意間發現你的部落格# _; F0 ~- x# h/ ?4 R4 T
0 [) V9 N+ d; W9 O* h2 B
很多文章都覺得受益良多
0 m; Q' t3 `2 o, W! p* |- p  L
3 S3 u/ ~* Z. J! x+ ^我也剛接觸這門領域不久
3 G/ \) S! f7 W
* e4 c* ~3 l: h; s7 t% ^8 \很多東西都似懂非懂
1 n8 |" N( ~/ z4 s2 C% y! h* d; l  p6 s4 ^3 p1 C  z
不知對於一個新人而言# z3 X4 x' w0 g  G

3 _3 I) E, `4 H, p有沒有什麼好的訓練方式  o6 d. Y! W9 z

2 e3 s, \, j+ w  ?. a. K4 Z可以及早進入狀況
. O' Y% O0 T7 u. z: A1 v十月 03, 2007 5:53 上午    K3 w4 u3 C3 S$ u

# h, d8 ]) R* ?3 Z* b% m; v  F3 M: I, qHarrison 提到... 9 {' l" m6 D2 t1 I/ @
現在的BIOS有分成Legacy BIOS(組合語言)與UEFI BIOS(C語言),但是這兩種BIOS對於一個剛接觸的新手來說就只是Win98跟WinXp使用方式的差別而已,介面不同,但是要做的事情幾乎一樣。* g7 d. |! \5 M4 o9 J1 n1 B. h
: \3 z; O8 c1 ~0 h7 l" V: o0 ?* v
所以我的建議是多去了解這些工具的用法(組合語言指令/C語言用法)還有多看看Intel IA32 Architecture guide vol1~3(目前最新版是IA64),因為了解系統架構才是最基本的。: `; j+ |2 Q) I0 G
4 ~) _% f/ M2 D8 ]8 ^, d+ b
如果要快速上手的話,你就先必須知道"設定方式",例如: 如何填CMOS/PCI Register(CF8/CF9),還有如何調整PIRQ/GPIO/ASL Code...等,如何透過SMbus/LPC存取? 何謂KBC/EC? 又要如何把OpROM 載入到記憶體,然後把控制權交給OpROM,執行後又把控制權還給BIOS/CPU Microcode如何更新?...etc. 這些都是基本OEM BIOS會做的事情,至於BIOS核心就必須很了解IA32架構你才有辦法去做。
% w, o" _( y4 g. U/ W十月 04, 2007 5:39 下午  
4 f+ I! k7 ^1 n% s& z6 @+ _- h8 F
" g4 N, e) T! G" x# J* g2 E) l9 @6 Ctonyya 提到...
& q; {: V! l* \& W* B" I首先感謝你的回覆" h3 y. v9 f& k, ]" f
) z" g3 A4 [, A$ u
1.目前接觸的是Legacy BIOS(組合語言)1 Z) n9 B4 l2 Q. _1 \

* c1 G, Q: b& X; j& O2.IA32的系統架構有在看,目前也在積極補強一些相關的spec知識,不過還是要有實際做過才有感覺,對我而言如果只是光看的話無法深刻的體會; c2 ~3 j5 v3 ~3 ?' E; V
' b  F* J& g7 L. g( V% a/ i
3.關於你說的設定方式,有的有碰過,像是PCI,ASL code,SMBUS/LPC, CPU Microcode更新,我會去補強你所提到而我沒碰到的部份
. R- v" y. v) K
9 e4 h( B% l  g0 }, [4.進入這行的感想是對於一些硬體的知識比以前來的了解,辛苦的是要一直摸索找方向,雖然東西很多要K,問題就在於太多東西反而有時不知從何著手 @@!
' C0 t7 L! y  Y; b, h
3 k3 {# w7 W+ J" B7 }3 i( j/ F& e$ Y5.再次感謝你所提供的意見. Q9 k& C3 }$ ^( H% u) A
十月 05, 2007 8:09 上午  
* L" Q: @) k6 y " |* f* K  l9 l; x4 t8 w# I. o
chiehlin@mail2000.com.tw 提到...
/ d* t+ C+ O4 x  d) O1 ePCI Register 是 cf8 cfc Index ,Data
4 M* p5 i% e; k! ]  ?$ o十月 25, 2007 11:17 上午  
) G  E6 Z+ @: M( X7 V% C/ f6 Q" ^
* A; s' p4 w: H8 t5 oPT 提到... ' [: ^) Q5 c1 |% Y6 B. a
關於SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)* D+ t* P/ j8 Q% b' E
mov eax, 80002750h! t) M* m! [( [0 w  o& z2 P) |
依照我的理解方式是
# ]9 m: H( y# W4 r10000000^00000000^00100^011^01010000
* Z( [" `0 e& S" c/ e0 D所以應該是80002350h
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

Archiver|手机版|小黑屋|计匠网

GMT+8, 2026-3-5 12:46 , Processed in 0.283006 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表