|
|
一旦正確的頻率供給給system後, BIOS便依據既定的POST table(類似行程表)來做事. 首先,與chipset最為相關的便是 [chipset config stage]. 意即,在此階段BIOS必須對 chipset registers填入正確的值,俾使其正常運作. 一般而言,要config下列的 devices:
3 h: f# V. j5 _) w# t# M% z' N- NB(還記得前面有提過北橋內部約可分 4 blocks; "有些" blocks 需要 在此 program...)
, ]6 s' y; @/ ^- x8 ~- SB(即 PCI-ISA bridge). b6 }/ r: q0 K9 y/ r' Z# P
- ACPI registers+ u( }: h3 v4 F+ O) r# A
- USB registers' C7 k8 s C6 ], Z( s
- SATA registers8 a7 c% f8 J1 h
- PATA registers
7 Z- J k2 z$ I- Q9 [...
. E" A0 X) x: S, i# k
" U( O+ A/ l2 h5 C* 在此所謂的 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之處 !!!/ v% J6 `3 u/ w) ~
! c. s c% {6 y2 w* ACPI registers通常透過 IO 來存取) `. F5 W9 O5 g7 Z2 C4 r, U
Ex. // assume ACPI Base is 800h,要 access ACPI Reg55h
$ I- _ }; z- {mov dx, 855h7 w E4 N, Z, k2 l. R! V$ o7 \
in al, dx ; <- al = ACPI Reg55h's value
4 E' q) u% i- q8 u9 K- X: r6 `- d& `; @2 y- Q8 p0 K
* 上述所列的 devices多為 PCI device,也都有唯一的PFA(PCI Function Address,即 bus#,device#,func#),也因此,只要對 device 下 PCI configuration read/write便可以 config device registers.* D+ x! i3 y( ^
2 k3 i% d$ c3 T" c0 Q5 `
Ex. 假設: set SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)/ h3 |5 `; p- `3 L; I
=> 簡單的 assembly can be:
! ?8 |: \( W" N; d
- O4 \% z6 P6 Q7 n* zmov eax, 80002750h
* h1 J- A* o7 G7 f6 b, J% Cmov dx, 0cf8h
, j- n7 y& \; Y# e0 d* J" bout dx, eax; b! E! N- w* N! t: m
) |6 t, l/ @# P1 k# V5 `6 Z
mov dx, 0cfeh' Y R2 R' N2 Q' h
in al, dx
& f9 q$ I+ [6 s* D. Kor al, 00001000b
$ A, Q! }: _ K- iout dx, al
: r5 z2 [5 \/ X
3 }( P7 l( T5 ]& K事實上每家BIOS都 maintain many "tables" 來說明: 哪一個 device 中的哪些 registers要填?值.相關的 access routine都已經寫好. Programmer只需更改表裡面的值即可 ^_^! ~' j2 X9 ~/ `5 T
' x+ f: ^+ _" M
*當有人要求改 register setting時,我們必須知道三件事:
9 w7 E8 |) K, v1. why (為什麼要改?)
1 a: w! x1 S$ r2. what(改成何值?): _/ |# g/ ` g# n" w; ?! e
3. when(什麼點改?)6 M. N% M9 K% `1 J6 R9 C' [
, s5 ~8 W7 ]/ u, U$ z. ]
*對於 BIOS kernel與 OEM coding的人言,這部分會是較少碰觸的,因為,這些code會由 chipset porting的人負責撰寫及維護.
$ u' r+ ?) ?2 b W7 |" r張貼者: HARRISON HSIEH 位於 8:41 下午 3 `) o1 o# d7 J/ E6 X
標籤: BIOS相關
: R+ P: O$ H# k6 意見:
' g# n' S: w$ u1 w
6 t6 t) C3 C! x" ^5 I% Ttonyya 提到...
: g q( s) \% d" g5 w& W+ }無意間發現你的部落格
; j+ r2 Y" n3 {/ V+ x7 d
3 B, h/ p X3 |很多文章都覺得受益良多
. X: q; ]* O% z, y N. h2 @3 M% d( p! C! j" D; q* c% n1 V' B
我也剛接觸這門領域不久; l1 B- R: N( h! M
: ^9 h4 K1 H$ K很多東西都似懂非懂
, |) W1 T c# B$ @0 {: V5 Z0 S
- ~4 s8 ^7 \3 y7 p5 ~不知對於一個新人而言) z: `" R+ }% Y& c* O% L/ B
$ q# |3 y" l2 B# B& D有沒有什麼好的訓練方式
$ M8 `2 B$ i5 M0 U/ g& s, [% x& R8 m' v# H8 H
可以及早進入狀況 D Z. z/ j! T. \4 `0 \
十月 03, 2007 5:53 上午 4 Z; {! q2 f0 G- N
4 E2 a: q# q. l1 `9 WHarrison 提到... m4 R2 a* k7 x& H: }0 O
現在的BIOS有分成Legacy BIOS(組合語言)與UEFI BIOS(C語言),但是這兩種BIOS對於一個剛接觸的新手來說就只是Win98跟WinXp使用方式的差別而已,介面不同,但是要做的事情幾乎一樣。+ j" B# C5 j6 ~ a( |" u, Q6 d
+ ~& t k/ Y, T, O; Z* ^所以我的建議是多去了解這些工具的用法(組合語言指令/C語言用法)還有多看看Intel IA32 Architecture guide vol1~3(目前最新版是IA64),因為了解系統架構才是最基本的。
) e) X6 S/ r: C- t/ w' B. V/ N0 O/ T' Q
如果要快速上手的話,你就先必須知道"設定方式",例如: 如何填CMOS/PCI Register(CF8/CF9),還有如何調整PIRQ/GPIO/ASL Code...等,如何透過SMbus/LPC存取? 何謂KBC/EC? 又要如何把OpROM 載入到記憶體,然後把控制權交給OpROM,執行後又把控制權還給BIOS/CPU Microcode如何更新?...etc. 這些都是基本OEM BIOS會做的事情,至於BIOS核心就必須很了解IA32架構你才有辦法去做。* _) ~9 Y; b# H# K6 O, P& m- C3 e
十月 04, 2007 5:39 下午 3 `$ F y4 B) I0 z4 E4 L
, z+ W' ^+ H& L% Z/ W) P
tonyya 提到...
* b! y k- Y; D6 h' ?* \" p首先感謝你的回覆& p3 }7 u. p' O3 P
, r: }( C5 K D1 a g" p1.目前接觸的是Legacy BIOS(組合語言)5 E0 n# A8 D* o7 \, K4 J
4 @+ x; {7 q' a6 p2 Y5 W( |2.IA32的系統架構有在看,目前也在積極補強一些相關的spec知識,不過還是要有實際做過才有感覺,對我而言如果只是光看的話無法深刻的體會
0 Q$ z5 b2 W7 J9 Y( ~: Y2 A! D- r3 V# u; E9 N( T5 R; [
3.關於你說的設定方式,有的有碰過,像是PCI,ASL code,SMBUS/LPC, CPU Microcode更新,我會去補強你所提到而我沒碰到的部份
# Z6 [5 @- a4 a; W$ {+ Z' F; S1 L! V5 b/ a0 N; ^
4.進入這行的感想是對於一些硬體的知識比以前來的了解,辛苦的是要一直摸索找方向,雖然東西很多要K,問題就在於太多東西反而有時不知從何著手 @@!
* D: E* b9 t/ l
& }4 [5 n) a! ~3 E5.再次感謝你所提供的意見$ a0 X4 ?4 F: o& y0 X! {- e
十月 05, 2007 8:09 上午 8 \6 I! g* L+ `: G/ B
" }0 L, C6 T" O; Y
chiehlin@mail2000.com.tw 提到...
- `. O, _8 j7 `6 D" M3 ]PCI Register 是 cf8 cfc Index ,Data) ?9 {2 [3 a! s- S2 l' Q
十月 25, 2007 11:17 上午
6 s2 o! \/ ^5 i8 z! R & A L# ]4 A, O
PT 提到... + a d: n2 ]$ a4 e( E
關於SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)" l$ X4 _ J7 I6 ^ x
mov eax, 80002750h, O& P: C8 |' h* i8 K& K
依照我的理解方式是* W$ e; U5 N4 `
10000000^00000000^00100^011^01010000
. p/ T0 B( L( N3 U, F' R! _) `所以應該是80002350h |
|