|
一旦正確的頻率供給給system後, BIOS便依據既定的POST table(類似行程表)來做事. 首先,與chipset最為相關的便是 [chipset config stage]. 意即,在此階段BIOS必須對 chipset registers填入正確的值,俾使其正常運作. 一般而言,要config下列的 devices:# x! f8 B5 V3 n4 m3 M9 N* F7 A
- NB(還記得前面有提過北橋內部約可分 4 blocks; "有些" blocks 需要 在此 program...)4 ~) C: R& g4 u
- SB(即 PCI-ISA bridge)& I! }/ v$ D2 W0 V* f7 G. x
- ACPI registers
4 g" f3 _! L5 K! G; g- USB registers
# L" f4 W! W6 V- SATA registers
) q4 B* G' k v- PATA registers8 Q/ h/ {! V) x5 \# Z ^
...2 Q2 n6 j3 G$ G1 k! T
$ [, D- w; F$ k9 F- k
* 在此所謂的 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之處 !!!
n* u ? c7 a4 x" E9 t& A) }( l: O. y2 v: ?2 R5 r
* ACPI registers通常透過 IO 來存取2 l% R) r8 e y- N, D$ }
Ex. // assume ACPI Base is 800h,要 access ACPI Reg55h
4 E! d! l2 r* u$ ymov dx, 855h
# o. f+ C6 T6 E# O! U& gin al, dx ; <- al = ACPI Reg55h's value: ? U+ W* Q. D$ c) P% Z! J a
; b5 s) t. C/ u; v! c* k- S* 上述所列的 devices多為 PCI device,也都有唯一的PFA(PCI Function Address,即 bus#,device#,func#),也因此,只要對 device 下 PCI configuration read/write便可以 config device registers.
2 `: D0 l/ a! M
! c# |1 ]$ }, [Ex. 假設: set SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)
" h; a. Z: ]2 A4 t+ ^=> 簡單的 assembly can be:: v/ I7 G# A0 x' H
( e8 Y; l( ~: x% `$ R8 Nmov eax, 80002750h3 d/ K ^6 U5 x
mov dx, 0cf8h
- _6 [* K0 f: s: d+ D% N) k7 Qout dx, eax/ [/ @% a7 x" }+ W- c$ P
- u: y5 Y: v! e6 \# b
mov dx, 0cfeh' K0 b1 \0 c! [! J' s
in al, dx& U+ `+ p# B8 B; g) S+ F& E
or al, 00001000b
+ I8 C2 r% d0 n0 Z6 Uout dx, al & p" O9 ^ X- Q& h) G
, U) `" T. t8 u
事實上每家BIOS都 maintain many "tables" 來說明: 哪一個 device 中的哪些 registers要填?值.相關的 access routine都已經寫好. Programmer只需更改表裡面的值即可 ^_^
/ q7 v% ~$ G5 f4 @1 @0 V& W
+ i& z: g: e L9 U H, b2 A" W3 Y, {*當有人要求改 register setting時,我們必須知道三件事:
; d* ^# A. Z9 ~+ |/ F6 X, L1. why (為什麼要改?)7 g, s. W4 p/ ^# k% l
2. what(改成何值?)
- y( C9 U/ U+ l( m/ S. g5 s) N3. when(什麼點改?)$ U8 X+ V# u" b" q
* }$ H7 I. o& p
*對於 BIOS kernel與 OEM coding的人言,這部分會是較少碰觸的,因為,這些code會由 chipset porting的人負責撰寫及維護.
5 _. n7 N( f7 p5 X: i4 u& z張貼者: HARRISON HSIEH 位於 8:41 下午 ' y5 H3 S- ? T% n6 B
標籤: BIOS相關
/ c: ~. A8 ]/ P8 h% ^" P6 意見:
/ {% D3 Y0 e& ~1 E" D! v
; s. Q" k- m- i3 |4 Z, X$ Itonyya 提到...
' d0 |5 K C9 x* }無意間發現你的部落格' w; C% e Z3 C' m* Y; [2 F$ G
7 U: O8 R5 L# ~! q r
很多文章都覺得受益良多8 I8 i' E+ X: k; L( q8 P6 k' ?. ~" h6 e
' f% N# G$ A; ]: E- j, {8 f9 Q
我也剛接觸這門領域不久
: A0 i' V6 Q( \* b' P- j! f9 S/ f, S" m$ H+ C
很多東西都似懂非懂 N1 `' e. v H4 N
3 H) C. a" D5 w0 p! X. Q; Q3 N不知對於一個新人而言6 H- o# _) M/ H% l" h9 w3 a
# n; e& y0 C/ J
有沒有什麼好的訓練方式% |3 b' P$ l P. H; m# l4 k
; U* ^6 U; a* ?, `- G4 n1 S1 m0 F+ w可以及早進入狀況" e- Z" k3 S# @% E3 z7 ?( v
十月 03, 2007 5:53 上午
, ]) r, _3 l. N. d7 m 1 X4 d: e" F4 L) b
Harrison 提到... 0 Y9 l, j6 t( o8 C; s
現在的BIOS有分成Legacy BIOS(組合語言)與UEFI BIOS(C語言),但是這兩種BIOS對於一個剛接觸的新手來說就只是Win98跟WinXp使用方式的差別而已,介面不同,但是要做的事情幾乎一樣。! O- _" n, j* M- x, F
0 x% T2 n+ f) ^ w2 I- \所以我的建議是多去了解這些工具的用法(組合語言指令/C語言用法)還有多看看Intel IA32 Architecture guide vol1~3(目前最新版是IA64),因為了解系統架構才是最基本的。$ @1 n! U7 D! m9 \
& f- x( q: f+ H9 |( N( f* y/ b8 A
如果要快速上手的話,你就先必須知道"設定方式",例如: 如何填CMOS/PCI Register(CF8/CF9),還有如何調整PIRQ/GPIO/ASL Code...等,如何透過SMbus/LPC存取? 何謂KBC/EC? 又要如何把OpROM 載入到記憶體,然後把控制權交給OpROM,執行後又把控制權還給BIOS/CPU Microcode如何更新?...etc. 這些都是基本OEM BIOS會做的事情,至於BIOS核心就必須很了解IA32架構你才有辦法去做。
# E, X6 o& Q) L% [, F十月 04, 2007 5:39 下午 7 Z& h6 C4 u& ^9 c: J# [; w7 M* R$ C
j+ ^$ [, a' l" B* Stonyya 提到... 0 J* F! h. W- C5 ]. s
首先感謝你的回覆- N6 S& I, y) q
% \, ^& P3 o- J; C/ Z8 z; e1.目前接觸的是Legacy BIOS(組合語言). P) C" K9 t% V# s
8 J9 \$ c% M- j2 Y' K
2.IA32的系統架構有在看,目前也在積極補強一些相關的spec知識,不過還是要有實際做過才有感覺,對我而言如果只是光看的話無法深刻的體會6 q6 O& B" C+ X4 R( f0 r! H
# r1 v1 b3 s: I/ T( W" c! i( U3.關於你說的設定方式,有的有碰過,像是PCI,ASL code,SMBUS/LPC, CPU Microcode更新,我會去補強你所提到而我沒碰到的部份' v3 m; y* ^8 m
# _9 Q" ?- u; p$ D# a3 j5 `/ W5 H4.進入這行的感想是對於一些硬體的知識比以前來的了解,辛苦的是要一直摸索找方向,雖然東西很多要K,問題就在於太多東西反而有時不知從何著手 @@!
' X$ p4 h& m9 j6 W* G* ^* N) t4 W0 x1 ~& X5 _2 _* b; j9 n9 _
5.再次感謝你所提供的意見4 ~; |# D: }6 @( L. [0 N- p$ M0 G
十月 05, 2007 8:09 上午 8 c+ J4 [2 g7 N/ y% D3 d
8 V: p" q+ Q/ x" p0 I
chiehlin@mail2000.com.tw 提到... # m6 I4 f6 Y" i* T* y( k/ x
PCI Register 是 cf8 cfc Index ,Data
/ D9 T" b* U. N0 X十月 25, 2007 11:17 上午 9 `; }: K% ?* K5 U! A* y
; t/ d$ o$ l! l+ [/ C, qPT 提到... 4 c5 ~9 W, _% o5 N7 X& [; g
關於SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)
6 S/ M. @5 j! m2 r5 ]mov eax, 80002750h
6 f7 n7 J+ T }% e( v y依照我的理解方式是5 @2 C7 R! v) }% ]* m/ c+ X5 w
10000000^00000000^00100^011^01010000' [# X" [/ P7 }9 q; |
所以應該是80002350h |
|