|
|
一旦正確的頻率供給給system後, BIOS便依據既定的POST table(類似行程表)來做事. 首先,與chipset最為相關的便是 [chipset config stage]. 意即,在此階段BIOS必須對 chipset registers填入正確的值,俾使其正常運作. 一般而言,要config下列的 devices:. I. b) K. y/ `" h3 {7 B
- NB(還記得前面有提過北橋內部約可分 4 blocks; "有些" blocks 需要 在此 program...)
. k! j5 m6 J0 k' e2 l7 N5 s- SB(即 PCI-ISA bridge)1 S2 e K; w; q" B; A1 D
- ACPI registers4 h T* `7 g! T
- USB registers
- L& {3 s2 D% \* D0 L- SATA registers
) c1 k# k" X. Q! D7 M- PATA registers
- @5 ^, T2 i5 V/ J8 `...; i. S# A! n9 B! B. h% z
+ ?! H, a( e3 N$ y' x6 h
* 在此所謂的 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之處 !!!
3 i/ I# K& O, C! F- B8 M$ m6 y3 q2 \6 Y8 P
* ACPI registers通常透過 IO 來存取
- @6 V/ c" v/ S6 ~4 x( [- ]Ex. // assume ACPI Base is 800h,要 access ACPI Reg55h- G, a, Y: m: u( `" [- o
mov dx, 855h
' a8 s7 F5 \* B- k+ T' L/ |in al, dx ; <- al = ACPI Reg55h's value1 }* E2 v! f$ F& `! e8 m- B8 b" ^
( h+ J: P9 c& ]- o A
* 上述所列的 devices多為 PCI device,也都有唯一的PFA(PCI Function Address,即 bus#,device#,func#),也因此,只要對 device 下 PCI configuration read/write便可以 config device registers.
( L3 W, K$ f2 m: G I* k2 R: s; ~6 |
( E3 q* X, D) s K9 F+ FEx. 假設: set SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)
" _) X' T1 {! u' t" a=> 簡單的 assembly can be:1 \4 k( P, p ~# Y
4 n: O% B% @8 V- _+ Qmov eax, 80002750h( Q7 m1 {: j( z: p& p: W8 k
mov dx, 0cf8h
6 {/ e7 A) C [; J9 {out dx, eax
# M, x0 J, M% A8 F! e0 P6 g! `4 U- ]) ], @1 h
mov dx, 0cfeh: Q3 S0 i# M# ^* y& o5 i+ y G
in al, dx! y1 ]/ D1 f' @
or al, 00001000b
1 A& n- N8 @, _" x a$ G2 {8 yout dx, al 9 f4 c6 v2 d& n7 M- U& K
7 `* \8 B0 A; c7 u
事實上每家BIOS都 maintain many "tables" 來說明: 哪一個 device 中的哪些 registers要填?值.相關的 access routine都已經寫好. Programmer只需更改表裡面的值即可 ^_^( z0 Z# D- c+ l$ z$ I6 u
( L1 d0 F* K q, _*當有人要求改 register setting時,我們必須知道三件事:' y+ L5 ?1 F. U$ Z4 Z
1. why (為什麼要改?)9 l- P# I: Y7 ~
2. what(改成何值?)4 T1 S) A: J4 Z! \6 F
3. when(什麼點改?)
$ P2 @: t3 E, f5 R5 y7 A7 v0 n7 {# @0 @5 H. [9 h* c
*對於 BIOS kernel與 OEM coding的人言,這部分會是較少碰觸的,因為,這些code會由 chipset porting的人負責撰寫及維護.
' L! {$ x7 v2 ^" k% U張貼者: HARRISON HSIEH 位於 8:41 下午 7 c1 U; ?; g5 e; @1 w
標籤: BIOS相關
) H' f3 G8 e9 H* U1 L6 意見:
& w! O$ W; K3 B# l 8 c/ i& e6 W4 F: d
tonyya 提到...
, U& k$ Z' o- F2 p7 X8 }; s無意間發現你的部落格. z/ i! `9 A# ~$ d- J. |/ w
$ `3 f( Y- U6 s; f
很多文章都覺得受益良多! w' H1 C) ^3 q; k4 l+ w8 M, ^. Q
. }0 ?7 [4 d$ ?/ }+ ]9 v我也剛接觸這門領域不久
7 Z# l: X+ I' T: E* [4 |& f- s: |# D. |& P; d* z; R8 A
很多東西都似懂非懂. Q, o9 C n2 K4 r! y
6 F6 U8 p: _2 b
不知對於一個新人而言
8 J( O" @$ |; V: ^! z; ?* `
# b8 n5 |/ o9 B* w1 ?/ p有沒有什麼好的訓練方式
! D& g p: ]/ V7 _
! m5 y6 x' C8 O: H1 x可以及早進入狀況( g% d9 M. p0 a7 g- e2 u
十月 03, 2007 5:53 上午 & p9 b* [' G5 S) ^% P
0 e9 ^; ^6 Y( R# q
Harrison 提到...
- m: R9 N8 H$ [/ ?$ U4 a現在的BIOS有分成Legacy BIOS(組合語言)與UEFI BIOS(C語言),但是這兩種BIOS對於一個剛接觸的新手來說就只是Win98跟WinXp使用方式的差別而已,介面不同,但是要做的事情幾乎一樣。
( e, \8 v6 A' m7 b! z( b4 ]
$ o1 }& v6 z" t, w' A+ v+ b U所以我的建議是多去了解這些工具的用法(組合語言指令/C語言用法)還有多看看Intel IA32 Architecture guide vol1~3(目前最新版是IA64),因為了解系統架構才是最基本的。6 C, L2 i7 [% g7 c( n( v% @
5 z1 F" l! d3 Q! a- [& Q如果要快速上手的話,你就先必須知道"設定方式",例如: 如何填CMOS/PCI Register(CF8/CF9),還有如何調整PIRQ/GPIO/ASL Code...等,如何透過SMbus/LPC存取? 何謂KBC/EC? 又要如何把OpROM 載入到記憶體,然後把控制權交給OpROM,執行後又把控制權還給BIOS/CPU Microcode如何更新?...etc. 這些都是基本OEM BIOS會做的事情,至於BIOS核心就必須很了解IA32架構你才有辦法去做。7 x9 f( U1 ^; O3 i& {
十月 04, 2007 5:39 下午
3 T2 O9 _8 H) G. E9 ]" o# C 6 F* T3 E( Q" _; o4 v5 b- n
tonyya 提到...
0 D! F" e! |0 l5 W8 z首先感謝你的回覆
: |9 P1 S0 v& x* o( W$ x2 W" ?& N+ j: w( Y
1.目前接觸的是Legacy BIOS(組合語言)3 n: @; L4 H2 Z% E8 R5 J# ]' E
0 K0 ?4 F4 N2 s. B! U; d" t U# }8 J
2.IA32的系統架構有在看,目前也在積極補強一些相關的spec知識,不過還是要有實際做過才有感覺,對我而言如果只是光看的話無法深刻的體會! M/ Z+ ^1 v0 L6 A8 `; `
) J ^( i6 \" g
3.關於你說的設定方式,有的有碰過,像是PCI,ASL code,SMBUS/LPC, CPU Microcode更新,我會去補強你所提到而我沒碰到的部份+ Z+ F8 B' V: w8 P; f
" S2 c. P( r6 \, z
4.進入這行的感想是對於一些硬體的知識比以前來的了解,辛苦的是要一直摸索找方向,雖然東西很多要K,問題就在於太多東西反而有時不知從何著手 @@!. l4 S2 F* n4 V A/ e
3 z% P# V% j0 ]5.再次感謝你所提供的意見
9 s: N9 U, I7 r8 k) W9 G0 _十月 05, 2007 8:09 上午 @* U7 t f- }, |. ?
, l" M6 o( \* U7 G3 [9 X% Mchiehlin@mail2000.com.tw 提到... 6 v5 t) K3 j3 J6 v1 T4 a0 u
PCI Register 是 cf8 cfc Index ,Data }+ O/ z0 k4 u4 N u; d9 U* T
十月 25, 2007 11:17 上午 1 `5 I$ Q2 q# a/ x# s% t+ C! K% J1 z6 ?" q
8 W E6 m* x$ {- |
PT 提到...
# D+ u0 t% d3 R' Q4 {關於SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)
& Q) i( P. ?0 E# `4 _9 i* Imov eax, 80002750h
- n G/ }% r* Q C, Y$ Q: O依照我的理解方式是
8 d2 s) P& ?& C10000000^00000000^00100^011^010100008 r a* M2 ~% m! b) k/ h5 L
所以應該是80002350h |
|