|
|
一旦正確的頻率供給給system後, BIOS便依據既定的POST table(類似行程表)來做事. 首先,與chipset最為相關的便是 [chipset config stage]. 意即,在此階段BIOS必須對 chipset registers填入正確的值,俾使其正常運作. 一般而言,要config下列的 devices:) k( J% ?6 c: i5 R$ C5 p
- NB(還記得前面有提過北橋內部約可分 4 blocks; "有些" blocks 需要 在此 program...): f% w% f% D0 ~
- SB(即 PCI-ISA bridge)
' X5 x- Y A' [8 x& @( A$ A+ J- ACPI registers0 ~ d- ?" Y. ^/ i# v1 ]( w
- USB registers
9 X+ T& s* u3 u0 G' O) h- SATA registers0 ]# C7 l f R" h7 T. `3 A* ?% k+ N
- PATA registers
8 f# d h: ?; r) G+ E4 N...
1 S* |( }( V" w( E. m, V: z) n( Y3 h/ B' c, l. X
* 在此所謂的 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之處 !!!
0 _. {+ G! ~8 F+ I6 L; _4 C. c
$ y D% z+ S; { `6 w3 D: h' u- l* ACPI registers通常透過 IO 來存取
/ f* ]2 p2 m( U) p7 A8 WEx. // assume ACPI Base is 800h,要 access ACPI Reg55h
) d( l% \% b5 s7 [- Hmov dx, 855h
% g3 y! S' p: I8 U1 R* bin al, dx ; <- al = ACPI Reg55h's value, |, q+ Z6 z* B, L+ O
9 O6 j( X3 m& c# v0 j" u* 上述所列的 devices多為 PCI device,也都有唯一的PFA(PCI Function Address,即 bus#,device#,func#),也因此,只要對 device 下 PCI configuration read/write便可以 config device registers.- ^1 _8 ?; g p1 w: }( H
! _: j' o2 ]/ d4 ^: Y* t% S/ p
Ex. 假設: set SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)$ i' K4 Z- E- x3 j( H' G! q4 @' W
=> 簡單的 assembly can be:4 F7 k& d! O: f& x; h8 R
; X# G/ O5 V% C! n% V
mov eax, 80002750h
. l; S5 ~4 O: zmov dx, 0cf8h$ ?6 ^" l% ]+ e. h
out dx, eax& I5 W. K7 s4 K
T h( r8 q3 j/ g: v/ P5 G' Tmov dx, 0cfeh
1 I9 s" U" U2 z2 nin al, dx
+ E% t/ m9 Q' x+ T; r8 q8 ror al, 00001000b! p+ p( e! D8 e- T
out dx, al
+ @# H; f; W2 w, L( L; O7 Q4 \2 G- n
事實上每家BIOS都 maintain many "tables" 來說明: 哪一個 device 中的哪些 registers要填?值.相關的 access routine都已經寫好. Programmer只需更改表裡面的值即可 ^_^
+ o4 f+ \/ @5 l- w$ H
( K7 Q7 K0 N0 i*當有人要求改 register setting時,我們必須知道三件事:( h, L: Q L D' V# V
1. why (為什麼要改?), F3 v2 g0 P7 o2 e
2. what(改成何值?)
R$ q3 F t: w# O' e4 g3. when(什麼點改?)7 J. D! j7 ~6 ?* `7 v; Q$ O
, _, p& c* e" H& _5 k
*對於 BIOS kernel與 OEM coding的人言,這部分會是較少碰觸的,因為,這些code會由 chipset porting的人負責撰寫及維護. 4 K# O) b: R" j4 Z$ {2 y1 y) m
張貼者: HARRISON HSIEH 位於 8:41 下午
4 P% v# ^4 v; l# y7 Z9 D& a標籤: BIOS相關
3 `) [! M4 R+ ]9 G* o3 \4 E$ S6 意見:
7 _2 E3 k% h/ _* p, @ ( i1 \/ g& i# |& M0 M- B) y
tonyya 提到...
5 R! E# T) t0 Q3 p無意間發現你的部落格
; j# a% i, H& s* z3 }4 G0 e( S& W5 b9 M4 ^( j& j' h
很多文章都覺得受益良多
6 T1 w- f/ S! n* I1 k$ S8 z
! j z) l; ^7 f( z我也剛接觸這門領域不久3 W. V$ S1 f" a# y. `4 Y. _
; S3 L" V" \( d* n5 a' S) p很多東西都似懂非懂
& u) p* x& D8 m& J4 k* f0 t( v" @" n; i2 C! P. \6 u& N! i# F
不知對於一個新人而言
/ x! ~' n0 f+ K( g' ~- W# w; N* [) i& n0 v/ \( l9 J0 r: b
有沒有什麼好的訓練方式
5 g% j }7 d" ?( I
; q6 f6 m; j6 O9 X: }' H* p: f可以及早進入狀況" n U$ ]: c5 t& S- f& Z
十月 03, 2007 5:53 上午
( }5 A0 i/ S" c0 z" E+ D# p( L $ I0 R3 a8 e7 _3 V, C- W' U! J& g
Harrison 提到...
! S6 [) B! _0 T# `6 G Q2 V& l- `: k現在的BIOS有分成Legacy BIOS(組合語言)與UEFI BIOS(C語言),但是這兩種BIOS對於一個剛接觸的新手來說就只是Win98跟WinXp使用方式的差別而已,介面不同,但是要做的事情幾乎一樣。& Q: a. k# B2 U+ b: l; X% E
# i0 f; x* }5 D* P
所以我的建議是多去了解這些工具的用法(組合語言指令/C語言用法)還有多看看Intel IA32 Architecture guide vol1~3(目前最新版是IA64),因為了解系統架構才是最基本的。: q* Z# A, T5 T# x; r b
j& S/ _4 A- B/ f: `
如果要快速上手的話,你就先必須知道"設定方式",例如: 如何填CMOS/PCI Register(CF8/CF9),還有如何調整PIRQ/GPIO/ASL Code...等,如何透過SMbus/LPC存取? 何謂KBC/EC? 又要如何把OpROM 載入到記憶體,然後把控制權交給OpROM,執行後又把控制權還給BIOS/CPU Microcode如何更新?...etc. 這些都是基本OEM BIOS會做的事情,至於BIOS核心就必須很了解IA32架構你才有辦法去做。
# w# J& P) O) O3 F; E十月 04, 2007 5:39 下午
8 H/ S: v/ @ J, u; ?4 ^ 0 G5 \( a$ c; [
tonyya 提到...
* G. m( m r0 u首先感謝你的回覆
' l- W5 H9 }, z. f& D
& O) j% e/ M, ?& c. }2 \3 E1.目前接觸的是Legacy BIOS(組合語言)& ?! |4 y# S6 S+ t7 y; A
/ ^ r: ^2 _0 m1 w, I2.IA32的系統架構有在看,目前也在積極補強一些相關的spec知識,不過還是要有實際做過才有感覺,對我而言如果只是光看的話無法深刻的體會- @; [5 E" B6 u3 g
" J" U" T. h1 L/ |3.關於你說的設定方式,有的有碰過,像是PCI,ASL code,SMBUS/LPC, CPU Microcode更新,我會去補強你所提到而我沒碰到的部份
( c2 w% N; p1 d: `
& @$ Z/ E; ^2 y, u8 K5 t4.進入這行的感想是對於一些硬體的知識比以前來的了解,辛苦的是要一直摸索找方向,雖然東西很多要K,問題就在於太多東西反而有時不知從何著手 @@!& D' {/ V. Z4 m. Y2 c% O" V7 t- ~
- U3 {+ f$ _! e3 d
5.再次感謝你所提供的意見
; r& g/ d8 v9 f$ h+ U8 p十月 05, 2007 8:09 上午
& j4 P+ Q4 Q. i! @! {+ W" ~. V ( ^7 ]: S& D% r* j6 s! a$ \
chiehlin@mail2000.com.tw 提到...
; F5 M3 x' [6 t, m4 u VPCI Register 是 cf8 cfc Index ,Data
6 ~: b8 @5 l6 s十月 25, 2007 11:17 上午 1 b. K# A& F" H/ F5 ^2 x& O8 V
' X1 L% ^9 }& |, F/ m+ V# K
PT 提到... ) M1 {/ x1 c( T8 }6 n
關於SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)1 _8 T3 z0 D( |
mov eax, 80002750h7 p5 H5 u8 n4 [) R4 |
依照我的理解方式是
0 m3 @4 [: I; p6 V+ @, Y10000000^00000000^00100^011^01010000' R0 T+ m/ }" T" }* @: M
所以應該是80002350h |
|