|
|
一旦正確的頻率供給給system後, BIOS便依據既定的POST table(類似行程表)來做事. 首先,與chipset最為相關的便是 [chipset config stage]. 意即,在此階段BIOS必須對 chipset registers填入正確的值,俾使其正常運作. 一般而言,要config下列的 devices:6 t6 y" I( R \. Y3 O/ K
- NB(還記得前面有提過北橋內部約可分 4 blocks; "有些" blocks 需要 在此 program...)
8 _+ a& N2 ?# B& O' u- SB(即 PCI-ISA bridge)
) {9 j, u4 r, U& P- ACPI registers
: Q# y6 b( O. u: q9 }0 m) W' Z- USB registers
! ^& t5 j$ q6 k# Y4 r' g- v- o- SATA registers, [( u. Q: O. }. b. r, E
- PATA registers
) Z! w2 _4 a4 a" u8 m; C$ u...
+ H4 ^7 Q" R7 x2 a+ W. a' l' k6 P6 r2 G3 Y
* 在此所謂的 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之處 !!!& q+ q. m a( I
( [) Y; b. Q1 B r0 a8 s
* ACPI registers通常透過 IO 來存取3 q: q; E' D) S' D1 T5 k
Ex. // assume ACPI Base is 800h,要 access ACPI Reg55h: j$ [# J; Y3 R! O, L
mov dx, 855h
. s" E- b, w6 D9 b/ \in al, dx ; <- al = ACPI Reg55h's value
+ i* e$ z1 h4 ^- K: f' \- o T* u6 R% w5 ]2 w; C( Q
* 上述所列的 devices多為 PCI device,也都有唯一的PFA(PCI Function Address,即 bus#,device#,func#),也因此,只要對 device 下 PCI configuration read/write便可以 config device registers.1 V# Q+ U' L: L6 [! a" N
# K) h: \4 w5 g" @2 D1 U
Ex. 假設: set SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)+ G+ g% }# L% F/ I4 ]
=> 簡單的 assembly can be:1 ]9 ~" F/ l+ o2 a M8 }
' d( ] {" `% k" r
mov eax, 80002750h+ X. l Z) ^ e8 X
mov dx, 0cf8h8 o9 L# i) s4 I. a' X
out dx, eax
: P U& z5 T7 n- K
+ e2 i7 x r6 x z3 {9 q0 _. i& zmov dx, 0cfeh8 h8 m* {' j$ u% J6 g# [/ ^0 e8 W1 _2 {
in al, dx
6 {3 C# l1 }' i9 x4 z+ j: |6 Tor al, 00001000b
7 G$ Y6 J7 Y; A3 O+ p. C [( W2 zout dx, al 8 g V1 m0 T9 _
! R! z* n5 P) `8 K0 i事實上每家BIOS都 maintain many "tables" 來說明: 哪一個 device 中的哪些 registers要填?值.相關的 access routine都已經寫好. Programmer只需更改表裡面的值即可 ^_^# U" s5 L6 O3 z
: B/ A% c1 o% F+ Y# V
*當有人要求改 register setting時,我們必須知道三件事:" d' E( o4 Q7 L
1. why (為什麼要改?)
: @# K! c8 q/ X6 H0 b3 R1 |2 X2. what(改成何值?). v+ M0 ?6 Z) S+ B
3. when(什麼點改?)
) A. z) X- M/ O& `: v6 M/ ^
- A1 R: y6 G0 v, l- O' Q*對於 BIOS kernel與 OEM coding的人言,這部分會是較少碰觸的,因為,這些code會由 chipset porting的人負責撰寫及維護.
1 j2 i( N# c3 f0 A1 z張貼者: HARRISON HSIEH 位於 8:41 下午 % w6 |4 O$ D5 W' X4 e
標籤: BIOS相關 $ Y, j$ E$ o6 p2 `# v8 ~/ n
6 意見:
" o) u/ g) w6 f b8 z. {1 A ! v l. S- y- R# R+ c
tonyya 提到... - p/ k% V- i. `
無意間發現你的部落格# o: r* |5 m* _: q# j
' y* i# p5 R/ Z" M$ w/ a$ Y
很多文章都覺得受益良多- C7 W) E$ [% ?9 ~! ^" P7 }* s
, s$ f! Q% B6 K6 w* P& X我也剛接觸這門領域不久' A$ x+ w% M! ]" `+ T/ w+ `
( u, m- R. @) [$ i0 [# ]5 V很多東西都似懂非懂& x2 Y& x' N t$ s
; F2 s) X1 G- M# |+ @1 T' m不知對於一個新人而言3 g5 }1 f v P9 R+ \7 o
! G$ q2 G8 G5 Z1 P# K
有沒有什麼好的訓練方式
2 O; P# G# w1 d9 E) i9 Y/ ~/ U; l+ n6 X
可以及早進入狀況
5 O0 l2 j8 c& y十月 03, 2007 5:53 上午
3 d7 j, x( q6 }# E 1 U' S. I0 k5 E5 p+ ~
Harrison 提到... + y" F. @4 Y v! Y I
現在的BIOS有分成Legacy BIOS(組合語言)與UEFI BIOS(C語言),但是這兩種BIOS對於一個剛接觸的新手來說就只是Win98跟WinXp使用方式的差別而已,介面不同,但是要做的事情幾乎一樣。
0 o6 b8 N8 w, I2 j) |, g h* Y) [
X3 ~+ ?9 V* a& c3 }. z所以我的建議是多去了解這些工具的用法(組合語言指令/C語言用法)還有多看看Intel IA32 Architecture guide vol1~3(目前最新版是IA64),因為了解系統架構才是最基本的。3 Q* D+ N/ T0 H& u
, q# |! a. {5 G1 o
如果要快速上手的話,你就先必須知道"設定方式",例如: 如何填CMOS/PCI Register(CF8/CF9),還有如何調整PIRQ/GPIO/ASL Code...等,如何透過SMbus/LPC存取? 何謂KBC/EC? 又要如何把OpROM 載入到記憶體,然後把控制權交給OpROM,執行後又把控制權還給BIOS/CPU Microcode如何更新?...etc. 這些都是基本OEM BIOS會做的事情,至於BIOS核心就必須很了解IA32架構你才有辦法去做。
6 |! p% V& W8 M, _4 a/ B% ^十月 04, 2007 5:39 下午 ' x9 ]0 ^1 n- c3 g. a. j
]( C" P6 e7 \! ~tonyya 提到... " k( z/ y! ?; v& F* ^. s
首先感謝你的回覆
7 }+ f7 S9 a9 e2 `/ Z" P2 T/ T6 c/ w6 v1 r
1.目前接觸的是Legacy BIOS(組合語言)
7 d! [+ C0 O) v3 ~
& I, a& ~; x7 ~/ X2.IA32的系統架構有在看,目前也在積極補強一些相關的spec知識,不過還是要有實際做過才有感覺,對我而言如果只是光看的話無法深刻的體會4 l8 v A4 U* r6 Y1 j7 [/ G# ~
; [+ [; N) O0 f+ F; J3 f* E3.關於你說的設定方式,有的有碰過,像是PCI,ASL code,SMBUS/LPC, CPU Microcode更新,我會去補強你所提到而我沒碰到的部份5 H: K+ R( e9 ?- r
! m- Y3 A4 M. m) q4.進入這行的感想是對於一些硬體的知識比以前來的了解,辛苦的是要一直摸索找方向,雖然東西很多要K,問題就在於太多東西反而有時不知從何著手 @@!- \6 Z- {) x# W+ W) \
. S2 N B+ H: p" Y+ B% x5.再次感謝你所提供的意見
7 \4 ^" v( R5 a4 k4 ?十月 05, 2007 8:09 上午 % C' d: r* a5 q, h$ Y# }. Y
; I( _7 U/ Y* l, C6 q: m& k1 u) c4 kchiehlin@mail2000.com.tw 提到...
$ A% a7 v! h) r1 [# J" ]$ |/ ]PCI Register 是 cf8 cfc Index ,Data
( s+ Y8 f. x& A7 c6 y# }( [! _十月 25, 2007 11:17 上午 $ g" X8 `/ U, A u1 d$ _- K
* U! O2 x3 [& [- B1 [PT 提到... $ c8 m# n" R \% m/ P8 f1 D
關於SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)- @/ F# ]0 N0 n! j, l
mov eax, 80002750h& D9 j; Q- z" Q+ R
依照我的理解方式是
- ^; @* `8 a* W1 |' X10000000^00000000^00100^011^01010000
. _: r. O& Z0 A所以應該是80002350h |
|