|
一旦正確的頻率供給給system後, BIOS便依據既定的POST table(類似行程表)來做事. 首先,與chipset最為相關的便是 [chipset config stage]. 意即,在此階段BIOS必須對 chipset registers填入正確的值,俾使其正常運作. 一般而言,要config下列的 devices:
* y; l& C8 S! j- NB(還記得前面有提過北橋內部約可分 4 blocks; "有些" blocks 需要 在此 program...)1 J/ ]: a0 j; t' D/ H7 ?- D
- SB(即 PCI-ISA bridge)6 F* U0 N, A, U* [6 q d7 S
- ACPI registers
( M* n: c5 C) Y1 Z% U0 p- USB registers
( r: U: D; `3 f2 I- SATA registers% \% q! Z, v. d8 q; Q
- PATA registers2 z% e3 S3 d' ` j) b& S8 C
...
: Q" w B; W% ]% }1 }6 v; |2 ?2 j! f8 n4 _% O3 }
* 在此所謂的 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 K5 ^5 {& m5 z6 j2 K- \# w1 o$ R; A- y1 H/ h
* ACPI registers通常透過 IO 來存取
/ {8 j: v* U2 C3 w l+ p; f% UEx. // assume ACPI Base is 800h,要 access ACPI Reg55h
0 r' D# E( H7 jmov dx, 855h
: @; v7 v9 l2 f& h2 din al, dx ; <- al = ACPI Reg55h's value
; r$ b* N: |$ @9 l4 M& M" P' I+ j4 A1 Q7 h ^) w( r2 E
* 上述所列的 devices多為 PCI device,也都有唯一的PFA(PCI Function Address,即 bus#,device#,func#),也因此,只要對 device 下 PCI configuration read/write便可以 config device registers.
+ @5 X9 L+ {- L7 N) I$ j5 T/ s, ]1 i$ D6 R- Q
Ex. 假設: set SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)
2 _( Z- ~8 G6 d=> 簡單的 assembly can be:3 a+ J( n& w2 f6 ~; d
, d n6 _. B* c5 ]: Y- h
mov eax, 80002750h
: V( ~* d. N9 U- s3 m( r: G: K$ Imov dx, 0cf8h" j i* ~8 j! j1 W' q7 q% f5 k
out dx, eax. {; v2 q" p }! Q. I, b" s
/ j$ B9 R' O# V% y
mov dx, 0cfeh
$ m' a6 A6 h4 t+ B) K* `7 @0 Pin al, dx
* B% Y9 j* G8 N0 K8 ?or al, 00001000b
+ z; E4 @( T# w. T* J* A5 rout dx, al
8 Y& L& }" b+ {5 Z+ i
) ?/ [, ^7 U! s( b事實上每家BIOS都 maintain many "tables" 來說明: 哪一個 device 中的哪些 registers要填?值.相關的 access routine都已經寫好. Programmer只需更改表裡面的值即可 ^_^
0 X% s+ T0 p; `0 ~
7 y7 D5 z/ d+ `*當有人要求改 register setting時,我們必須知道三件事:
) r2 J% x4 h# o5 V' D1. why (為什麼要改?)
( e$ b B/ _! P4 D# ?2. what(改成何值?): j1 u4 z6 I: }3 k. t5 h1 i7 t
3. when(什麼點改?)/ U3 i( M: M8 w/ k
; F) z4 W% B3 h2 A*對於 BIOS kernel與 OEM coding的人言,這部分會是較少碰觸的,因為,這些code會由 chipset porting的人負責撰寫及維護.
7 U: o( f& P; L: f7 Q$ s. J% c1 B張貼者: HARRISON HSIEH 位於 8:41 下午
. P7 B- b1 l' t$ k% s% ]標籤: BIOS相關 3 r: i- x1 f2 Q. R
6 意見: 1 m9 Q* H8 ^4 b! q+ s3 O6 Q5 |, S
4 k* A& E0 `, o# Y1 Q
tonyya 提到... 2 t6 G4 e S( k& z
無意間發現你的部落格
% S$ Y: Q# y2 Y1 m
^6 Q) B" ^- A很多文章都覺得受益良多! s! F0 B; \6 J$ y( `
/ R2 ?! M6 r. V2 c7 |0 O9 d, g/ n0 b6 _我也剛接觸這門領域不久
" N* F( {# p& j! V7 {; K, V: l, ~, S' w$ B- w- R% x
很多東西都似懂非懂
- c; G0 n4 d, K' ]8 G5 |* K
8 n# F" M& w& n0 X1 T# J不知對於一個新人而言7 _/ ^( H+ O8 w) d/ [
, s5 A0 {# p* f4 g3 e3 W2 G
有沒有什麼好的訓練方式
5 P( r2 a3 Z: i! V
) D& A* O0 u* d. H/ }! n) G可以及早進入狀況) Z5 r+ p8 E1 b- q
十月 03, 2007 5:53 上午 ( G0 }+ y5 a, |# R( T/ n& x3 u
" M+ g& y0 G6 N4 ?: q" Y! K! s
Harrison 提到... & p3 H8 `9 V& Z0 x
現在的BIOS有分成Legacy BIOS(組合語言)與UEFI BIOS(C語言),但是這兩種BIOS對於一個剛接觸的新手來說就只是Win98跟WinXp使用方式的差別而已,介面不同,但是要做的事情幾乎一樣。
1 o6 A4 B& P# @& H+ R7 h; T: e2 q3 q; Z/ r; ^
所以我的建議是多去了解這些工具的用法(組合語言指令/C語言用法)還有多看看Intel IA32 Architecture guide vol1~3(目前最新版是IA64),因為了解系統架構才是最基本的。, E( i& `" } `7 o0 g
8 c \% B! H/ w( B+ W+ B如果要快速上手的話,你就先必須知道"設定方式",例如: 如何填CMOS/PCI Register(CF8/CF9),還有如何調整PIRQ/GPIO/ASL Code...等,如何透過SMbus/LPC存取? 何謂KBC/EC? 又要如何把OpROM 載入到記憶體,然後把控制權交給OpROM,執行後又把控制權還給BIOS/CPU Microcode如何更新?...etc. 這些都是基本OEM BIOS會做的事情,至於BIOS核心就必須很了解IA32架構你才有辦法去做。% ]6 u* s; ]! M) L! h5 e
十月 04, 2007 5:39 下午
# `; t; J- G+ Q1 b + U5 e8 _6 s! K+ q1 O
tonyya 提到...
; {1 ]9 @) P# K. o3 m+ i. Q* Q首先感謝你的回覆3 S' t4 B/ o1 H* G/ k9 A1 h; L
8 m* |+ t9 r4 k
1.目前接觸的是Legacy BIOS(組合語言)* E/ _, [" P& \2 c
' j( {' ^2 ?1 D, @5 P
2.IA32的系統架構有在看,目前也在積極補強一些相關的spec知識,不過還是要有實際做過才有感覺,對我而言如果只是光看的話無法深刻的體會: d9 }- T+ _0 H0 J" c
4 s I$ r; t4 l1 C
3.關於你說的設定方式,有的有碰過,像是PCI,ASL code,SMBUS/LPC, CPU Microcode更新,我會去補強你所提到而我沒碰到的部份
, X4 I/ {) I" k' X9 E1 z* g% J
* a; {" K( P# d* e( `1 q7 U8 Y4.進入這行的感想是對於一些硬體的知識比以前來的了解,辛苦的是要一直摸索找方向,雖然東西很多要K,問題就在於太多東西反而有時不知從何著手 @@!
. D0 l/ P3 E# _* o' x! d5 p
2 V* h2 g% L2 y5.再次感謝你所提供的意見
1 a& u L. A/ Y十月 05, 2007 8:09 上午 * w. Z# I$ P' P5 g% ^- W+ a! a
' {1 F7 e$ k. J8 vchiehlin@mail2000.com.tw 提到...
! v3 a, x0 O ~6 j# a8 j. [( a2 ~* sPCI Register 是 cf8 cfc Index ,Data" a' r6 `. |6 n
十月 25, 2007 11:17 上午 ' y7 y1 F( N; `) d) v
, g& t- z5 ]& Q* _2 @
PT 提到...
7 z) a- z5 @& \; f( M關於SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)
6 W9 y6 O5 S ^" q; tmov eax, 80002750h4 p% {* K% W1 `2 D6 p6 o$ \
依照我的理解方式是
9 Y1 I" p9 [/ W10000000^00000000^00100^011^01010000
+ ~" n% ~, j2 g5 w6 {7 [' x所以應該是80002350h |
|