|
|
一旦正確的頻率供給給system後, BIOS便依據既定的POST table(類似行程表)來做事. 首先,與chipset最為相關的便是 [chipset config stage]. 意即,在此階段BIOS必須對 chipset registers填入正確的值,俾使其正常運作. 一般而言,要config下列的 devices:4 U0 F1 j, Z; h
- NB(還記得前面有提過北橋內部約可分 4 blocks; "有些" blocks 需要 在此 program...)
4 `5 D; m% |5 p& F. \7 s! U- SB(即 PCI-ISA bridge)
2 }2 `$ H3 O4 g; H& R' Z. [- ACPI registers
% e K$ n5 `0 H$ {( q( k- USB registers/ J" N* \4 p9 Z0 B J
- SATA registers7 D/ w5 m: w" J% _) m' h, O
- PATA registers u! W. A: T, \! z3 `, i
...% k1 f9 w% `- v, q" j" {- t
5 p7 s5 \* I$ i/ ]/ d9 v* 在此所謂的 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之處 !!!
2 i, ` r2 }8 V+ O5 S! Q/ Y- G* b( \
* ACPI registers通常透過 IO 來存取: h+ W) L6 s$ S4 i' B) X
Ex. // assume ACPI Base is 800h,要 access ACPI Reg55h, s5 ~7 X9 D. |9 r. N7 x% r6 @
mov dx, 855h3 c, x( c, n. D% P4 N
in al, dx ; <- al = ACPI Reg55h's value1 ~* D4 I4 _( n7 q7 z
# c B3 R" O* F5 m. W; @1 M
* 上述所列的 devices多為 PCI device,也都有唯一的PFA(PCI Function Address,即 bus#,device#,func#),也因此,只要對 device 下 PCI configuration read/write便可以 config device registers.
: G. P$ g$ F1 y3 P! F+ s& `% {
! }7 `/ ~1 |5 d `6 |* h3 AEx. 假設: set SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)
7 ~* V, a% s, a6 f$ @5 @=> 簡單的 assembly can be:
3 b+ U5 `2 \3 M- L* y) Y7 S5 @* J) C6 z1 m$ W9 N
mov eax, 80002750h
- N: b( L* |3 w$ i" B' ^mov dx, 0cf8h
# i& d/ {) S) I3 \* z8 R" yout dx, eax3 P$ H: f- V) n; S/ |5 I
: N+ h; r [- m% l& ]
mov dx, 0cfeh4 v5 v/ `7 K, \. T+ U8 N2 z
in al, dx
6 ^4 B! [/ p$ v' c9 @or al, 00001000b
3 }6 @7 i% H5 e) |0 vout dx, al
7 m& j8 n8 f5 n. S3 c6 x* C
C9 L2 U* q* C5 J7 s事實上每家BIOS都 maintain many "tables" 來說明: 哪一個 device 中的哪些 registers要填?值.相關的 access routine都已經寫好. Programmer只需更改表裡面的值即可 ^_^
+ F) ^6 U4 p1 `5 ?5 Q% C F
, ~3 u- l1 w5 a/ G*當有人要求改 register setting時,我們必須知道三件事:9 @8 c3 m6 p @' X# {6 J
1. why (為什麼要改?)
" u& l6 O$ @+ H/ o3 l) K2. what(改成何值?)* }- t) u6 u0 T' D7 Y G& x
3. when(什麼點改?)" E# S( D, i* C5 z
8 b$ r' a! H @* ^2 X/ C0 n% d; | B
*對於 BIOS kernel與 OEM coding的人言,這部分會是較少碰觸的,因為,這些code會由 chipset porting的人負責撰寫及維護. & G( k/ t4 `2 A7 }" M) S
張貼者: HARRISON HSIEH 位於 8:41 下午 0 ?/ H: R4 s$ B6 A7 |; z& }
標籤: BIOS相關
# E8 Q) W- k( L/ @3 `8 k6 意見: : Z& \% e. ?; a' n6 G( c
( a0 y2 R% e8 w8 Mtonyya 提到...
0 k$ |0 h( T' x, ^) I無意間發現你的部落格' b, _4 @, V& [! f9 u
; k3 K/ U% Y' }3 m w很多文章都覺得受益良多
3 ^% N# @' f: C% x
L6 T: F4 L5 C3 s9 d9 r/ `我也剛接觸這門領域不久4 W+ H) q4 [' Z* T
7 `7 B1 E+ N# K5 @
很多東西都似懂非懂
$ T7 i. z( g7 t
$ E' w2 S1 @8 k* P! l不知對於一個新人而言
7 |) `7 D( D2 J/ z9 N# f: v
2 c7 m) X M+ ], X: G. H有沒有什麼好的訓練方式. i$ L- g* Z7 J
1 D$ Y6 Y* d/ M, B( W- e可以及早進入狀況
5 S# ?! e+ r! o9 n/ O- Q/ J, k十月 03, 2007 5:53 上午
6 y: K; V7 }9 [. h* W ) Q N, y' f, \" e1 l# T
Harrison 提到...
: f4 q& {( X9 ~% a3 S: X現在的BIOS有分成Legacy BIOS(組合語言)與UEFI BIOS(C語言),但是這兩種BIOS對於一個剛接觸的新手來說就只是Win98跟WinXp使用方式的差別而已,介面不同,但是要做的事情幾乎一樣。( `1 `2 F( K( o, n8 G
5 ]+ g2 {$ w" V6 r% a2 v所以我的建議是多去了解這些工具的用法(組合語言指令/C語言用法)還有多看看Intel IA32 Architecture guide vol1~3(目前最新版是IA64),因為了解系統架構才是最基本的。
( ~& P4 H1 b9 D U) q1 I0 t3 _6 i Q
如果要快速上手的話,你就先必須知道"設定方式",例如: 如何填CMOS/PCI Register(CF8/CF9),還有如何調整PIRQ/GPIO/ASL Code...等,如何透過SMbus/LPC存取? 何謂KBC/EC? 又要如何把OpROM 載入到記憶體,然後把控制權交給OpROM,執行後又把控制權還給BIOS/CPU Microcode如何更新?...etc. 這些都是基本OEM BIOS會做的事情,至於BIOS核心就必須很了解IA32架構你才有辦法去做。
4 ?# H; D+ y5 u2 B3 h* Q十月 04, 2007 5:39 下午 4 L5 I% f* X& {6 Q+ v4 P
9 n+ R1 ^) h( }tonyya 提到... 9 X6 e% b9 n% k& R/ A
首先感謝你的回覆2 j+ ~8 l) y, ?. Q
6 ], }4 n& T0 C$ r4 z% J1.目前接觸的是Legacy BIOS(組合語言)
: Y1 T! \0 @- U$ W# R _% ?" v9 o; Q% o
2.IA32的系統架構有在看,目前也在積極補強一些相關的spec知識,不過還是要有實際做過才有感覺,對我而言如果只是光看的話無法深刻的體會
' Y: \# Z) f( w3 n5 B0 O* p: M0 Z$ ^7 t/ ?- U- O B
3.關於你說的設定方式,有的有碰過,像是PCI,ASL code,SMBUS/LPC, CPU Microcode更新,我會去補強你所提到而我沒碰到的部份; d6 |& `* F9 s1 c w
' C1 S" @6 Y* L" F3 F, d5 k4 q- M) l$ z4.進入這行的感想是對於一些硬體的知識比以前來的了解,辛苦的是要一直摸索找方向,雖然東西很多要K,問題就在於太多東西反而有時不知從何著手 @@!
$ T% G. b* G# e9 H. ?( j; U& q- J
5.再次感謝你所提供的意見
4 c8 R r5 b# T( B十月 05, 2007 8:09 上午 8 s9 p* ]7 l9 N: k
" L' i5 x3 l! i/ C. B% x
chiehlin@mail2000.com.tw 提到... - n3 n# z, Y9 `' k) N
PCI Register 是 cf8 cfc Index ,Data- ~4 j# {) G/ ~, k$ }4 m
十月 25, 2007 11:17 上午 " T& b; c5 [2 f C. ]
) ]2 ` \ c6 g$ V1 z
PT 提到... ( j0 p! u* T: C+ a! Y+ ~
關於SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)
; C q; J; Q6 n2 e6 t- k' Lmov eax, 80002750h4 N" `3 j* P. s/ R* A6 P( X
依照我的理解方式是
6 \" U5 y0 u6 {$ m10000000^00000000^00100^011^01010000
9 a1 V1 ^3 W( q所以應該是80002350h |
|