|
一旦正確的頻率供給給system後, BIOS便依據既定的POST table(類似行程表)來做事. 首先,與chipset最為相關的便是 [chipset config stage]. 意即,在此階段BIOS必須對 chipset registers填入正確的值,俾使其正常運作. 一般而言,要config下列的 devices: ~+ p4 D9 a9 x6 j" Q: v
- NB(還記得前面有提過北橋內部約可分 4 blocks; "有些" blocks 需要 在此 program...)
7 J. j, m# l0 q1 Z" w; j- SB(即 PCI-ISA bridge)& O( h/ l! Z5 z0 B7 P
- ACPI registers
( R- P2 [8 N6 S/ C C9 m' E4 H* |- USB registers# G. J! S9 @1 |: e
- SATA registers$ ?! t1 K; D6 W' _6 t; R4 C, L
- PATA registers7 X6 y1 ?9 ]' V% [" _
...
b! D! t! e3 Q4 w; l* O c
6 [3 Z/ z3 Z& q. 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之處 !!!) Y! z, F! ?. [4 K
8 y; Y( i. I* ]9 B7 F* ACPI registers通常透過 IO 來存取
2 N6 k# G+ j6 q- `1 _Ex. // assume ACPI Base is 800h,要 access ACPI Reg55h
) d8 w, h: ]9 B; [' \) Tmov dx, 855h n$ E: q% U. D* Q- V/ @
in al, dx ; <- al = ACPI Reg55h's value
8 w- w* A# t& X% e) p5 a1 R2 A0 l: o9 S
* 上述所列的 devices多為 PCI device,也都有唯一的PFA(PCI Function Address,即 bus#,device#,func#),也因此,只要對 device 下 PCI configuration read/write便可以 config device registers.1 i" Y/ f5 y# V1 b( P Z5 ~
3 `+ z o( Z7 M0 Y5 rEx. 假設: set SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)
: S/ }3 [2 p- b=> 簡單的 assembly can be:4 J% o3 @/ [8 v
) |$ X: h, r7 r% ?
mov eax, 80002750h T( M0 Y4 q$ y9 S6 f8 A
mov dx, 0cf8h. y% m" F& f1 x
out dx, eax
& L, L4 F. c5 o9 Q2 \, d) e) ~4 B, {- S; @7 H
mov dx, 0cfeh9 l2 m- {* i& w) J
in al, dx
) r/ e1 S/ [/ nor al, 00001000b
& |3 f% q9 a+ R7 Iout dx, al
5 d M- D, V% s7 n0 M. f) ?
B+ o: l. \5 z6 a0 L事實上每家BIOS都 maintain many "tables" 來說明: 哪一個 device 中的哪些 registers要填?值.相關的 access routine都已經寫好. Programmer只需更改表裡面的值即可 ^_^% a4 V9 @' [% z! v5 y" j5 R
6 L( z) [7 L3 d- G9 q1 d+ R. f8 Y
*當有人要求改 register setting時,我們必須知道三件事:0 S: Q7 N2 s0 I2 ^+ G- ?$ f
1. why (為什麼要改?)5 t) b* p, K1 \4 o0 @7 g
2. what(改成何值?)6 r+ _; p) w i6 Q
3. when(什麼點改?): H: H7 w w/ Q( f. A8 Q
8 S) G! `1 a5 S4 m7 x0 H*對於 BIOS kernel與 OEM coding的人言,這部分會是較少碰觸的,因為,這些code會由 chipset porting的人負責撰寫及維護. ! k9 o( X) [' k4 B9 `* n
張貼者: HARRISON HSIEH 位於 8:41 下午 5 W% Q b) L, g2 |9 ?
標籤: BIOS相關 5 d$ e h/ q) A% S
6 意見: $ q- v4 M/ x8 T4 P
. Q" B. L1 z3 O& n3 q. N
tonyya 提到...
( }1 T; V4 S3 G' o0 t# E& `無意間發現你的部落格0 f3 P Z% W! B& `% _) T) ]
+ a6 J: n& E4 r& n4 {
很多文章都覺得受益良多
6 s* |+ T4 u6 h8 B! g0 f" i5 Q& w8 S' A. o
我也剛接觸這門領域不久
9 X* }. M* ~3 y! p* M5 _1 O5 G$ I1 _/ j Z$ v2 M0 C2 w2 O, O
很多東西都似懂非懂
& X% b: n m" v+ W1 t
$ @9 X! D- q0 y8 ^9 ^不知對於一個新人而言1 i& i. m! h: v) R) ^7 X
6 H. |7 T+ f9 ^
有沒有什麼好的訓練方式
2 _& a4 {1 }: r% @1 l6 A e
$ \& Y' L9 h1 m/ |可以及早進入狀況
* i, B! {% M% M: L+ }/ ~十月 03, 2007 5:53 上午
1 H3 r0 z$ k7 K. A- i
, H' F1 ?7 N& g8 w, d vHarrison 提到... 3 s. B* ^" U$ Y6 m1 F
現在的BIOS有分成Legacy BIOS(組合語言)與UEFI BIOS(C語言),但是這兩種BIOS對於一個剛接觸的新手來說就只是Win98跟WinXp使用方式的差別而已,介面不同,但是要做的事情幾乎一樣。
) b0 m" ~7 [3 W6 P- N- l( s( h+ v* ?
所以我的建議是多去了解這些工具的用法(組合語言指令/C語言用法)還有多看看Intel IA32 Architecture guide vol1~3(目前最新版是IA64),因為了解系統架構才是最基本的。1 @& _0 ]5 K! N" U4 |7 P
* e, ^' O( b o如果要快速上手的話,你就先必須知道"設定方式",例如: 如何填CMOS/PCI Register(CF8/CF9),還有如何調整PIRQ/GPIO/ASL Code...等,如何透過SMbus/LPC存取? 何謂KBC/EC? 又要如何把OpROM 載入到記憶體,然後把控制權交給OpROM,執行後又把控制權還給BIOS/CPU Microcode如何更新?...etc. 這些都是基本OEM BIOS會做的事情,至於BIOS核心就必須很了解IA32架構你才有辦法去做。
8 h( F6 S0 [- ?* V, u) p7 P# G十月 04, 2007 5:39 下午 2 [! _$ V( r O9 |9 z
3 \6 l- S7 T" [$ gtonyya 提到... 0 q3 q/ Y" F, U# B- l
首先感謝你的回覆# ^- {, _1 Q5 g; K1 e2 o7 ~: B
. U" B" ]! E: x2 P+ b {# W' F- [
1.目前接觸的是Legacy BIOS(組合語言)! m6 \! w7 S9 _/ S2 z' ~6 Q8 k7 ]* a
0 S" _6 p; I: X5 ^2 _- l o2.IA32的系統架構有在看,目前也在積極補強一些相關的spec知識,不過還是要有實際做過才有感覺,對我而言如果只是光看的話無法深刻的體會
; i3 Z: C% l6 f4 t; g6 |" z% {! ] [' ]7 w! {" u- [) Q
3.關於你說的設定方式,有的有碰過,像是PCI,ASL code,SMBUS/LPC, CPU Microcode更新,我會去補強你所提到而我沒碰到的部份% X: S0 X* W' V: B. Z3 `8 b
0 }+ m$ I0 ^3 k& H
4.進入這行的感想是對於一些硬體的知識比以前來的了解,辛苦的是要一直摸索找方向,雖然東西很多要K,問題就在於太多東西反而有時不知從何著手 @@!
. J- x/ L* N& f7 a( o g9 V1 f! p" h" v6 ^/ S3 x3 d' V
5.再次感謝你所提供的意見
( `# l' _6 ^' O: ^, A十月 05, 2007 8:09 上午 7 H7 U4 T5 I1 T$ M, w0 @8 i
5 v- C8 ]* {' f- T, Q; _( \3 z' Y$ Tchiehlin@mail2000.com.tw 提到... 5 p' W5 n: O1 N4 g6 I y- ~
PCI Register 是 cf8 cfc Index ,Data
, @2 y2 j* V( T: w9 q十月 25, 2007 11:17 上午
; n E) n3 L7 k/ y7 X7 A* i; c 5 W# R' g+ x: m s0 c' E" Z
PT 提到... ! q8 z7 o6 Z' b5 A- D
關於SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)5 g! M, n# M* y+ r- g7 g
mov eax, 80002750h7 i d' ^- ? n5 D& @
依照我的理解方式是, Y# ^7 G7 ~4 s! L# d1 C
10000000^00000000^00100^011^010100006 M7 p2 Q* ]& `6 u8 n/ X
所以應該是80002350h |
|