|
|
一旦正確的頻率供給給system後, BIOS便依據既定的POST table(類似行程表)來做事. 首先,與chipset最為相關的便是 [chipset config stage]. 意即,在此階段BIOS必須對 chipset registers填入正確的值,俾使其正常運作. 一般而言,要config下列的 devices:
& Z I0 ~ D8 I# ^- NB(還記得前面有提過北橋內部約可分 4 blocks; "有些" blocks 需要 在此 program...)8 v9 `4 F+ u- H( k5 ?5 E
- SB(即 PCI-ISA bridge)" A0 W3 L/ x* [- t" g
- ACPI registers" M( X7 p/ X. [1 M- l7 Z
- USB registers4 Q |( F' k: j
- SATA registers' o ?" ?6 w7 r3 W* J
- PATA registers
7 _7 E8 ?; k" |# u3 p+ f1 G$ V...0 _* A5 B* s3 Y) ?% {
( b9 h- w/ w7 L* P. T. |2 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之處 !!!
; C& m$ ~, F% M. p7 C6 g+ `. x) ~! ?8 G% b
* ACPI registers通常透過 IO 來存取 L. y! ]& r5 s+ W' t2 l
Ex. // assume ACPI Base is 800h,要 access ACPI Reg55h
; w7 ^# @4 k" S+ r. Cmov dx, 855h9 F6 |8 i) f( n- x
in al, dx ; <- al = ACPI Reg55h's value
& @3 J# P" M: } e, O
5 c6 s9 T" [( U* 上述所列的 devices多為 PCI device,也都有唯一的PFA(PCI Function Address,即 bus#,device#,func#),也因此,只要對 device 下 PCI configuration read/write便可以 config device registers.
) B5 [& |# B' Y( K) w) t; T
4 j; m! Y5 ^3 Q, A# `( D' q" {/ rEx. 假設: set SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3); {. u. ]& `7 }5 s
=> 簡單的 assembly can be:
! v& \ ~; d# A( ~$ N" F n( F4 R6 b" I3 N% W3 s6 |; t
mov eax, 80002750h" S- q5 P5 ?5 ^
mov dx, 0cf8h7 Z4 j0 a, @) A. }! L! t+ |
out dx, eax
/ ^$ n- P7 C7 j# z% \8 Z5 w8 `' \
0 n4 M& G1 P$ \4 Z! mmov dx, 0cfeh* z3 M' U7 N# S" v$ |7 |6 {
in al, dx' |# G, e/ w* G8 t, J$ o& s5 g. R; a
or al, 00001000b U# `4 q9 x$ d9 R9 r* U
out dx, al
( [; P% u7 j% V3 s; l8 m8 ^8 [7 {& j0 t
事實上每家BIOS都 maintain many "tables" 來說明: 哪一個 device 中的哪些 registers要填?值.相關的 access routine都已經寫好. Programmer只需更改表裡面的值即可 ^_^
- W; f8 x1 _; R* J; v
& d. G w! p$ U*當有人要求改 register setting時,我們必須知道三件事:
9 Y1 M5 b% C1 J& L; y" S3 g. A2 z1. why (為什麼要改?), [$ ^. x* E+ x& P' Y5 }
2. what(改成何值?)4 _6 i& G' i2 ] U/ N; l
3. when(什麼點改?)
. Y5 ?. D5 C( ?+ b6 a1 n9 q% q! T7 Q b* n1 h& Q
*對於 BIOS kernel與 OEM coding的人言,這部分會是較少碰觸的,因為,這些code會由 chipset porting的人負責撰寫及維護.
6 Q" w" n. t2 r7 e: B( n2 T" I張貼者: HARRISON HSIEH 位於 8:41 下午 " P* N8 ~( r% U1 M
標籤: BIOS相關
+ L F$ P& l7 M! B' a( l- L' b9 y6 意見: ! o& L: W: A4 }( c% F
- z0 N5 ?$ v& t9 y' s+ z
tonyya 提到...
: c/ j9 O D' a1 A無意間發現你的部落格
4 x) w& J$ R& X: X- [5 e# T& A' r& Q% D
* u" w' ` W4 B很多文章都覺得受益良多. w1 ^# z n/ Q- T! I
0 D: o O$ k- D* q
我也剛接觸這門領域不久. s" {/ T2 g; A
- T, `" Q1 Z9 _( I
很多東西都似懂非懂3 n. q5 z; A4 R7 a0 S
+ o5 D3 L# n+ T+ P( Z不知對於一個新人而言
+ O+ X* |& s% ]# r% z
( ?/ W( T, r7 ^# L+ u% Z有沒有什麼好的訓練方式 I& Q$ }8 j( v) J
5 w( H# N8 |, g: m
可以及早進入狀況
9 x0 |2 B4 ?8 Y十月 03, 2007 5:53 上午 ) E3 c0 o! m: k: K+ ^
! g+ \, B% ~2 ?, s- b1 L
Harrison 提到...
W" Y: D* S' E! j現在的BIOS有分成Legacy BIOS(組合語言)與UEFI BIOS(C語言),但是這兩種BIOS對於一個剛接觸的新手來說就只是Win98跟WinXp使用方式的差別而已,介面不同,但是要做的事情幾乎一樣。
6 H; b1 x) q9 N- m, @
: a X/ u' @3 R所以我的建議是多去了解這些工具的用法(組合語言指令/C語言用法)還有多看看Intel IA32 Architecture guide vol1~3(目前最新版是IA64),因為了解系統架構才是最基本的。; d$ y" p" D+ K$ V, d$ E) L% i" d
6 G4 i" {" S$ m2 f) j
如果要快速上手的話,你就先必須知道"設定方式",例如: 如何填CMOS/PCI Register(CF8/CF9),還有如何調整PIRQ/GPIO/ASL Code...等,如何透過SMbus/LPC存取? 何謂KBC/EC? 又要如何把OpROM 載入到記憶體,然後把控制權交給OpROM,執行後又把控制權還給BIOS/CPU Microcode如何更新?...etc. 這些都是基本OEM BIOS會做的事情,至於BIOS核心就必須很了解IA32架構你才有辦法去做。, x/ b. n$ _' f
十月 04, 2007 5:39 下午
* g8 L/ {+ B$ ^% E6 F; l* ~0 d # o# Z( P0 Q6 G5 G" k
tonyya 提到...
; U0 f! X7 d, \1 X, R8 y& ?8 n首先感謝你的回覆
9 P# {# m$ D3 f1 s
* I' t1 c5 \% I- G! r6 C' [, |& g% ~1.目前接觸的是Legacy BIOS(組合語言)
+ w: N6 Q2 e6 p. j$ e, C! V/ E% j7 C4 g ?8 G: Q9 _3 Q
2.IA32的系統架構有在看,目前也在積極補強一些相關的spec知識,不過還是要有實際做過才有感覺,對我而言如果只是光看的話無法深刻的體會
6 _0 b" \, W! _7 c- W# Z0 c" u* D- [6 D' W7 s
3.關於你說的設定方式,有的有碰過,像是PCI,ASL code,SMBUS/LPC, CPU Microcode更新,我會去補強你所提到而我沒碰到的部份& _' Z* i+ f: S$ x
6 @, {5 p- |: _5 C
4.進入這行的感想是對於一些硬體的知識比以前來的了解,辛苦的是要一直摸索找方向,雖然東西很多要K,問題就在於太多東西反而有時不知從何著手 @@!; T, V8 F4 D/ G4 t
# U( ^& O, k7 A) s y7 V: C
5.再次感謝你所提供的意見
" f) D$ T* X+ X! u, a P十月 05, 2007 8:09 上午
0 @6 s. g4 Q% L( f9 A6 J$ i
0 W R4 ^# U3 ]) E( m8 H( O& |: xchiehlin@mail2000.com.tw 提到... : @/ r) y T# r
PCI Register 是 cf8 cfc Index ,Data+ g3 n4 [' }$ U7 d
十月 25, 2007 11:17 上午 , W+ D* G# O2 X2 |
$ V/ q" u$ o5 b2 ^. }
PT 提到... + t3 [1 ?$ o' \. _: X( `
關於SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)
' `$ v$ H/ }- ?9 R: K# S8 J1 [3 b5 Emov eax, 80002750h
+ R% t& |4 n. X6 o依照我的理解方式是- z! p% n; m6 y& d
10000000^00000000^00100^011^010100007 o3 M$ ^0 Q; Z ^
所以應該是80002350h |
|