|
|
一旦正確的頻率供給給system後, BIOS便依據既定的POST table(類似行程表)來做事. 首先,與chipset最為相關的便是 [chipset config stage]. 意即,在此階段BIOS必須對 chipset registers填入正確的值,俾使其正常運作. 一般而言,要config下列的 devices:: s: @7 W! ]. h' m8 o
- NB(還記得前面有提過北橋內部約可分 4 blocks; "有些" blocks 需要 在此 program...)
7 u% U( @1 w4 k f, l- SB(即 PCI-ISA bridge)
. n9 ~6 {: l/ t1 ~. e. B; @& {- ACPI registers
, l) X1 t$ \6 [( K$ V* v. G2 ~6 {- USB registers
' a" y, G( m [7 X# @( c- SATA registers
: ^7 t5 }: i) T k7 H% f6 g$ E* n- PATA registers
+ S+ o. n' Q9 M9 S9 w...& p# x& z) C) F7 R
4 H5 ]3 _1 o( t, y# \7 r! U5 W* 在此所謂的 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之處 !!!: Z( @% |3 t/ r! s
# v& u& C; ^9 o _! ~2 Z* ACPI registers通常透過 IO 來存取
9 b W8 f, V$ W1 L- LEx. // assume ACPI Base is 800h,要 access ACPI Reg55h0 N2 T# l2 e, h/ m% k
mov dx, 855h$ J9 B* T- N" o& T, ~0 g8 \
in al, dx ; <- al = ACPI Reg55h's value
, S6 S6 n+ l% S) b" X! i. _( l, F: g. f( x; F- d7 ^
* 上述所列的 devices多為 PCI device,也都有唯一的PFA(PCI Function Address,即 bus#,device#,func#),也因此,只要對 device 下 PCI configuration read/write便可以 config device registers.3 t% `6 I5 H* l# \6 |* a7 I
, \5 |( M5 m0 t+ g8 H* e
Ex. 假設: set SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)8 @$ c; @; I2 Y8 ~$ K
=> 簡單的 assembly can be:
1 R5 l' V* s: j$ |, F
' |- V0 E/ u. v: nmov eax, 80002750h
, Y ^* P% X8 d4 p* r+ ]mov dx, 0cf8h
* j% j8 a* w" ?' K+ g6 _out dx, eax
2 ^" n0 d7 o, E9 Q' p5 I# B, u. S1 R0 U. G3 F7 J. R3 R2 U) N0 _
mov dx, 0cfeh$ f0 P) D5 P2 c" S+ O8 N/ e7 [0 _& [5 T
in al, dx7 h; D& K" P8 l' i6 v+ J U
or al, 00001000b2 S% G) ~3 e1 x' _$ M( ]* u
out dx, al
5 ]$ M6 R+ J6 o- J/ ] d6 B: y& d- \. C
事實上每家BIOS都 maintain many "tables" 來說明: 哪一個 device 中的哪些 registers要填?值.相關的 access routine都已經寫好. Programmer只需更改表裡面的值即可 ^_^
" Y# T/ @" X: U" c) D+ @3 `$ X7 L: G! C, f
*當有人要求改 register setting時,我們必須知道三件事: n4 C% h9 }; }" j X
1. why (為什麼要改?)2 g! y- [- Q4 S* N8 ~; [* b
2. what(改成何值?)) K# \- q$ F& ]2 p! e: T4 x
3. when(什麼點改?)
4 l9 l' p; X6 e4 }% l* Y
4 S$ ^7 x% i- t*對於 BIOS kernel與 OEM coding的人言,這部分會是較少碰觸的,因為,這些code會由 chipset porting的人負責撰寫及維護.
. u, `1 _, ^# ?5 J* ]張貼者: HARRISON HSIEH 位於 8:41 下午
0 d' t. o1 ^& m( @& N標籤: BIOS相關
0 \- ?, ^7 X8 {8 Z0 z6 意見:
( T! C3 G" N- [+ U! w% C- z* @ 7 R3 z s8 b' @% ~
tonyya 提到...
. e, z/ F* e; E無意間發現你的部落格
5 F& H# v2 S4 p* q8 G6 u* C# M& U* A: t+ N7 z6 u
很多文章都覺得受益良多
- Z$ {5 w( b( M( Y+ T7 c- r* h% l' v) h5 I$ k$ G
我也剛接觸這門領域不久& K0 `& X a6 z. p% Q
5 N% C3 T' }! ~- b很多東西都似懂非懂
* w$ c4 c( w; m& O* j" B0 l, Y' X
g2 ~2 x+ i7 t不知對於一個新人而言
/ f1 R c" i( R" w$ S& \
* p3 C3 U6 k" A6 g- q; ]! p( ]! G有沒有什麼好的訓練方式
2 C$ {; D0 m; v* X9 l7 J$ g1 O5 N' z9 _: ~1 Z5 {. @
可以及早進入狀況
: C+ K' h% V0 U& k0 Z, D: m十月 03, 2007 5:53 上午
+ `. |. g% {+ e# v7 j
7 e, v' L% z/ H6 H3 l% \6 ?& f: I0 ?Harrison 提到... / j8 M, t @2 w! O: b9 F0 f
現在的BIOS有分成Legacy BIOS(組合語言)與UEFI BIOS(C語言),但是這兩種BIOS對於一個剛接觸的新手來說就只是Win98跟WinXp使用方式的差別而已,介面不同,但是要做的事情幾乎一樣。 N5 w- w. n7 R2 N& |2 Z' O/ F% f
* u7 \+ _: L) n6 M {9 p' \
所以我的建議是多去了解這些工具的用法(組合語言指令/C語言用法)還有多看看Intel IA32 Architecture guide vol1~3(目前最新版是IA64),因為了解系統架構才是最基本的。$ q, ]7 I: C# x4 D: j+ v
. k4 |* }$ ^, N( R. r2 w) c. w
如果要快速上手的話,你就先必須知道"設定方式",例如: 如何填CMOS/PCI Register(CF8/CF9),還有如何調整PIRQ/GPIO/ASL Code...等,如何透過SMbus/LPC存取? 何謂KBC/EC? 又要如何把OpROM 載入到記憶體,然後把控制權交給OpROM,執行後又把控制權還給BIOS/CPU Microcode如何更新?...etc. 這些都是基本OEM BIOS會做的事情,至於BIOS核心就必須很了解IA32架構你才有辦法去做。1 g7 c/ o* s* T4 ~
十月 04, 2007 5:39 下午 + O, j- v* S o4 n4 Z% V1 O9 q
3 @! |0 @9 z( h# i2 }6 x5 P% Q
tonyya 提到... " G' W M2 f* _6 o. q* ]+ n& c
首先感謝你的回覆5 d0 {. ]! x# P. }8 P
9 J) N% M0 J& ^ g- g i' m1.目前接觸的是Legacy BIOS(組合語言)% T# l+ _' P% E/ k" w
( t* C P1 f/ x7 ~5 o; F3 ]5 `2.IA32的系統架構有在看,目前也在積極補強一些相關的spec知識,不過還是要有實際做過才有感覺,對我而言如果只是光看的話無法深刻的體會 S5 L, T; i% Y7 u
8 o' |7 ~$ V1 V* X. D0 D5 B' @! l. J& B3.關於你說的設定方式,有的有碰過,像是PCI,ASL code,SMBUS/LPC, CPU Microcode更新,我會去補強你所提到而我沒碰到的部份
" V5 s8 d2 R/ ^ a
% [$ {" R# L5 G$ ]6 V5 w4.進入這行的感想是對於一些硬體的知識比以前來的了解,辛苦的是要一直摸索找方向,雖然東西很多要K,問題就在於太多東西反而有時不知從何著手 @@!" \+ {, ~) A0 ?) P# U+ m) h: R
9 F4 b: ^% N0 I2 R
5.再次感謝你所提供的意見
( Y# t& ?+ ?' U十月 05, 2007 8:09 上午 * Q; P& {- n( w v# h; }3 W
* O3 U1 b! I: B" U7 C
chiehlin@mail2000.com.tw 提到...
" u- R6 {. c& r8 M Y& zPCI Register 是 cf8 cfc Index ,Data1 ^$ Z4 J; y3 F7 ]. r, e' u
十月 25, 2007 11:17 上午
4 P* J! w+ Q' _" q/ J
6 H( ^! |: \* y( I+ a4 QPT 提到...
! F: M5 U: n" @/ u |關於SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)( i2 X4 T2 N4 w
mov eax, 80002750h
9 L4 G- f' y* q, n0 K2 Y8 o依照我的理解方式是" c4 N- V% [' @' k& @! q# |' k
10000000^00000000^00100^011^01010000
0 N% i8 D4 r4 j+ {/ V- O' D所以應該是80002350h |
|