|
|
一旦正確的頻率供給給system後, BIOS便依據既定的POST table(類似行程表)來做事. 首先,與chipset最為相關的便是 [chipset config stage]. 意即,在此階段BIOS必須對 chipset registers填入正確的值,俾使其正常運作. 一般而言,要config下列的 devices:
9 K$ ?; Y0 q z- NB(還記得前面有提過北橋內部約可分 4 blocks; "有些" blocks 需要 在此 program...)6 U/ @2 u# l: {8 L3 u
- SB(即 PCI-ISA bridge)
2 n/ h3 \ r" i" ^- ACPI registers2 O, I- n5 ?$ E6 y: M& R
- USB registers
( Z2 d4 \. ^/ f& q |0 O. h- SATA registers+ P& n( d: f# V1 m( |
- PATA registers0 \1 d) ]- M) [. m! e# t
...7 r! M8 u4 n+ y( m. E- {
0 ~( Y9 f" O7 B7 [) t! ?* 在此所謂的 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之處 !!!
5 ?, c( v5 w" n* S9 M; b, @% L- }2 |$ {- _- \1 E6 v
* ACPI registers通常透過 IO 來存取
5 X/ @6 c% K& P" D+ F. rEx. // assume ACPI Base is 800h,要 access ACPI Reg55h
# e2 t* k! c/ _- s. nmov dx, 855h# _7 n" R( ^# a2 `/ p: k. I
in al, dx ; <- al = ACPI Reg55h's value
# W1 U R5 e U+ M- w+ \
j! t. e, D; p0 k1 J* M% b* 上述所列的 devices多為 PCI device,也都有唯一的PFA(PCI Function Address,即 bus#,device#,func#),也因此,只要對 device 下 PCI configuration read/write便可以 config device registers.* y0 S7 |: S. U0 c
4 s, u! ?4 v4 f
Ex. 假設: set SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)
) I- U |! |0 }7 e=> 簡單的 assembly can be:* m& ^/ i Y: K3 V+ Z% x
. [5 v( z4 {- D n4 a2 O6 G6 ]mov eax, 80002750h0 |( t5 v7 U, C$ F
mov dx, 0cf8h, T* l* r" ~( [7 N+ g: c+ o7 X
out dx, eax
) v0 H( J: T& q9 J; [- w& w$ H$ x! G' {# Y( y% Q
mov dx, 0cfeh8 Q* A5 ^$ `' [9 i/ R
in al, dx
+ x( N, }5 y% v( E3 lor al, 00001000b
/ Q& I- U" N$ ?6 Z0 Qout dx, al 3 ]# \3 s. g0 G) N; G9 `- K
; ^! D! ^: g2 S. c+ `6 q3 N
事實上每家BIOS都 maintain many "tables" 來說明: 哪一個 device 中的哪些 registers要填?值.相關的 access routine都已經寫好. Programmer只需更改表裡面的值即可 ^_^3 |* ^0 N P' p; k
' F, U& q( a! Z8 V3 B5 M5 ]
*當有人要求改 register setting時,我們必須知道三件事:3 L$ d* u: _6 [- y
1. why (為什麼要改?)
' @' f: }( y& T2. what(改成何值?)
H) f5 O8 D* X7 b3. when(什麼點改?)1 [6 ]' T, `4 b: I5 A6 N6 O
7 g4 [. T) O& k" G9 s( o4 l
*對於 BIOS kernel與 OEM coding的人言,這部分會是較少碰觸的,因為,這些code會由 chipset porting的人負責撰寫及維護.
; k, F {) v+ h$ U3 ?9 z8 E張貼者: HARRISON HSIEH 位於 8:41 下午 ) e& Q& O1 X1 |$ }$ p
標籤: BIOS相關
6 @! e" A* p% z* n* r6 意見: ' k# P) }/ g9 O6 |3 F% M. N
, U) V- x, p) K, [. Ltonyya 提到...
) Y6 l l7 z% E) g6 t) r* }6 _無意間發現你的部落格1 K4 x. t( ~1 ~& \
8 i1 n0 [7 A* Y0 {1 _/ M$ N; e
很多文章都覺得受益良多
' Z& Q$ j& Q( k( h* W+ I8 r, C+ S0 y2 ~ I! F1 \) t& j
我也剛接觸這門領域不久) i8 ?% \" C1 z9 b5 _
! a1 \5 R# s8 R7 c9 q& l% q
很多東西都似懂非懂9 b( f( b) r3 W4 J/ Z! a
# l8 Q% o0 R, {1 [不知對於一個新人而言2 ?9 E1 |+ e$ q* Q( E5 e
( o0 j% [4 q: p有沒有什麼好的訓練方式
. G i3 V# F1 Z& u; _# C z
, }: i& [4 z, u6 H可以及早進入狀況
9 K- k; F% |: ] P. i n十月 03, 2007 5:53 上午
( Z# ?; E9 U9 J# H, I; V0 f 0 j' v1 m4 F6 L
Harrison 提到...
5 K* s6 Y3 z3 n4 B: w現在的BIOS有分成Legacy BIOS(組合語言)與UEFI BIOS(C語言),但是這兩種BIOS對於一個剛接觸的新手來說就只是Win98跟WinXp使用方式的差別而已,介面不同,但是要做的事情幾乎一樣。/ o# ~" G, i3 @; L! h
. i m1 T- Z3 x! P1 ^
所以我的建議是多去了解這些工具的用法(組合語言指令/C語言用法)還有多看看Intel IA32 Architecture guide vol1~3(目前最新版是IA64),因為了解系統架構才是最基本的。' t7 g- p: O9 o; Q9 f
p* q, a, g6 d% v; }+ T如果要快速上手的話,你就先必須知道"設定方式",例如: 如何填CMOS/PCI Register(CF8/CF9),還有如何調整PIRQ/GPIO/ASL Code...等,如何透過SMbus/LPC存取? 何謂KBC/EC? 又要如何把OpROM 載入到記憶體,然後把控制權交給OpROM,執行後又把控制權還給BIOS/CPU Microcode如何更新?...etc. 這些都是基本OEM BIOS會做的事情,至於BIOS核心就必須很了解IA32架構你才有辦法去做。
2 \+ l3 k7 d, _# T8 o& |; r% R十月 04, 2007 5:39 下午
/ A5 H2 s% P% [ 7 d+ p0 h! g) C! h" A
tonyya 提到... 0 b/ H& L7 g$ P% N
首先感謝你的回覆
9 \ F3 ] n+ P# i0 e9 o" c V7 _ ^+ g
1.目前接觸的是Legacy BIOS(組合語言)& g" i, Q0 R) L" R# ]4 D
8 k# `" R! [% V$ e5 o# I* w: B
2.IA32的系統架構有在看,目前也在積極補強一些相關的spec知識,不過還是要有實際做過才有感覺,對我而言如果只是光看的話無法深刻的體會
6 S% ^* a4 y# Z
' J! ~$ Q) T& r) P$ y3.關於你說的設定方式,有的有碰過,像是PCI,ASL code,SMBUS/LPC, CPU Microcode更新,我會去補強你所提到而我沒碰到的部份, P6 q- z9 N* F
- I$ S8 V6 z: t$ J5 p7 Y4.進入這行的感想是對於一些硬體的知識比以前來的了解,辛苦的是要一直摸索找方向,雖然東西很多要K,問題就在於太多東西反而有時不知從何著手 @@!
% X9 F/ t4 W6 `% n
8 A! {3 {* C7 r# J4 l) B5.再次感謝你所提供的意見
9 g6 q9 }: ^8 u. `# B+ u8 w8 m2 f十月 05, 2007 8:09 上午
5 {) G7 J0 U% d' y2 O 6 w: [( Q5 t# S; i3 L2 l
chiehlin@mail2000.com.tw 提到...
, v; p: m$ p ]0 h' oPCI Register 是 cf8 cfc Index ,Data
& s% w3 Y0 q. g S: f! @十月 25, 2007 11:17 上午
+ }+ Z+ X m" `
- G6 F B7 X5 ]; D1 LPT 提到... ' ]1 O8 J+ H) G0 y+ L, j. t
關於SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)/ \# ^' p3 N4 p9 W1 t' \- [+ D
mov eax, 80002750h
6 V0 |, I1 J) o' X: J依照我的理解方式是
( x8 T* `8 n7 ?10000000^00000000^00100^011^01010000/ c; C& R& j& D5 Z# @9 p
所以應該是80002350h |
|