|
一旦正確的頻率供給給system後, BIOS便依據既定的POST table(類似行程表)來做事. 首先,與chipset最為相關的便是 [chipset config stage]. 意即,在此階段BIOS必須對 chipset registers填入正確的值,俾使其正常運作. 一般而言,要config下列的 devices:
5 z0 c3 c9 L& q7 I- NB(還記得前面有提過北橋內部約可分 4 blocks; "有些" blocks 需要 在此 program...)
9 C- o/ W) |# ]- SB(即 PCI-ISA bridge)6 F& ^, i' f" }& o) y5 _6 e# W; e+ _
- ACPI registers: i# ]. c8 {8 |5 a3 e W: z
- USB registers5 l0 B& B9 E f/ Z
- SATA registers
6 t1 h- E) D9 b6 h, R- PATA registers
/ N/ R+ |! Y+ o; r& k: l: b.../ s4 h. Q' A' e7 a Q3 z
; y4 U& d; @- G' u6 z& ~, Q
* 在此所謂的 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之處 !!!- l! w! t( N% V
; U) U" Z( B+ P4 r2 w8 l
* ACPI registers通常透過 IO 來存取
6 @# i X2 S/ @, YEx. // assume ACPI Base is 800h,要 access ACPI Reg55h/ ^& R4 m% g7 N, e8 ~' w( h
mov dx, 855h
* @3 t0 M' ^3 kin al, dx ; <- al = ACPI Reg55h's value( N/ b' v( z8 e9 I" }. V- x1 X% N! a
, b/ M+ w" G" n- q: q5 ?* 上述所列的 devices多為 PCI device,也都有唯一的PFA(PCI Function Address,即 bus#,device#,func#),也因此,只要對 device 下 PCI configuration read/write便可以 config device registers.
, a4 t* H% H6 M9 l5 }
$ B9 B3 p8 N/ L# f0 x% E, XEx. 假設: set SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)
0 F* e8 D+ q/ c- U( A. q=> 簡單的 assembly can be:' |% V! G0 C. o$ _ F& P- ~
# j" i4 t2 A" q% i% j% q! J* f9 W
mov eax, 80002750h
7 ^0 [' O# o/ n5 wmov dx, 0cf8h
6 q# \9 A+ |) j5 Q% i J% g- a* g1 Rout dx, eax6 x) U6 K# I; _- l/ n" Q
9 q. j7 |7 H2 a1 J( a8 y3 Z8 \/ ymov dx, 0cfeh$ x8 _$ V% f2 Z
in al, dx7 o: e' B% f0 { W8 S, W! C, e
or al, 00001000b
/ ?$ r, n$ b9 U' oout dx, al
3 P6 h0 h. D6 l( v4 t* [ r
. N0 Y- v+ k% \; O5 b9 J事實上每家BIOS都 maintain many "tables" 來說明: 哪一個 device 中的哪些 registers要填?值.相關的 access routine都已經寫好. Programmer只需更改表裡面的值即可 ^_^
, w. R! m4 _0 |0 ^1 M7 X7 ?4 g3 r$ `& _, t, C2 |5 I
*當有人要求改 register setting時,我們必須知道三件事:
2 {# Y9 d- p" H( ^1 q- v T F1. why (為什麼要改?)9 ~! A' X8 U8 c
2. what(改成何值?)
# y! D+ G. c3 L; g3 a6 y1 C3. when(什麼點改?)
; d& |* J5 }, q! K ?$ Y& h; r+ j, {4 b5 {
*對於 BIOS kernel與 OEM coding的人言,這部分會是較少碰觸的,因為,這些code會由 chipset porting的人負責撰寫及維護.
s' n! N( P+ P張貼者: HARRISON HSIEH 位於 8:41 下午
) @* v; r7 M3 y" \標籤: BIOS相關 " ]3 q! m5 b" Q7 I& {
6 意見:
. }& K- a P" B8 \. ]% D# I* D
3 I" _' R8 F3 b- ~& |% l: Jtonyya 提到...
( w# w x4 k. Y2 k& m無意間發現你的部落格- d* n, A6 o% S4 P0 X* e" m; q
4 f% W) p% I* ?; v. k" w: H
很多文章都覺得受益良多
2 ?0 t" S8 H& w: o& T. j
" M. f) o1 t: c2 u我也剛接觸這門領域不久" V8 C8 G( c( j$ G% u0 u
0 C* F9 U0 H. d
很多東西都似懂非懂: E( `1 x8 L6 ~# E
A" f: F4 R2 i4 v不知對於一個新人而言6 Z# y" r* o; S
8 a: I0 b+ v% z' o' S$ Q
有沒有什麼好的訓練方式- D- }2 r/ r. n, }" Z, U
. D% g9 [: V6 s1 J可以及早進入狀況
2 s. T* s& L& O) C7 p# t m十月 03, 2007 5:53 上午 9 b; w: J( I0 r! X
& F) [. `% M. D2 m4 iHarrison 提到... 3 D/ D9 @* a1 Z- Y/ d+ c- Y5 ?: M
現在的BIOS有分成Legacy BIOS(組合語言)與UEFI BIOS(C語言),但是這兩種BIOS對於一個剛接觸的新手來說就只是Win98跟WinXp使用方式的差別而已,介面不同,但是要做的事情幾乎一樣。. j' i* I; t; ^4 J' ~
( P- }/ B" |) y5 l* G! b) U
所以我的建議是多去了解這些工具的用法(組合語言指令/C語言用法)還有多看看Intel IA32 Architecture guide vol1~3(目前最新版是IA64),因為了解系統架構才是最基本的。
0 G6 P1 r; S, P' X* q& K' J( W9 w. e: u
如果要快速上手的話,你就先必須知道"設定方式",例如: 如何填CMOS/PCI Register(CF8/CF9),還有如何調整PIRQ/GPIO/ASL Code...等,如何透過SMbus/LPC存取? 何謂KBC/EC? 又要如何把OpROM 載入到記憶體,然後把控制權交給OpROM,執行後又把控制權還給BIOS/CPU Microcode如何更新?...etc. 這些都是基本OEM BIOS會做的事情,至於BIOS核心就必須很了解IA32架構你才有辦法去做。
/ ?% [: z) j4 \9 ^/ x; q十月 04, 2007 5:39 下午 % C7 o# p* i4 s; _+ k3 ]3 ^& E
" a4 Q; B9 a2 c" j5 \$ S: H7 h4 S
tonyya 提到...
( k0 y( C, h. p: g首先感謝你的回覆0 X3 \2 g; ]0 i% K9 [4 y
+ l# q; x" q: }% e! S ?
1.目前接觸的是Legacy BIOS(組合語言)3 E: [3 b/ u: L/ u- z' {/ S; T
* D7 `7 r0 T# X2.IA32的系統架構有在看,目前也在積極補強一些相關的spec知識,不過還是要有實際做過才有感覺,對我而言如果只是光看的話無法深刻的體會
- J& J- d' x. X* c. c0 O
" U J0 c: S' ?! I6 b5 p3.關於你說的設定方式,有的有碰過,像是PCI,ASL code,SMBUS/LPC, CPU Microcode更新,我會去補強你所提到而我沒碰到的部份
+ w" a: k+ c9 Q9 Q; p) K9 F8 {' ^5 a7 K" q9 k! `- b% X
4.進入這行的感想是對於一些硬體的知識比以前來的了解,辛苦的是要一直摸索找方向,雖然東西很多要K,問題就在於太多東西反而有時不知從何著手 @@!- I0 H7 \% R5 ?/ k$ @) g
: G( C& L6 G* x$ g2 z& G
5.再次感謝你所提供的意見
) H- L8 B# `, ]$ W* m6 {7 D7 Y. z十月 05, 2007 8:09 上午
6 B# K/ R5 Q& h. m3 f: c
) {# A$ \* G( @" Y5 hchiehlin@mail2000.com.tw 提到... ) T3 B9 ^: X; u
PCI Register 是 cf8 cfc Index ,Data6 c4 e- M7 v( o3 Y( ?1 u! A) x" N
十月 25, 2007 11:17 上午 ; l. p1 W$ V R) ]3 h# l
! v+ b H4 x$ \9 k* r7 c W
PT 提到...
/ t/ ^ H6 s+ J8 F3 C( a* C關於SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)
# a9 v% a4 H- A# i9 [$ g2 xmov eax, 80002750h! {, C) F3 h) r( K
依照我的理解方式是" D8 Q7 @, O$ Z' S
10000000^00000000^00100^011^01010000
! s2 B' k3 l- }7 j6 U5 X所以應該是80002350h |
|