|
|
一旦正確的頻率供給給system後, BIOS便依據既定的POST table(類似行程表)來做事. 首先,與chipset最為相關的便是 [chipset config stage]. 意即,在此階段BIOS必須對 chipset registers填入正確的值,俾使其正常運作. 一般而言,要config下列的 devices:
; R, \0 P* E% b r& m+ \& h0 }$ y- NB(還記得前面有提過北橋內部約可分 4 blocks; "有些" blocks 需要 在此 program...)
' _7 U& |3 y* x9 `2 S- SB(即 PCI-ISA bridge)/ {+ j# U* L+ ^* u1 O: ^
- ACPI registers
0 I! g9 J6 N1 g; a- USB registers, \1 G$ L+ ?+ N
- SATA registers4 G$ L1 X7 N8 T
- PATA registers. b2 u' J3 N7 X: q$ {: |9 Z
...' y$ f, n6 a7 @: A8 `) V! H3 r
* I0 ~) m& W+ i
* 在此所謂的 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之處 !!!
- _: e a4 |3 {1 @% _0 E4 P7 R1 b- _
* ACPI registers通常透過 IO 來存取5 D0 @4 }; u9 G- }* R! w
Ex. // assume ACPI Base is 800h,要 access ACPI Reg55h
3 M, V% f( l) N/ P! a, D% |+ \mov dx, 855h
1 i- k# y) J0 t0 f1 }# Iin al, dx ; <- al = ACPI Reg55h's value9 k' I% m9 Z# ?8 ?$ g. W
5 o. o/ k8 z I- l
* 上述所列的 devices多為 PCI device,也都有唯一的PFA(PCI Function Address,即 bus#,device#,func#),也因此,只要對 device 下 PCI configuration read/write便可以 config device registers.
6 e5 Q. @3 S2 d' h+ i$ W
- M A: [' v4 f0 `* PEx. 假設: set SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)
# _# d. N: i0 o6 H4 d( u=> 簡單的 assembly can be:, J. g0 y" D! p! _7 A" ]8 j
; E; L @9 ]" mmov eax, 80002750h# a/ Z; @& b5 v7 ~
mov dx, 0cf8h( o: D# c( g: v J2 w
out dx, eax# k' k$ U/ z: L
/ [# l) ], y4 O" ]
mov dx, 0cfeh5 q* F& @ x$ ~6 j! ]% X& `- ?
in al, dx# ?4 t9 x7 l, R
or al, 00001000b
, E) y- m' Y& k$ N( kout dx, al ' V. N# g9 C. R# i
/ |! \' W5 C0 t
事實上每家BIOS都 maintain many "tables" 來說明: 哪一個 device 中的哪些 registers要填?值.相關的 access routine都已經寫好. Programmer只需更改表裡面的值即可 ^_^4 o0 ]) \9 x& N/ z
' q7 {9 J6 K' y& H" V9 r
*當有人要求改 register setting時,我們必須知道三件事:
2 {( m4 @; K* V1 g3 I1. why (為什麼要改?)6 X$ E/ g7 g( `( O! u6 j
2. what(改成何值?)
: g5 {1 q( u5 e# d5 [- g6 c s+ \3. when(什麼點改?) N0 l4 |+ V) Y1 Y/ F
( p: E8 ?& q6 z+ a
*對於 BIOS kernel與 OEM coding的人言,這部分會是較少碰觸的,因為,這些code會由 chipset porting的人負責撰寫及維護. 4 V' S, t6 j. ] d
張貼者: HARRISON HSIEH 位於 8:41 下午 4 j- z: s$ c4 m/ f% A
標籤: BIOS相關 + ?7 p1 F$ D# J' A1 B
6 意見:
: Q4 i) ?! N1 _4 C' {) w- Y( }
" }* {* Q% Y9 k) \, r" U' Z6 Vtonyya 提到... 0 F1 c; u a [2 ~& K: ~, j
無意間發現你的部落格
3 W0 t% w4 B8 L" l# y8 C2 b/ p# d/ o3 a3 K6 Y5 w/ L# ?
很多文章都覺得受益良多! A" `; z' U' a
8 ^! J4 t- F% M/ E我也剛接觸這門領域不久
5 F8 m Z/ O5 [7 _: k8 q8 w- V5 d; U9 B0 ~
很多東西都似懂非懂
$ y. G: Y1 t4 l$ j& B# f
; L$ M8 D) x6 Y% d; Z不知對於一個新人而言
' X4 t1 X) P3 H; l' y% n a, u! _' ^7 D( t
有沒有什麼好的訓練方式% `; G. a0 B, j1 B
7 V' D2 k6 ^ ^
可以及早進入狀況
% C0 Z* g; |& j# S. X- ]十月 03, 2007 5:53 上午 7 ^3 `( g/ S% q
) }) J* I- z" A; R
Harrison 提到... 8 I! w. x$ ]- x& C* z& z
現在的BIOS有分成Legacy BIOS(組合語言)與UEFI BIOS(C語言),但是這兩種BIOS對於一個剛接觸的新手來說就只是Win98跟WinXp使用方式的差別而已,介面不同,但是要做的事情幾乎一樣。
% r0 }& A5 B6 P7 e. _8 o% g- {' }& ~
所以我的建議是多去了解這些工具的用法(組合語言指令/C語言用法)還有多看看Intel IA32 Architecture guide vol1~3(目前最新版是IA64),因為了解系統架構才是最基本的。+ w$ h, r5 K( P# ~$ q7 A
/ t) p$ ]3 R: f3 |4 d4 P( o1 X如果要快速上手的話,你就先必須知道"設定方式",例如: 如何填CMOS/PCI Register(CF8/CF9),還有如何調整PIRQ/GPIO/ASL Code...等,如何透過SMbus/LPC存取? 何謂KBC/EC? 又要如何把OpROM 載入到記憶體,然後把控制權交給OpROM,執行後又把控制權還給BIOS/CPU Microcode如何更新?...etc. 這些都是基本OEM BIOS會做的事情,至於BIOS核心就必須很了解IA32架構你才有辦法去做。* T7 W2 v; k& P
十月 04, 2007 5:39 下午
7 v: O' Y* q) [9 b 9 N, \. B) ?' X4 X" Q
tonyya 提到...
/ ?" @5 ~9 o- d! u# m首先感謝你的回覆1 G+ n# D! P" y9 A, ]8 c( Y h. }
. w6 y. f7 ? K( L* F
1.目前接觸的是Legacy BIOS(組合語言)
+ B5 _8 I% |' G4 b: u% w/ g; `1 u/ ]4 P+ V( x) J2 G- S0 l! Z( N# a
2.IA32的系統架構有在看,目前也在積極補強一些相關的spec知識,不過還是要有實際做過才有感覺,對我而言如果只是光看的話無法深刻的體會6 N7 P, s0 H/ m. U$ b ~
. \( T0 q$ h# v* Q! d3.關於你說的設定方式,有的有碰過,像是PCI,ASL code,SMBUS/LPC, CPU Microcode更新,我會去補強你所提到而我沒碰到的部份/ k3 N, u. d* N- B d
. u. B' I. J+ ?3 ?0 W M4.進入這行的感想是對於一些硬體的知識比以前來的了解,辛苦的是要一直摸索找方向,雖然東西很多要K,問題就在於太多東西反而有時不知從何著手 @@!
6 Y: @' y/ K2 A6 q3 P* o
* x" w: B" D, |5.再次感謝你所提供的意見9 d9 j# U C) q" u9 H3 X4 i
十月 05, 2007 8:09 上午 / B0 \6 {' T. S5 a3 ]9 Q
# d. t, c9 S( q) achiehlin@mail2000.com.tw 提到... 4 H. C3 L; j \5 Y/ Z
PCI Register 是 cf8 cfc Index ,Data
: D! _' g% }6 b L$ f% j6 E十月 25, 2007 11:17 上午 2 D$ w8 I7 e( C2 w! I( f9 G/ Y% ^8 O
5 @3 e% T& [" C i" M
PT 提到...
* p6 p& m) ?. Z( l4 m4 S/ r關於SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)' P* H# ^7 U# B2 s1 K+ x% I) r
mov eax, 80002750h
; V( n- m) f+ l3 _7 l' T. D' i4 ^依照我的理解方式是
) `8 N$ _7 g) T10000000^00000000^00100^011^01010000
' p. Z* L. _+ H3 U所以應該是80002350h |
|