|
|
一旦正確的頻率供給給system後, BIOS便依據既定的POST table(類似行程表)來做事. 首先,與chipset最為相關的便是 [chipset config stage]. 意即,在此階段BIOS必須對 chipset registers填入正確的值,俾使其正常運作. 一般而言,要config下列的 devices:7 Z1 P, D* I/ A- `. U/ U6 q
- NB(還記得前面有提過北橋內部約可分 4 blocks; "有些" blocks 需要 在此 program...)& l! K$ I4 A8 C* r4 m( |" a
- SB(即 PCI-ISA bridge)1 w R. q3 g+ U& ~4 P$ I
- ACPI registers
4 E' U+ q5 ]% s2 D- USB registers
: I& i5 `% t8 w" f& m- SATA registers
4 s) A# u' T Z9 ~4 L, e- PATA registers
4 k9 \+ ~* Q$ H2 r2 I...# n$ f$ @. s- \, X! D& n
: W3 [" s7 S; Z
* 在此所謂的 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之處 !!!
" Z k% H) K) {6 R$ W$ ]6 f9 j" R7 A" |7 D+ w
* ACPI registers通常透過 IO 來存取8 F7 S* h5 K2 B" q* c! G4 g( [
Ex. // assume ACPI Base is 800h,要 access ACPI Reg55h
6 y; A! }: R( a& e# [. Gmov dx, 855h
4 F5 R* q. J* z8 t% S) Ain al, dx ; <- al = ACPI Reg55h's value
" h& Z2 F3 H; ^( k* o3 k6 G6 g
Y5 {, @) ]8 ^* 上述所列的 devices多為 PCI device,也都有唯一的PFA(PCI Function Address,即 bus#,device#,func#),也因此,只要對 device 下 PCI configuration read/write便可以 config device registers.
3 f* l7 O4 x( h0 v9 C4 ^
5 K( J! b9 c$ E1 p( U. ]Ex. 假設: set SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)) ?0 j( \/ }# C1 j
=> 簡單的 assembly can be: P/ E% M# Z( K2 L; |- U
# F! ?! V0 ?- }4 e9 j5 jmov eax, 80002750h
1 {0 [. g7 m0 Z) i8 vmov dx, 0cf8h! L. Z& a( d- _ o3 M
out dx, eax7 ?' Z7 R5 Y8 A- m4 s7 ^6 S3 n1 W
8 E2 K$ r' h9 ]9 b. C! ~- N& Umov dx, 0cfeh" M, m& x( u: K/ M$ {
in al, dx
' Q( ~( d1 {; J+ d: S4 cor al, 00001000b1 n' y7 o' }1 S4 ^
out dx, al $ @% U$ }" T8 ?/ B
, D( t) K6 Q0 v6 F; ] v事實上每家BIOS都 maintain many "tables" 來說明: 哪一個 device 中的哪些 registers要填?值.相關的 access routine都已經寫好. Programmer只需更改表裡面的值即可 ^_^
2 Q' ^) I- a0 k: x) H3 {9 T; i) `! g( i; i; Z7 x
*當有人要求改 register setting時,我們必須知道三件事:, B4 e1 W3 `6 X7 k* ]) c/ R3 i- w
1. why (為什麼要改?); X" T$ @5 |% V) o$ |+ c" m- [
2. what(改成何值?)
" o t1 \7 ?& m* a5 e+ x! w8 _6 ^3. when(什麼點改?)" {$ j8 G- w. I/ G$ d( h9 L6 [ G
2 @/ ~3 G2 j* O/ L6 z* ^! T' Q: K*對於 BIOS kernel與 OEM coding的人言,這部分會是較少碰觸的,因為,這些code會由 chipset porting的人負責撰寫及維護.
) T* O; ~ j* I2 b張貼者: HARRISON HSIEH 位於 8:41 下午 ! b/ o R' v H' ^8 m
標籤: BIOS相關 # [' t/ |: E3 @
6 意見:
, X8 W5 d( j7 k) i0 `. H- ?- `. l ) q/ q. T! r/ }& f/ s
tonyya 提到...
( t; O$ N/ _9 ^1 i無意間發現你的部落格& n" }1 q' U4 I1 O& l
' K+ m& ~* E! _6 a. o4 u很多文章都覺得受益良多
3 N/ |2 E( G c) S" S: \. h% {9 q7 K. Y
我也剛接觸這門領域不久
' [3 D- E- U1 L: Z) e" C, z/ ~* o4 ^- H9 f' l! w& L
很多東西都似懂非懂' A8 P& M, m8 I" [
4 S2 t# z: X& ]. M& N% w$ ~不知對於一個新人而言
( ^- }9 H5 E3 [% {. r; p* m7 `1 f5 F0 |0 ]7 J3 \/ S P0 B
有沒有什麼好的訓練方式
0 y3 ~1 B1 h/ X* o O9 n8 U9 a) T# S; t5 H1 W7 M, Q; N7 g
可以及早進入狀況
; Q& z6 K# O o8 o3 K十月 03, 2007 5:53 上午
+ J8 l- P' t9 o- x0 ]+ p
( V+ b* t* l. u) B: @' S4 }4 nHarrison 提到...
- ?# j% y9 f i現在的BIOS有分成Legacy BIOS(組合語言)與UEFI BIOS(C語言),但是這兩種BIOS對於一個剛接觸的新手來說就只是Win98跟WinXp使用方式的差別而已,介面不同,但是要做的事情幾乎一樣。( u! w5 L: P3 W U+ F
3 Y7 g, v4 Z( A所以我的建議是多去了解這些工具的用法(組合語言指令/C語言用法)還有多看看Intel IA32 Architecture guide vol1~3(目前最新版是IA64),因為了解系統架構才是最基本的。
# H& s1 M0 C) W+ `5 v
0 n+ d9 T- l: c5 `+ U& j b- b如果要快速上手的話,你就先必須知道"設定方式",例如: 如何填CMOS/PCI Register(CF8/CF9),還有如何調整PIRQ/GPIO/ASL Code...等,如何透過SMbus/LPC存取? 何謂KBC/EC? 又要如何把OpROM 載入到記憶體,然後把控制權交給OpROM,執行後又把控制權還給BIOS/CPU Microcode如何更新?...etc. 這些都是基本OEM BIOS會做的事情,至於BIOS核心就必須很了解IA32架構你才有辦法去做。, Z7 C* E- B6 @
十月 04, 2007 5:39 下午 4 }! u" H( G& \. f( P8 E6 G9 N9 b% n
/ M" g$ q U( C, ftonyya 提到... ) F: R3 Y4 e& n- W% G J
首先感謝你的回覆; @" a, J, \" `8 W4 R2 l' C( n. W
! Q2 l4 W! p$ Z v
1.目前接觸的是Legacy BIOS(組合語言)- h- O/ ?! C) ?: |; }7 I
" P4 n( c& f; D+ p, k5 E* @2.IA32的系統架構有在看,目前也在積極補強一些相關的spec知識,不過還是要有實際做過才有感覺,對我而言如果只是光看的話無法深刻的體會
$ w8 T) r$ g3 q% s1 L5 c4 e
F2 C+ g" B7 q: ~3.關於你說的設定方式,有的有碰過,像是PCI,ASL code,SMBUS/LPC, CPU Microcode更新,我會去補強你所提到而我沒碰到的部份8 q; R) h, D' u, {
4 S/ [0 w2 p( p4 \4.進入這行的感想是對於一些硬體的知識比以前來的了解,辛苦的是要一直摸索找方向,雖然東西很多要K,問題就在於太多東西反而有時不知從何著手 @@!* T' ?7 }- f0 D
# U, i! |1 V' N
5.再次感謝你所提供的意見
: V; O4 F! M5 u8 Y十月 05, 2007 8:09 上午 ]7 O- L9 s+ J' g
* w! J, d u. T/ ?; uchiehlin@mail2000.com.tw 提到... 4 v2 R( |( p0 N9 P# |
PCI Register 是 cf8 cfc Index ,Data- G8 m$ ~# O1 B2 a# F3 j
十月 25, 2007 11:17 上午
6 p4 V7 Y2 ~5 E# l
, V( F' b5 m+ S4 {; k) \# S$ yPT 提到... # p! s% a! t/ e+ n- j( F
關於SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)
$ H0 r% J H1 r% q- [! @$ a, q; s! qmov eax, 80002750h
$ |; e9 O# |9 g; B( _ P依照我的理解方式是3 a7 u8 q/ _& E/ C
10000000^00000000^00100^011^01010000% \9 M. Y5 H% P6 [* Q/ n1 d1 s
所以應該是80002350h |
|