|
|
一旦正確的頻率供給給system後, BIOS便依據既定的POST table(類似行程表)來做事. 首先,與chipset最為相關的便是 [chipset config stage]. 意即,在此階段BIOS必須對 chipset registers填入正確的值,俾使其正常運作. 一般而言,要config下列的 devices:
( V5 _8 n9 Q1 k- NB(還記得前面有提過北橋內部約可分 4 blocks; "有些" blocks 需要 在此 program...)
, f) L: p# i' S: ?$ c; r. B, J, o. i/ Z( M- SB(即 PCI-ISA bridge)8 m. I5 n% u- }0 H: y0 {- k% ^- }# M
- ACPI registers% U! B; T2 k; ~" R- `
- USB registers X) `/ Y( _7 Q; d V
- SATA registers
7 c% F h0 B8 w1 Z4 s/ W2 t- PATA registers
2 S* N2 b2 t; ~4 |9 L...
7 _4 v- t& a& @! `. l! o, o+ l c* u, s+ M B- l y
* 在此所謂的 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之處 !!!
" G, t( `0 z1 _9 M( P6 B- F' N8 A' \( G2 X) J9 {
* ACPI registers通常透過 IO 來存取7 ^+ A6 ^3 p4 n5 n, ~
Ex. // assume ACPI Base is 800h,要 access ACPI Reg55h: e" E7 `9 A. S* M
mov dx, 855h
8 _% S8 h: b! a K0 {. q# Uin al, dx ; <- al = ACPI Reg55h's value$ W4 D, W/ b M% |: F* S
7 E; K, U4 i2 K+ d+ ]: f U- G* 上述所列的 devices多為 PCI device,也都有唯一的PFA(PCI Function Address,即 bus#,device#,func#),也因此,只要對 device 下 PCI configuration read/write便可以 config device registers.
% |' i* \" |( v, C8 A |
3 k* }+ p# F0 i1 Z$ b3 xEx. 假設: set SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)
s- T' n* a& u! O+ s. u. q& u- n=> 簡單的 assembly can be:3 X( p$ i8 z- q' a1 L/ B
0 v! N6 Y! L: P, d
mov eax, 80002750h
* v, j/ J! E5 s4 m& \$ C- l, `mov dx, 0cf8h
- |* J" h; A: d7 bout dx, eax
0 h9 \: ~/ w, R9 m8 S
- D$ U+ C' w* [/ S: j- xmov dx, 0cfeh6 d/ X* G; d& Y% _ @6 R
in al, dx+ T2 f( y: N8 j
or al, 00001000b
6 Q; x/ B- w; S4 uout dx, al
0 D4 t. l" L3 w) @/ ?
8 C" B3 {. A6 D; B# [事實上每家BIOS都 maintain many "tables" 來說明: 哪一個 device 中的哪些 registers要填?值.相關的 access routine都已經寫好. Programmer只需更改表裡面的值即可 ^_^( y) D, b3 X) X. s
3 D- l2 }6 D( g% q
*當有人要求改 register setting時,我們必須知道三件事:
* V+ h( M) k7 C# r# k1 _1. why (為什麼要改?)) _/ U5 c6 e6 Z) X% D4 W
2. what(改成何值?)
( [; E- ^6 ]. a2 t E3. when(什麼點改?)
1 O# V7 s1 }3 U- v& w: U
/ R: ~5 a) y( d; T*對於 BIOS kernel與 OEM coding的人言,這部分會是較少碰觸的,因為,這些code會由 chipset porting的人負責撰寫及維護. . l- s/ A }/ v7 w
張貼者: HARRISON HSIEH 位於 8:41 下午 . ] R. }7 U- `" m* U! I+ ^4 Y* Y
標籤: BIOS相關 W J. a J/ [! C0 D* |5 a
6 意見: ' j7 D( F4 o! ?0 O1 Q$ B8 C
4 Q! R8 c0 v7 y- b- @2 o: M+ W) P5 O
tonyya 提到... , R1 ]) R0 {! R, C: @4 i
無意間發現你的部落格- ?1 M% f) a5 F
4 t! }9 U: ~' j
很多文章都覺得受益良多1 Q# I0 Z2 {, o7 Q. V0 m7 t
/ k! _$ g& u3 R
我也剛接觸這門領域不久' _4 t. G, F) R @
/ x4 G6 x- U8 m很多東西都似懂非懂
4 l) z7 n6 e# Q4 J# U/ X0 i2 C- k3 ^
不知對於一個新人而言9 r8 Q$ G/ }! b; `# y
4 ~4 P: R* H' x1 Y, g
有沒有什麼好的訓練方式" z" k% \$ p9 P* x
5 f; j$ o3 Z) E9 T6 ~可以及早進入狀況
: \' a ]% Y0 N4 K9 _. D十月 03, 2007 5:53 上午
* Z( u$ s; k- A4 b, O , l7 k8 H* U5 T- e+ g
Harrison 提到... ( U4 e, y) B6 h3 F" @9 r3 y0 M
現在的BIOS有分成Legacy BIOS(組合語言)與UEFI BIOS(C語言),但是這兩種BIOS對於一個剛接觸的新手來說就只是Win98跟WinXp使用方式的差別而已,介面不同,但是要做的事情幾乎一樣。0 l1 R. _" K/ C" S% j6 R# R5 H( \
1 V+ y- o2 D! W) u G所以我的建議是多去了解這些工具的用法(組合語言指令/C語言用法)還有多看看Intel IA32 Architecture guide vol1~3(目前最新版是IA64),因為了解系統架構才是最基本的。: g, g0 o% |! e9 b+ w
& Y5 b5 o) ~3 z; }6 l# ]. T0 ~如果要快速上手的話,你就先必須知道"設定方式",例如: 如何填CMOS/PCI Register(CF8/CF9),還有如何調整PIRQ/GPIO/ASL Code...等,如何透過SMbus/LPC存取? 何謂KBC/EC? 又要如何把OpROM 載入到記憶體,然後把控制權交給OpROM,執行後又把控制權還給BIOS/CPU Microcode如何更新?...etc. 這些都是基本OEM BIOS會做的事情,至於BIOS核心就必須很了解IA32架構你才有辦法去做。
8 c. b" G4 I# @: P) o8 H! _十月 04, 2007 5:39 下午 5 D% f8 J# ~' D
9 ^' i/ A0 B* F B4 E" I: X+ Y* J
tonyya 提到...
/ |/ I2 d+ L8 z9 o2 U首先感謝你的回覆
/ W7 c: ?2 A/ @5 a
2 |0 U4 F( I) x; S+ D$ b1.目前接觸的是Legacy BIOS(組合語言)+ P1 B$ t( v- D1 g9 e
$ N& Y) _; g* I# `. e
2.IA32的系統架構有在看,目前也在積極補強一些相關的spec知識,不過還是要有實際做過才有感覺,對我而言如果只是光看的話無法深刻的體會
* z: a1 e# I5 u" p8 R/ k% n" _
1 R9 `$ e# l `) H$ [ x3.關於你說的設定方式,有的有碰過,像是PCI,ASL code,SMBUS/LPC, CPU Microcode更新,我會去補強你所提到而我沒碰到的部份( f/ M& s+ u3 U. W+ C$ g0 y: G
. {2 ?7 S3 k4 C+ \! n5 K5 F! }4 X
4.進入這行的感想是對於一些硬體的知識比以前來的了解,辛苦的是要一直摸索找方向,雖然東西很多要K,問題就在於太多東西反而有時不知從何著手 @@!) v8 b6 M) a+ i' I/ ]0 k k8 J
* C w* D& |) h1 W, Z2 G1 R
5.再次感謝你所提供的意見4 `4 d3 K/ S; \+ g g
十月 05, 2007 8:09 上午
0 M! B0 F2 W) A& ?
' G) N: y. H* H" m1 S! echiehlin@mail2000.com.tw 提到... / t5 @" V# {! [; s# [4 d! X
PCI Register 是 cf8 cfc Index ,Data& |+ @- G9 s1 @' J+ N6 u- g* e2 D
十月 25, 2007 11:17 上午 ! {1 G& X1 W. o, K
9 j4 X1 L, v! F* u% o2 \' CPT 提到... ( n; w" G \. t3 z! g0 j' g3 U
關於SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)+ J) ]) W* C# d+ J* C+ C8 }
mov eax, 80002750h
0 X# T5 M i$ i0 Y依照我的理解方式是
, i0 x+ A+ x6 j+ s4 b# B: O V3 E2 D10000000^00000000^00100^011^010100007 S5 z! C. W! c. ^( {- O; L
所以應該是80002350h |
|