|
|
一旦正確的頻率供給給system後, BIOS便依據既定的POST table(類似行程表)來做事. 首先,與chipset最為相關的便是 [chipset config stage]. 意即,在此階段BIOS必須對 chipset registers填入正確的值,俾使其正常運作. 一般而言,要config下列的 devices:* f' F( o; l2 Q" `
- NB(還記得前面有提過北橋內部約可分 4 blocks; "有些" blocks 需要 在此 program...)
6 S/ k7 b" `6 Q2 K7 p" Z$ A( W- SB(即 PCI-ISA bridge) s3 W% _! W% O5 r7 u
- ACPI registers
. J! [1 q: a* p% a# Q$ g @- USB registers
$ Q) F6 T6 @7 `) V- SATA registers$ O( p* z% }9 n+ X* i; s
- PATA registers1 W3 O% c: [( `* }3 u: S) T( L
...$ \ |$ z: w, l) _9 Z& Y" ]$ p
1 c4 |( O M7 M; {9 u* 在此所謂的 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之處 !!!
! }: }" v/ V* F' l. [9 X9 u9 |4 d2 |
* ACPI registers通常透過 IO 來存取; R+ [1 B5 Z/ P" j$ m* N
Ex. // assume ACPI Base is 800h,要 access ACPI Reg55h
0 ?: Q% n1 N0 Emov dx, 855h( L# c4 z( Z2 [- H/ A3 f% h
in al, dx ; <- al = ACPI Reg55h's value, J& B' Z2 o- |, K0 |# ^' _8 y
* u: E& H m: r6 ^; K! [. q( l( D
* 上述所列的 devices多為 PCI device,也都有唯一的PFA(PCI Function Address,即 bus#,device#,func#),也因此,只要對 device 下 PCI configuration read/write便可以 config device registers.
: W% L2 U$ v) ]
8 M# n6 i; Q) \/ _" i. H6 A1 UEx. 假設: set SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)9 f! L. r4 F; `2 c9 M! n
=> 簡單的 assembly can be:3 t$ K* c, e7 z
& e" |0 o+ r& ]/ O$ G+ Q
mov eax, 80002750h
% V. v. b- u1 w% @# @mov dx, 0cf8h! ?0 F2 @( u* r' F
out dx, eax; G, P' Y9 @9 I
: ^' e ]4 M; U( R, V1 Mmov dx, 0cfeh
. \$ ~! r0 @1 u5 r0 }; f$ fin al, dx
! }0 w, `: y1 L Q: a+ ror al, 00001000b
. Y0 ]# u, \$ p/ Z! L2 u2 a0 Gout dx, al
$ u' P H; z( K) g ]5 m( F0 X4 d6 P9 H/ ~: \/ y, H' W
事實上每家BIOS都 maintain many "tables" 來說明: 哪一個 device 中的哪些 registers要填?值.相關的 access routine都已經寫好. Programmer只需更改表裡面的值即可 ^_^5 u. A6 H4 o7 B: o6 i; v* Z
7 x8 W$ g7 T; N3 c d*當有人要求改 register setting時,我們必須知道三件事:- V n# y, G# @* P
1. why (為什麼要改?)* b W$ _$ r9 o& t
2. what(改成何值?)5 ]3 w3 q; O4 S! _6 \
3. when(什麼點改?)% F! w* m0 ?/ P) {- U7 z; M- E
]# X/ R+ x7 z( t: V
*對於 BIOS kernel與 OEM coding的人言,這部分會是較少碰觸的,因為,這些code會由 chipset porting的人負責撰寫及維護. . } U$ b8 ~2 O4 a9 L
張貼者: HARRISON HSIEH 位於 8:41 下午
8 k/ G2 M2 | l3 g0 s標籤: BIOS相關 8 Q+ p3 M3 v; z: S
6 意見:
u5 B4 X8 d% P. \! H! L / G. Y w" b$ {5 N- l
tonyya 提到...
. |+ A* S" c; j: H* @無意間發現你的部落格1 N! v1 ]( T8 d
5 b# D9 v$ I' X8 {# k: Y! |7 f4 g
很多文章都覺得受益良多: J) ?+ L1 b6 l. l* f
$ }4 ]: r6 y. k+ Z5 c
我也剛接觸這門領域不久
9 }( Z! `0 N4 S* z8 a
$ |" ^# V6 ]# j2 o) R+ x很多東西都似懂非懂; j3 T. |/ O: L% i T [) [ Z5 ?
; m$ l3 a% j/ d) q# f" e! h
不知對於一個新人而言
& w7 I5 I) u' k' Q
* A7 `% p3 l1 }有沒有什麼好的訓練方式
6 j6 b' W2 K5 F; {9 g, }6 A7 \0 `( R& m# G. H* E
可以及早進入狀況9 D! r; I: j7 P7 J+ g& y" F
十月 03, 2007 5:53 上午 7 o" F ]. x' i K
- L" L- z K, p# d9 Y: H
Harrison 提到...
* V1 U) O, g" C0 c+ N現在的BIOS有分成Legacy BIOS(組合語言)與UEFI BIOS(C語言),但是這兩種BIOS對於一個剛接觸的新手來說就只是Win98跟WinXp使用方式的差別而已,介面不同,但是要做的事情幾乎一樣。
6 j/ f$ \/ R2 q* V& i
% k, k. @5 ?) X0 X ]3 Q所以我的建議是多去了解這些工具的用法(組合語言指令/C語言用法)還有多看看Intel IA32 Architecture guide vol1~3(目前最新版是IA64),因為了解系統架構才是最基本的。
- A. i2 I0 ?- _0 q z. [7 i4 ~( z! w& a# k" P
如果要快速上手的話,你就先必須知道"設定方式",例如: 如何填CMOS/PCI Register(CF8/CF9),還有如何調整PIRQ/GPIO/ASL Code...等,如何透過SMbus/LPC存取? 何謂KBC/EC? 又要如何把OpROM 載入到記憶體,然後把控制權交給OpROM,執行後又把控制權還給BIOS/CPU Microcode如何更新?...etc. 這些都是基本OEM BIOS會做的事情,至於BIOS核心就必須很了解IA32架構你才有辦法去做。
5 h/ D9 Z8 b/ L' g8 J十月 04, 2007 5:39 下午 & G8 f5 c6 y; U) V. t/ i
$ p6 a" B; g. ~% n! N, G4 r1 F7 R: L
tonyya 提到...
5 e' }5 r. T( S/ D首先感謝你的回覆8 {. C& f& [; Z# M7 m5 c8 V
& ]0 r7 Q9 ]; i/ p1 A3 R# |1.目前接觸的是Legacy BIOS(組合語言)
7 U; l0 ?# y T3 {- `' G. h2 f9 P) U" R% z' s5 z' p: _8 U
2.IA32的系統架構有在看,目前也在積極補強一些相關的spec知識,不過還是要有實際做過才有感覺,對我而言如果只是光看的話無法深刻的體會
" V! a. V% W8 l$ g4 k8 h
( G) O& E( ~9 I# W+ m: V0 r( X U3.關於你說的設定方式,有的有碰過,像是PCI,ASL code,SMBUS/LPC, CPU Microcode更新,我會去補強你所提到而我沒碰到的部份
* F9 N% e( ^, x, K2 e/ p" i p1 x& o% ^5 h2 u1 L8 @
4.進入這行的感想是對於一些硬體的知識比以前來的了解,辛苦的是要一直摸索找方向,雖然東西很多要K,問題就在於太多東西反而有時不知從何著手 @@!
% D( `2 k5 ?6 Z( h
) @, @# x1 A& K5.再次感謝你所提供的意見
9 m. ]) l/ H8 y: x7 r十月 05, 2007 8:09 上午 2 [- [7 d( }- I" ^: p5 q$ B
9 o$ A U N v1 {
chiehlin@mail2000.com.tw 提到...
; |" k. ?% j+ m+ N+ U0 m- G2 HPCI Register 是 cf8 cfc Index ,Data# A5 ~) u9 n- S1 Q: G" A) `. ?
十月 25, 2007 11:17 上午
( c I6 [7 }( ]& {' n1 } 7 \ X% M S- y" Z D/ z
PT 提到... % d3 E1 V0 Z! @- K1 x1 i) B
關於SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)' f1 i& S5 T, ~9 v5 k0 A
mov eax, 80002750h
( B* ]& O7 G& X3 _( q3 I2 \. k依照我的理解方式是" F5 B ]7 i% Q+ E. F* D
10000000^00000000^00100^011^01010000; t" e/ u& o0 Y s/ V, b0 a
所以應該是80002350h |
|