|
一旦正確的頻率供給給system後, BIOS便依據既定的POST table(類似行程表)來做事. 首先,與chipset最為相關的便是 [chipset config stage]. 意即,在此階段BIOS必須對 chipset registers填入正確的值,俾使其正常運作. 一般而言,要config下列的 devices:& H& S. q- D0 ]8 N
- NB(還記得前面有提過北橋內部約可分 4 blocks; "有些" blocks 需要 在此 program...)0 n( P) E, V: J4 {: `% F
- SB(即 PCI-ISA bridge) l* X$ k% p( n. H E. D! [
- ACPI registers% |! c3 R7 I3 ~% ^
- USB registers3 m5 D2 H- X( \8 n) j5 D* l" Z
- SATA registers
6 N% a9 f( a. _- Z- PATA registers4 R q& [5 m1 p
...
1 C* D5 d3 N; h5 ?( H9 [$ q4 d
: f% P2 h, b4 _4 t5 ?* m' A* 在此所謂的 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之處 !!!
& o- V+ c) K5 ?( A3 l" d) Y* p# a U8 }
* ACPI registers通常透過 IO 來存取) j! ]' {2 s6 B9 `5 ~9 U
Ex. // assume ACPI Base is 800h,要 access ACPI Reg55h
; ?1 m6 N) e4 [mov dx, 855h
/ x8 N- p/ O+ ^( f1 ]in al, dx ; <- al = ACPI Reg55h's value
/ y4 l" y1 V) m
' T/ K' X; C6 }/ Y6 S* 上述所列的 devices多為 PCI device,也都有唯一的PFA(PCI Function Address,即 bus#,device#,func#),也因此,只要對 device 下 PCI configuration read/write便可以 config device registers.
6 t7 J# S5 G. ^' i4 }" V* Y2 U& H5 p- V0 T
Ex. 假設: set SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)
/ n. Z5 w8 y+ Q=> 簡單的 assembly can be:
+ G1 [5 Y* K3 z9 v
; @2 N w/ b& j* O& ^3 c! kmov eax, 80002750h$ u5 D9 T9 n+ t$ _: M
mov dx, 0cf8h# R2 F1 }: ]# D/ v$ J
out dx, eax; Z: [3 A4 B) L* q1 |
9 [$ Q9 P% p; C
mov dx, 0cfeh
; G, F7 j f5 b: R; a" b2 min al, dx
% |$ k3 D8 p+ X: Gor al, 00001000b
* X8 u" s% Y6 p4 H4 Q" j, Xout dx, al
0 z3 e) I. [" W: S+ e3 M* H
# c2 }' R% r! U. B. {7 `3 x事實上每家BIOS都 maintain many "tables" 來說明: 哪一個 device 中的哪些 registers要填?值.相關的 access routine都已經寫好. Programmer只需更改表裡面的值即可 ^_^
$ Y& t* ]* U7 a/ g r- h
$ ^, o9 S" C. l; J8 t5 E*當有人要求改 register setting時,我們必須知道三件事:+ {/ U' }( a) K
1. why (為什麼要改?)( d* P) k( w$ d: k! q5 O* B
2. what(改成何值?)
& Y5 N% i4 u4 J' n& W3. when(什麼點改?)
" W+ @, ?' U( Z- o. _0 u v: o$ f K8 N
*對於 BIOS kernel與 OEM coding的人言,這部分會是較少碰觸的,因為,這些code會由 chipset porting的人負責撰寫及維護.
s7 o# j, [# `張貼者: HARRISON HSIEH 位於 8:41 下午 ; m! B4 k8 @- j# z+ }
標籤: BIOS相關 / r& x" H) ~9 Q& G$ c# x; M
6 意見:
& E/ B5 y! z) C: P: e0 S4 V
' D- t9 b& u8 }+ b1 C5 Vtonyya 提到... 1 ?1 O5 v1 b& v9 p, R5 P
無意間發現你的部落格
* f) s) \% s) i3 @5 I! q H4 r& ]/ E0 m' G1 I
很多文章都覺得受益良多
6 Y! Q# @4 Q3 g! a
5 N5 j$ P, S# b' Q/ Q! R, b; T4 g/ m我也剛接觸這門領域不久1 b/ D) m; |, A! g
, ~, c0 _- U& h+ v1 }很多東西都似懂非懂
% _* n6 G8 ?, }5 a) y8 g. _* s, q+ G7 j
不知對於一個新人而言
; b$ d D# ? f( s+ Y5 Y
, K w# m% F0 n7 Q7 N. {* e有沒有什麼好的訓練方式
" |1 m2 T( }* t8 ]3 s5 e! o" s! \6 ~0 y3 U) @# l l
可以及早進入狀況9 d8 E, E- R6 F
十月 03, 2007 5:53 上午 ) K" G7 R9 ^* Q, a4 L8 z- E; z
$ U3 B6 y8 l$ \; P, S& t
Harrison 提到... # {' Q3 n. b) L! h# l
現在的BIOS有分成Legacy BIOS(組合語言)與UEFI BIOS(C語言),但是這兩種BIOS對於一個剛接觸的新手來說就只是Win98跟WinXp使用方式的差別而已,介面不同,但是要做的事情幾乎一樣。/ u. ?0 T# L; P+ c
' ]+ ?' S( C2 g W
所以我的建議是多去了解這些工具的用法(組合語言指令/C語言用法)還有多看看Intel IA32 Architecture guide vol1~3(目前最新版是IA64),因為了解系統架構才是最基本的。. d3 z/ B/ Y7 x5 s8 Q1 V' m& ~
& |# Q8 `( O0 Z, v0 Q" J' b* r6 a
如果要快速上手的話,你就先必須知道"設定方式",例如: 如何填CMOS/PCI Register(CF8/CF9),還有如何調整PIRQ/GPIO/ASL Code...等,如何透過SMbus/LPC存取? 何謂KBC/EC? 又要如何把OpROM 載入到記憶體,然後把控制權交給OpROM,執行後又把控制權還給BIOS/CPU Microcode如何更新?...etc. 這些都是基本OEM BIOS會做的事情,至於BIOS核心就必須很了解IA32架構你才有辦法去做。
; w) {, D9 r; f r十月 04, 2007 5:39 下午
5 ~, x' R" D P) m: B$ q( O4 e! N $ C1 W" V# ]6 n5 s8 f7 R
tonyya 提到... . E* q9 `! l" C
首先感謝你的回覆
7 i/ e7 f \% T- ?1 k& x& a4 M7 @
1.目前接觸的是Legacy BIOS(組合語言)
4 P2 \ a! ~6 p3 `7 E) r+ @! r2 s
2.IA32的系統架構有在看,目前也在積極補強一些相關的spec知識,不過還是要有實際做過才有感覺,對我而言如果只是光看的話無法深刻的體會
' o2 V8 Z& B4 R N, \8 C D% a4 Z, S u4 U9 A" k
3.關於你說的設定方式,有的有碰過,像是PCI,ASL code,SMBUS/LPC, CPU Microcode更新,我會去補強你所提到而我沒碰到的部份
) j" G* n% f7 V: u& x* k- m. z( D
7 ]/ |+ p" @9 m8 d4.進入這行的感想是對於一些硬體的知識比以前來的了解,辛苦的是要一直摸索找方向,雖然東西很多要K,問題就在於太多東西反而有時不知從何著手 @@!% Y8 T' r- r3 }- f
. v0 G& z X4 q; T/ z5.再次感謝你所提供的意見4 m: G( i7 p0 x* B
十月 05, 2007 8:09 上午 3 h7 @ ]5 [5 n6 m- j7 U$ @! j
2 I# J; A1 O' o) |' D6 x: L$ d
chiehlin@mail2000.com.tw 提到... # \& p7 T7 G2 m$ u) X
PCI Register 是 cf8 cfc Index ,Data
' Z8 |; z* R5 `4 Q3 V9 c$ ~十月 25, 2007 11:17 上午 5 n% C/ j" L- q( x, H" r
: O" F6 W; |6 L
PT 提到...
0 p5 g6 w) _, R8 Z! e關於SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)
* H' k# o( G# i: K( kmov eax, 80002750h ? }! w& y8 r& t+ W L
依照我的理解方式是/ ~/ J9 ~" s1 T4 y& U+ }
10000000^00000000^00100^011^010100000 K L* B% h- B/ ]
所以應該是80002350h |
|