|
|
一旦正確的頻率供給給system後, BIOS便依據既定的POST table(類似行程表)來做事. 首先,與chipset最為相關的便是 [chipset config stage]. 意即,在此階段BIOS必須對 chipset registers填入正確的值,俾使其正常運作. 一般而言,要config下列的 devices:
# s# s, ]- d: N, \- NB(還記得前面有提過北橋內部約可分 4 blocks; "有些" blocks 需要 在此 program...)
! P7 @! J3 _( F- SB(即 PCI-ISA bridge)7 b1 j3 t- @! _' |$ C2 e9 x ~
- ACPI registers
4 I2 m* V% d- p3 d+ \! T5 B- USB registers# u+ M, X( ~6 d2 X+ [3 [
- SATA registers1 l. J0 V& e) v2 I7 w& M7 n4 R
- PATA registers
( D# i$ o# s& v...4 a2 p7 O @- i- |
" d( p( x( m1 z( C- c# @( n* 在此所謂的 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之處 !!!
! b6 J- T4 v R A$ O5 p
% p" y1 Q% R+ D/ i/ Z, U) o) o( I* ACPI registers通常透過 IO 來存取* ^% o( i' I8 z5 l8 I7 N9 k
Ex. // assume ACPI Base is 800h,要 access ACPI Reg55h
5 S! O( W+ g V* G7 |mov dx, 855h
- \+ A. j ^3 g" T- j, win al, dx ; <- al = ACPI Reg55h's value; r; W: o: V# j( {: U
) L8 v. U2 E/ Z9 l* 上述所列的 devices多為 PCI device,也都有唯一的PFA(PCI Function Address,即 bus#,device#,func#),也因此,只要對 device 下 PCI configuration read/write便可以 config device registers.
4 N! O0 C5 B9 K# F; i& b2 L9 d+ ^7 `3 J% h' r
Ex. 假設: set SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)
* T! A7 _# b% s0 P) E=> 簡單的 assembly can be:
3 C6 N0 K9 O6 y# K( s! E, W& u
3 P _% j8 b8 F: u- Umov eax, 80002750h
$ t0 k& |$ f4 O4 `mov dx, 0cf8h! f5 u* K1 b2 g) Y
out dx, eax' c9 G! I6 O! }0 q
7 n% ]& d( l) \$ \( x7 v0 w; d$ C4 c9 a
mov dx, 0cfeh4 o+ w2 g4 R& t W2 ^$ Y
in al, dx
; I/ X- W# P3 s0 r& _& s2 W4 Qor al, 00001000b
! y. D5 p% g7 X' L0 a# `: v! m$ uout dx, al
. p6 q4 z( g+ I: n+ N+ J5 W/ ^" }( g5 D# }& ?
事實上每家BIOS都 maintain many "tables" 來說明: 哪一個 device 中的哪些 registers要填?值.相關的 access routine都已經寫好. Programmer只需更改表裡面的值即可 ^_^
* w- F5 |9 [+ Y+ {5 f4 P
2 @% I" [; E) d! v4 z1 ^*當有人要求改 register setting時,我們必須知道三件事:
' f' L; g# Y( R1. why (為什麼要改?)* w. h5 L, l3 u! g+ o9 v0 ?2 ]
2. what(改成何值?)# c- J, E9 Z. j
3. when(什麼點改?)% N+ O/ V) ^8 ~$ O
* @, j: n- W* [/ b6 B
*對於 BIOS kernel與 OEM coding的人言,這部分會是較少碰觸的,因為,這些code會由 chipset porting的人負責撰寫及維護. / I# k' J! i9 p) }/ H
張貼者: HARRISON HSIEH 位於 8:41 下午
3 T6 D# C' a! g# t3 c標籤: BIOS相關
/ h3 s4 q2 E& X- m6 意見: 5 l- J" P' M! Z: s+ k0 }
* @6 C- {" W/ o) htonyya 提到...
9 W$ _" \; k3 O) a1 r0 z9 u1 u無意間發現你的部落格# R/ r) J3 H7 x, s- G; N: I
( b' O9 P0 g' I8 v
很多文章都覺得受益良多
( }- F8 P4 W, m" H4 L- A, v
5 p& R& o6 L9 h. T8 i- D ?# K5 e我也剛接觸這門領域不久
/ N0 h# x9 `# I) F( ~' e2 g, [9 n3 N/ t, d- E' V& _! {: a7 {
很多東西都似懂非懂
3 Y+ O2 S. I$ R0 @& {( Y' s+ o2 R/ U( ^# V
不知對於一個新人而言
3 R( U# i6 Q* ?, ~9 g" a
+ k; U7 D: W. f4 ?) U有沒有什麼好的訓練方式8 S# ]& I/ X- i# A0 {0 T) a6 M
: b6 S$ R! l8 P5 B1 e, \* S2 N4 P可以及早進入狀況- [9 C7 t& ^) R4 M6 ^) c
十月 03, 2007 5:53 上午
6 @. a9 ~) f9 p
3 h+ ?' a o3 J) U$ e- y) {* SHarrison 提到... 9 |. [. O7 i! T
現在的BIOS有分成Legacy BIOS(組合語言)與UEFI BIOS(C語言),但是這兩種BIOS對於一個剛接觸的新手來說就只是Win98跟WinXp使用方式的差別而已,介面不同,但是要做的事情幾乎一樣。
' f+ X8 X9 B) ~8 T8 Y8 A
/ m& e+ t9 s* k, b& ?所以我的建議是多去了解這些工具的用法(組合語言指令/C語言用法)還有多看看Intel IA32 Architecture guide vol1~3(目前最新版是IA64),因為了解系統架構才是最基本的。3 L E9 H: W) ^3 G. H0 |5 p- ~2 j5 W
. v: k+ m) }* s& B* F6 e如果要快速上手的話,你就先必須知道"設定方式",例如: 如何填CMOS/PCI Register(CF8/CF9),還有如何調整PIRQ/GPIO/ASL Code...等,如何透過SMbus/LPC存取? 何謂KBC/EC? 又要如何把OpROM 載入到記憶體,然後把控制權交給OpROM,執行後又把控制權還給BIOS/CPU Microcode如何更新?...etc. 這些都是基本OEM BIOS會做的事情,至於BIOS核心就必須很了解IA32架構你才有辦法去做。, M: d* h- `& l) [
十月 04, 2007 5:39 下午
0 T' z+ q. w/ m6 V( a2 B s & N! T5 L& K" Q' r7 T0 [
tonyya 提到... " l9 D9 Q$ @$ o/ M5 v7 l6 N& f
首先感謝你的回覆5 ~& D4 k( `+ q
, K5 S/ T+ N8 v9 A, Q1.目前接觸的是Legacy BIOS(組合語言)
9 V3 y. p" ]/ ~! v+ E# b& Z6 i
0 D& I5 p! ]+ Y, l3 J% c3 x) `2.IA32的系統架構有在看,目前也在積極補強一些相關的spec知識,不過還是要有實際做過才有感覺,對我而言如果只是光看的話無法深刻的體會
! b4 Z* ^9 G$ w0 ^! S
# Z/ }. P6 x9 J7 U- J7 ^3.關於你說的設定方式,有的有碰過,像是PCI,ASL code,SMBUS/LPC, CPU Microcode更新,我會去補強你所提到而我沒碰到的部份
8 n1 j* E" X9 ?
, j* d. k( @) e) h% j7 n4.進入這行的感想是對於一些硬體的知識比以前來的了解,辛苦的是要一直摸索找方向,雖然東西很多要K,問題就在於太多東西反而有時不知從何著手 @@!( R$ d, ^+ w" p( v
0 E1 _, F" h+ \. ]( y
5.再次感謝你所提供的意見% a3 z) j( e& ]
十月 05, 2007 8:09 上午 / v+ t' P- L4 O' ]/ D! f
1 }( @8 V/ x0 ~4 J0 m$ U) f! @1 x
chiehlin@mail2000.com.tw 提到...
' ]" j6 i! C. b |- l0 u2 l- kPCI Register 是 cf8 cfc Index ,Data" N7 P4 w0 M, n. r4 M; A
十月 25, 2007 11:17 上午 ) c4 k/ Z8 o' z% Z- e ?% l
# ^2 i8 f1 e+ t: u2 Y0 \PT 提到...
7 I* W- N7 K7 ^# J: w; l S關於SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)
9 ? A& s) D$ X; S/ }4 wmov eax, 80002750h, a( V; Z* x" u$ X
依照我的理解方式是4 l$ Z7 t8 [* m
10000000^00000000^00100^011^01010000
+ s0 e7 J$ Q# a1 V所以應該是80002350h |
|