|
|
一旦正確的頻率供給給system後, BIOS便依據既定的POST table(類似行程表)來做事. 首先,與chipset最為相關的便是 [chipset config stage]. 意即,在此階段BIOS必須對 chipset registers填入正確的值,俾使其正常運作. 一般而言,要config下列的 devices:& Q) s( m. v- }4 m; E' _: n
- NB(還記得前面有提過北橋內部約可分 4 blocks; "有些" blocks 需要 在此 program...)+ b+ x1 g+ f+ P+ b8 M
- SB(即 PCI-ISA bridge)4 a) H7 m. l2 H" J1 j& q+ i4 I
- ACPI registers2 _* m& ]# o& t7 f
- USB registers
; C# H- p" F9 I8 Y( f1 k- SATA registers: p' U }/ G& F- Y) `! e5 L, |
- PATA registers8 B: y6 q8 U! M) k6 d1 q u
...& a* ]4 M" n; ?0 G/ v
T$ y* @3 D. }- L- f+ K* 在此所謂的 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之處 !!!
q) V7 P! n% A% v) ?$ R% G7 O- R0 N8 J. n7 z
* ACPI registers通常透過 IO 來存取( g+ m' h7 t, a. s
Ex. // assume ACPI Base is 800h,要 access ACPI Reg55h
. y: }2 K& A: q Nmov dx, 855h
- B8 \ u2 q% N, j4 S6 ^ Win al, dx ; <- al = ACPI Reg55h's value% }1 f: x' N" j3 x
# A) R* m2 B w1 `0 w
* 上述所列的 devices多為 PCI device,也都有唯一的PFA(PCI Function Address,即 bus#,device#,func#),也因此,只要對 device 下 PCI configuration read/write便可以 config device registers.! A+ ]5 X! B; y
4 w; N1 O, U6 A. e
Ex. 假設: set SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)
! C' l" ^ d7 Y! N4 G=> 簡單的 assembly can be:2 R e" a( T- I8 Q
9 T/ B7 h8 {; l& k5 q7 I4 k
mov eax, 80002750h- o+ G4 y* c* w$ b8 B* V* G
mov dx, 0cf8h2 M" U w& f4 \
out dx, eax
* ` u3 n5 `, W5 x# z8 F2 U9 f/ m4 m* ^! x+ i6 ~) q7 y" N" j
mov dx, 0cfeh/ Y8 l1 B9 b0 P F! a, c
in al, dx/ z9 _7 {* U1 u4 B; r' x
or al, 00001000b
% Y+ s* d! H( Y* g# dout dx, al
+ u& c( I7 I0 P5 C& u$ i; Y! a' Z1 ?
事實上每家BIOS都 maintain many "tables" 來說明: 哪一個 device 中的哪些 registers要填?值.相關的 access routine都已經寫好. Programmer只需更改表裡面的值即可 ^_^; `; z) f m. x+ C9 @
6 Z8 I' q8 R# w' X0 L2 y
*當有人要求改 register setting時,我們必須知道三件事:! Y; a. Y* L2 H4 t( o
1. why (為什麼要改?)4 }4 O: ]9 S1 s# }* y0 ^2 S' @
2. what(改成何值?)
9 E5 z% A# z3 l. L3. when(什麼點改?)
1 E) C. R; c" h9 n9 t4 j1 ]
7 _( w6 q. @7 b, _0 D2 [: G*對於 BIOS kernel與 OEM coding的人言,這部分會是較少碰觸的,因為,這些code會由 chipset porting的人負責撰寫及維護. 6 M' T) S. C" i# T8 R% ^) X: G
張貼者: HARRISON HSIEH 位於 8:41 下午
H& r; }0 B) [% K; u4 i P" K標籤: BIOS相關
: e- t3 b& k! W+ D3 N2 p6 意見: 3 T7 ?& C" X( z S0 F7 d
) y/ ~* C8 O# h, N* T
tonyya 提到...
' v2 m7 ]; K% s. _無意間發現你的部落格; d! `& X$ T7 c
+ J0 n% Q4 F! [0 V很多文章都覺得受益良多
0 t4 O$ v2 ~& e$ v6 i6 t2 E% U0 O8 s( u* B9 v
我也剛接觸這門領域不久) [# u0 r$ I4 m e/ Y& [3 j2 f$ J
u, |: f/ P; F: g很多東西都似懂非懂. T+ ~+ e6 U. H& u5 e2 i. e0 D4 {( S
5 t+ P/ q% ~5 n8 i1 G2 c/ O' _
不知對於一個新人而言" _8 a4 p1 {+ b8 v, d% L
7 ]& b3 q: `+ B
有沒有什麼好的訓練方式
4 q4 X2 y$ a0 `6 P- |' G/ X W _# O
可以及早進入狀況
4 K! H* G1 C1 N% d' x; S十月 03, 2007 5:53 上午
( h; R) F9 }( S! S6 X! e
' R' l5 z7 U4 m* GHarrison 提到... - \1 r2 K; `, \* N
現在的BIOS有分成Legacy BIOS(組合語言)與UEFI BIOS(C語言),但是這兩種BIOS對於一個剛接觸的新手來說就只是Win98跟WinXp使用方式的差別而已,介面不同,但是要做的事情幾乎一樣。
' a" {6 [# S% t2 [6 T$ n& O2 h8 s
所以我的建議是多去了解這些工具的用法(組合語言指令/C語言用法)還有多看看Intel IA32 Architecture guide vol1~3(目前最新版是IA64),因為了解系統架構才是最基本的。
# t1 L2 i3 F: W% F! v" i% }% |! b9 b* G' c
如果要快速上手的話,你就先必須知道"設定方式",例如: 如何填CMOS/PCI Register(CF8/CF9),還有如何調整PIRQ/GPIO/ASL Code...等,如何透過SMbus/LPC存取? 何謂KBC/EC? 又要如何把OpROM 載入到記憶體,然後把控制權交給OpROM,執行後又把控制權還給BIOS/CPU Microcode如何更新?...etc. 這些都是基本OEM BIOS會做的事情,至於BIOS核心就必須很了解IA32架構你才有辦法去做。
2 N1 a. B7 _2 M' g十月 04, 2007 5:39 下午
1 v% V) K( k* N/ m1 N+ `& t; g+ M
. `5 g$ N* `( d- c" g: Ntonyya 提到...
V$ Y2 |1 W1 _首先感謝你的回覆! D% q( w; c/ ~3 i* R
) N1 b) c0 b1 d; R" {2 @. P+ I
1.目前接觸的是Legacy BIOS(組合語言)1 @6 W9 B6 P. ^' K T) i
& b8 I$ v& W" O1 u) l, ?5 ^& `' n
2.IA32的系統架構有在看,目前也在積極補強一些相關的spec知識,不過還是要有實際做過才有感覺,對我而言如果只是光看的話無法深刻的體會# P1 E, X+ z+ p% b8 k H
2 @6 f; t2 e D! U6 k3.關於你說的設定方式,有的有碰過,像是PCI,ASL code,SMBUS/LPC, CPU Microcode更新,我會去補強你所提到而我沒碰到的部份# z, m! L3 M* u: A/ P |
: r) R- E. y5 [3 s0 o
4.進入這行的感想是對於一些硬體的知識比以前來的了解,辛苦的是要一直摸索找方向,雖然東西很多要K,問題就在於太多東西反而有時不知從何著手 @@!
$ j1 y' w; Y; ]2 k, q
( u5 i7 d- g# E) @# s5.再次感謝你所提供的意見8 m- r1 E" f. o- W' q$ l
十月 05, 2007 8:09 上午 % ~$ X7 A. S0 v( A" p- X/ c5 i
1 L5 y0 M8 Z4 X! `
chiehlin@mail2000.com.tw 提到...
' ? u: t- D/ KPCI Register 是 cf8 cfc Index ,Data7 x2 L" W5 e7 L, f7 q" U8 X, }
十月 25, 2007 11:17 上午
* r+ F) h/ Z! g2 A8 f0 }2 Q
' I- \0 }4 Q- y0 F* f; j M6 tPT 提到... 1 y* m7 B& l; Y. Z
關於SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)1 w1 c8 s0 m. ~! N
mov eax, 80002750h7 k9 \7 [9 N* D! I+ M
依照我的理解方式是/ l$ `% T+ x# j
10000000^00000000^00100^011^01010000; O6 F* L$ f& ^6 y
所以應該是80002350h |
|