|
|
一旦正確的頻率供給給system後, BIOS便依據既定的POST table(類似行程表)來做事. 首先,與chipset最為相關的便是 [chipset config stage]. 意即,在此階段BIOS必須對 chipset registers填入正確的值,俾使其正常運作. 一般而言,要config下列的 devices:, Y5 y$ q- m% P
- NB(還記得前面有提過北橋內部約可分 4 blocks; "有些" blocks 需要 在此 program...)& d% H2 j f" M* p7 b% }
- SB(即 PCI-ISA bridge) g2 O9 [. G+ n: y' f
- ACPI registers
7 N* h9 l9 z0 F% ~3 D7 X- USB registers( R- y/ V0 u J; ~2 D$ R
- SATA registers P" h6 S. Q( r8 m e) m4 T. [% x0 A
- PATA registers
; n& ]4 G5 {1 f. R/ ~; m...
) N( F! A+ {$ ~; J
4 [0 X) r/ n$ W4 R9 }6 k7 }* 在此所謂的 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之處 !!!
3 h6 e, M& {7 {3 W2 e o/ T. o% t5 _+ j. N- J8 }6 ^2 h
* ACPI registers通常透過 IO 來存取8 y, X( J" P/ D
Ex. // assume ACPI Base is 800h,要 access ACPI Reg55h) ]4 v; O ~+ M4 e: q6 v
mov dx, 855h( D# E, A+ s0 s) Q2 w
in al, dx ; <- al = ACPI Reg55h's value
$ b) _: G C' Q# U
; ]$ S8 N4 R; D- e$ i7 V% p* 上述所列的 devices多為 PCI device,也都有唯一的PFA(PCI Function Address,即 bus#,device#,func#),也因此,只要對 device 下 PCI configuration read/write便可以 config device registers.$ o. |7 e( C) n5 D& ?
; z$ K" j0 X8 v$ A @, {* B
Ex. 假設: set SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)0 C4 m2 }0 u! d j
=> 簡單的 assembly can be:
% E, e3 G+ A, a7 A
4 m7 F1 E/ t( m G! \, cmov eax, 80002750h, u4 I9 K& ~- q7 N' B8 R4 R# v
mov dx, 0cf8h
6 Y. D) |( v n0 d. Oout dx, eax
' x5 U$ p) Z+ y0 b$ y- d; J4 s8 [) A6 N6 H
mov dx, 0cfeh
; [# S5 l4 d- Oin al, dx2 n2 y6 j! ~2 A: I
or al, 00001000b' n) U5 U9 H# B% H1 t% |
out dx, al
- j* W5 }& M: s) a
! c5 j9 Z5 g1 t( Y事實上每家BIOS都 maintain many "tables" 來說明: 哪一個 device 中的哪些 registers要填?值.相關的 access routine都已經寫好. Programmer只需更改表裡面的值即可 ^_^
" ]; _ z5 I! f! T2 e% `; z+ k. J5 o5 k5 ~( ]2 c0 j
*當有人要求改 register setting時,我們必須知道三件事:+ Z0 m/ b; ` V5 y# ]
1. why (為什麼要改?)$ R; e; h: Y1 G- S/ K; g. k! h
2. what(改成何值?)4 M5 @2 J8 d* p$ t4 k% \" M! I
3. when(什麼點改?). t' [: ~+ N/ I/ m+ Z' J0 b$ U
; { {1 h7 |9 A; \% [/ H% u
*對於 BIOS kernel與 OEM coding的人言,這部分會是較少碰觸的,因為,這些code會由 chipset porting的人負責撰寫及維護.
& p S& U9 M1 z3 e% X6 ]; l( K張貼者: HARRISON HSIEH 位於 8:41 下午
* N0 m! j2 k, v5 L# ` ^標籤: BIOS相關
0 G: u1 U% X. a6 意見: + N$ h9 L) a) s2 A0 N; p
+ s' N! V9 U/ E k L% a( s+ I1 ptonyya 提到... + K p& A; Y- T( Y: }5 O, V
無意間發現你的部落格
, A% X9 C E. ?% m, x& A- C8 P
4 P- X+ T0 C2 O) l很多文章都覺得受益良多' M3 f9 ~# P* |8 s+ b2 q
1 s/ z. t: v- }/ q我也剛接觸這門領域不久
4 z, t7 H! H; b2 N$ v( R" b4 ~) g1 }/ Z# P. ]: }0 S
很多東西都似懂非懂
7 B# ^& V2 g/ J- b- B& p9 F& M. O0 y# ^: q! ~9 U+ B5 K- K: I7 q
不知對於一個新人而言
4 Y' Z/ |( _5 Q
6 I% f n: Z+ a7 [$ n. o* [+ w9 q有沒有什麼好的訓練方式: k; U& y! y U2 b* P$ l6 w
$ @/ O9 _" j5 p7 _, D
可以及早進入狀況
2 X( e4 b) J0 P8 f# r$ S2 C十月 03, 2007 5:53 上午 1 e8 F6 _' D8 m) R- Q
: y' h3 L1 T4 a; G' D) nHarrison 提到... 5 A; ]7 D! }6 W5 r
現在的BIOS有分成Legacy BIOS(組合語言)與UEFI BIOS(C語言),但是這兩種BIOS對於一個剛接觸的新手來說就只是Win98跟WinXp使用方式的差別而已,介面不同,但是要做的事情幾乎一樣。0 V8 B: O) y3 x& q( }% R- U* g2 ~
9 y- d4 A+ R) f所以我的建議是多去了解這些工具的用法(組合語言指令/C語言用法)還有多看看Intel IA32 Architecture guide vol1~3(目前最新版是IA64),因為了解系統架構才是最基本的。& q. T7 `2 k5 W- z) W d5 ^8 X1 S
7 R* F7 u6 }7 c" p: }' ^- G
如果要快速上手的話,你就先必須知道"設定方式",例如: 如何填CMOS/PCI Register(CF8/CF9),還有如何調整PIRQ/GPIO/ASL Code...等,如何透過SMbus/LPC存取? 何謂KBC/EC? 又要如何把OpROM 載入到記憶體,然後把控制權交給OpROM,執行後又把控制權還給BIOS/CPU Microcode如何更新?...etc. 這些都是基本OEM BIOS會做的事情,至於BIOS核心就必須很了解IA32架構你才有辦法去做。
+ Y$ Y$ R; c) O. R) G7 h1 ^十月 04, 2007 5:39 下午
! D+ E! S5 q7 Z1 g
; t! A5 q' Q# k7 |7 Ztonyya 提到...
! n9 }/ d( z' [首先感謝你的回覆, M9 b0 w5 b9 \3 c
2 I9 v3 J# t5 o# L1 J: a
1.目前接觸的是Legacy BIOS(組合語言)
- ~0 `; f6 Y8 ^# O) @+ x/ R3 G# ~4 v2 F
2.IA32的系統架構有在看,目前也在積極補強一些相關的spec知識,不過還是要有實際做過才有感覺,對我而言如果只是光看的話無法深刻的體會* P- `- U9 }7 ^) z
7 A+ G, i3 I) J2 b* b" M3.關於你說的設定方式,有的有碰過,像是PCI,ASL code,SMBUS/LPC, CPU Microcode更新,我會去補強你所提到而我沒碰到的部份- V6 N) \/ H- ~ ?$ H7 f1 Y
+ O/ p6 z+ P M/ S- E4.進入這行的感想是對於一些硬體的知識比以前來的了解,辛苦的是要一直摸索找方向,雖然東西很多要K,問題就在於太多東西反而有時不知從何著手 @@!
) ^! P1 _) Z- ~/ w$ t' w( h- }7 }
# j, h0 q% @( m2 M. K5.再次感謝你所提供的意見
- K9 U" [6 O. _( j* n1 W3 M十月 05, 2007 8:09 上午
, l5 z; P4 R# ?' c S9 u" I* q ; c2 E7 M" J- ]) C' ] P. a' M
chiehlin@mail2000.com.tw 提到... & z" {6 O' `( V& L9 p. G
PCI Register 是 cf8 cfc Index ,Data1 g7 T& [* I% [% |! ?/ j
十月 25, 2007 11:17 上午
- v+ R8 U. n* | - r, ]9 `1 Y- \3 j6 b0 W
PT 提到... 5 f9 B S! B! L; d: n
關於SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)
6 `6 Y, K! Y/ @% H4 p; Mmov eax, 80002750h1 F0 N; _4 u0 k3 J \; d6 C
依照我的理解方式是
8 \% b$ v3 l- i. H! M10000000^00000000^00100^011^01010000
# _9 {2 [% _& N- v6 Z7 d2 f, B所以應該是80002350h |
|