|
|
一旦正確的頻率供給給system後, BIOS便依據既定的POST table(類似行程表)來做事. 首先,與chipset最為相關的便是 [chipset config stage]. 意即,在此階段BIOS必須對 chipset registers填入正確的值,俾使其正常運作. 一般而言,要config下列的 devices:
# F. G. j% j! W$ @( }- NB(還記得前面有提過北橋內部約可分 4 blocks; "有些" blocks 需要 在此 program...)1 _7 \' d& D$ Q/ N( s
- SB(即 PCI-ISA bridge)
! P: Q7 B S( t- A6 U9 k6 ]- ACPI registers
' F! Z1 n9 ^: E' M( v7 b1 {! z3 c5 ? B- USB registers
+ C1 m: |6 G) ], i% k5 d3 v6 Q2 k- SATA registers; s' s8 g. q/ X/ `1 a U; W" P
- PATA registers
$ |: [) ~) w7 g...
. {* U L) y& E( `+ S
3 h5 }; J4 L$ V! m, r* 在此所謂的 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之處 !!!, J% I' j) ]3 ^8 `0 }
s/ P: N& C! C0 l1 A2 K* ACPI registers通常透過 IO 來存取8 p* u% \# L5 ~" o1 J
Ex. // assume ACPI Base is 800h,要 access ACPI Reg55h
/ {0 {) m' d- q! m3 ^( umov dx, 855h, a N6 U9 j$ r6 ~1 A& H1 o4 l
in al, dx ; <- al = ACPI Reg55h's value5 R. q9 L$ I2 O3 n2 K. ?
h/ {' h- o, J i* 上述所列的 devices多為 PCI device,也都有唯一的PFA(PCI Function Address,即 bus#,device#,func#),也因此,只要對 device 下 PCI configuration read/write便可以 config device registers.0 h1 V) W+ N! W0 H6 @3 X1 l
' h( [; ]2 A8 b5 a6 J1 {
Ex. 假設: set SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)4 N; H4 y4 F2 H- v3 _9 t" v+ Z
=> 簡單的 assembly can be:5 d% n2 d! Z+ U
6 {9 k( `4 A* o7 o* L
mov eax, 80002750h3 E% Q6 Z- u+ k$ X) v/ e
mov dx, 0cf8h' a; S5 P7 F9 J6 }8 v1 n# K
out dx, eax z7 }" b$ Y8 V+ g4 a
( r; X+ v1 ]! g/ C
mov dx, 0cfeh% e# |+ E% W' C- N5 a4 r
in al, dx* u! S$ F, N' D: a
or al, 00001000b
$ ` h3 o) l; a' k5 F! W) Wout dx, al 2 l- z) p. T, o7 E* k
' U3 F$ }: O$ z1 B% Q
事實上每家BIOS都 maintain many "tables" 來說明: 哪一個 device 中的哪些 registers要填?值.相關的 access routine都已經寫好. Programmer只需更改表裡面的值即可 ^_^( A0 q, ]/ y" d' w
+ e& X* @4 ~/ K1 A- X! X*當有人要求改 register setting時,我們必須知道三件事:
; _5 U8 k3 a8 G$ z( X3 c1. why (為什麼要改?)
6 P3 Y Y D% m" R, S2. what(改成何值?)
1 h6 y6 e0 Z! i3. when(什麼點改?)
. n( y+ X) x! r! r8 G2 o" Q. Y" d6 s0 ]" P9 s
*對於 BIOS kernel與 OEM coding的人言,這部分會是較少碰觸的,因為,這些code會由 chipset porting的人負責撰寫及維護.
& R K- ~ s; L0 E張貼者: HARRISON HSIEH 位於 8:41 下午
/ a5 x1 m% _. c; n# g' i標籤: BIOS相關 ' Y; O; h) f4 D
6 意見: - D& x- k D ?; L
! `2 [$ |- L# Q/ M$ u
tonyya 提到...
. {. _! m1 O3 s3 I- Q無意間發現你的部落格
# _/ j6 B1 H4 D. Z' W# d8 M+ X$ [; U, M1 O$ h% N8 w
很多文章都覺得受益良多. v, A2 ^" h+ }: t3 {* [. W; @
6 a5 X4 Z; _9 T' f+ m* V! |5 s我也剛接觸這門領域不久( K3 e* `1 e3 r4 t
% m* u" ~7 c @% M* `
很多東西都似懂非懂" y1 y' d' Q! ~1 d1 ^% c: |
2 y( g7 F/ t" O不知對於一個新人而言
3 A' y2 A) c B* k# K) I
0 ]5 f! r( c8 M有沒有什麼好的訓練方式
3 g/ }; v6 I/ `5 a4 f" w- [4 E7 S" c, Q2 u3 O
可以及早進入狀況
" Z) d6 D1 V% z( ^% q- E十月 03, 2007 5:53 上午
3 h7 l8 i2 |9 {) K* X1 U
1 i* L; A+ @3 M h6 @9 }9 kHarrison 提到...
% l( ^' t; q) a( v4 ^) T3 x現在的BIOS有分成Legacy BIOS(組合語言)與UEFI BIOS(C語言),但是這兩種BIOS對於一個剛接觸的新手來說就只是Win98跟WinXp使用方式的差別而已,介面不同,但是要做的事情幾乎一樣。
* o: a: P: t7 R- S
- T4 C# Q" z7 a% |, z' j/ N0 \6 H所以我的建議是多去了解這些工具的用法(組合語言指令/C語言用法)還有多看看Intel IA32 Architecture guide vol1~3(目前最新版是IA64),因為了解系統架構才是最基本的。
) D$ @3 _) n2 E" Q: ^7 x
7 d6 }' O5 h- ]8 @; o2 ^如果要快速上手的話,你就先必須知道"設定方式",例如: 如何填CMOS/PCI Register(CF8/CF9),還有如何調整PIRQ/GPIO/ASL Code...等,如何透過SMbus/LPC存取? 何謂KBC/EC? 又要如何把OpROM 載入到記憶體,然後把控制權交給OpROM,執行後又把控制權還給BIOS/CPU Microcode如何更新?...etc. 這些都是基本OEM BIOS會做的事情,至於BIOS核心就必須很了解IA32架構你才有辦法去做。+ l, H+ E, o1 t: p5 @- @
十月 04, 2007 5:39 下午
* ^% Q( [, R0 Q$ m3 K: ~2 a; c 0 d% `0 P) m# Q4 S* e
tonyya 提到...
: S+ X" N" p8 n) L8 t首先感謝你的回覆
( Z* ?2 Z# n' _/ J. G6 m; G. a' _+ U$ z
1.目前接觸的是Legacy BIOS(組合語言)9 k* \- S+ V5 x' y7 a
+ U- r% U/ z3 w, U; I
2.IA32的系統架構有在看,目前也在積極補強一些相關的spec知識,不過還是要有實際做過才有感覺,對我而言如果只是光看的話無法深刻的體會6 K3 p$ K0 ^ w, b, u0 X
' ~/ F6 E% e- p( _
3.關於你說的設定方式,有的有碰過,像是PCI,ASL code,SMBUS/LPC, CPU Microcode更新,我會去補強你所提到而我沒碰到的部份
! m$ a# W* ]3 ?; i, ?0 N
/ \; [' E: g1 |* p5 F% `2 I4.進入這行的感想是對於一些硬體的知識比以前來的了解,辛苦的是要一直摸索找方向,雖然東西很多要K,問題就在於太多東西反而有時不知從何著手 @@! d+ i) F w. `4 \4 B" n) I
% t8 Z! D. T9 N) g0 m2 |1 l
5.再次感謝你所提供的意見
0 t \1 r! H) E: s十月 05, 2007 8:09 上午 4 G5 ^3 I$ ^5 |4 J) q
. j, R9 x# i; X1 E8 e
chiehlin@mail2000.com.tw 提到... 6 h# s4 j( A) x5 x6 C% V
PCI Register 是 cf8 cfc Index ,Data! M; M* {& o7 u6 `! E& X
十月 25, 2007 11:17 上午 3 `: G1 x8 S0 ]# b3 C |
' K& Q5 ]+ E8 H1 S% P6 }PT 提到... 3 Q0 p. r! p; h3 p8 S; i
關於SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)+ R1 ?+ M! w2 X) i: A U1 ^2 U/ U
mov eax, 80002750h J$ s0 x/ W) H- V
依照我的理解方式是
7 _0 S" D$ m$ P; d1 t% o10000000^00000000^00100^011^01010000
1 J# m. h# S- z. r( P所以應該是80002350h |
|