|
|
一旦正確的頻率供給給system後, BIOS便依據既定的POST table(類似行程表)來做事. 首先,與chipset最為相關的便是 [chipset config stage]. 意即,在此階段BIOS必須對 chipset registers填入正確的值,俾使其正常運作. 一般而言,要config下列的 devices:
: w f9 C! Z# f8 _9 F- NB(還記得前面有提過北橋內部約可分 4 blocks; "有些" blocks 需要 在此 program...)+ b& c1 f( \7 ^) f) F: ^
- SB(即 PCI-ISA bridge)- T) |1 J# ^+ c d
- ACPI registers
9 |; `" Z8 x: L/ `6 M- USB registers0 ]. L: s4 R( | A7 m2 \+ l7 r1 ^# s4 [
- SATA registers& c* r8 t- e* J$ _
- PATA registers
8 H+ R' g+ P* I0 U# f2 U...
) b/ {1 H7 Z5 j& t$ |
$ M! _: k) M* x8 {* 在此所謂的 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之處 !!!0 Z7 w& T2 ]; I h: B) v: j, a
6 t: w7 D( A0 L: [. M
* ACPI registers通常透過 IO 來存取- Z( y& v0 E$ L L
Ex. // assume ACPI Base is 800h,要 access ACPI Reg55h
* j+ F& Y2 b- c3 w# n8 zmov dx, 855h
0 _0 V& n- z8 L8 J5 t) Ain al, dx ; <- al = ACPI Reg55h's value
, g; x) r# V: N( @- ?- [2 e8 z# Z Y$ m8 u- b7 n
* 上述所列的 devices多為 PCI device,也都有唯一的PFA(PCI Function Address,即 bus#,device#,func#),也因此,只要對 device 下 PCI configuration read/write便可以 config device registers.
6 ^, l2 Z! u* c8 H5 ~, F. I0 S$ ?2 _& N g- |
Ex. 假設: set SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)
3 Q# N, i# n! m8 |=> 簡單的 assembly can be:5 F Y- [* Y8 f7 Z
' R2 E9 i, U8 t+ v0 W1 @7 Y& R
mov eax, 80002750h8 r3 |8 r( s' @% O" N; c
mov dx, 0cf8h
' P4 b1 H. @ I. ?! M1 Dout dx, eax8 ~6 e0 S( U8 {- n0 A0 @/ |
& ~+ @+ D7 z; B3 d" O5 ^! y# j
mov dx, 0cfeh8 e7 Y) o! s2 }$ Q/ k4 n
in al, dx
0 Q( k& z; z R" ~or al, 00001000b. i. N7 Q, G* f% H# e/ |
out dx, al 5 J* ]0 S+ Y; v# h. D- W; R
1 u/ Q4 c/ V0 V
事實上每家BIOS都 maintain many "tables" 來說明: 哪一個 device 中的哪些 registers要填?值.相關的 access routine都已經寫好. Programmer只需更改表裡面的值即可 ^_^) {; P- G1 S- m a2 a8 P' K9 M3 u- a
$ }6 Y1 I1 P8 P+ u*當有人要求改 register setting時,我們必須知道三件事:
$ C- c8 c8 r9 k5 y4 d! j1. why (為什麼要改?). ^ D$ E' _: g9 L: }
2. what(改成何值?)
l6 u* \7 A Q( J. _9 j& r3. when(什麼點改?)
3 o2 s* n: z! Y9 g! n0 Y5 a: [( w# z
*對於 BIOS kernel與 OEM coding的人言,這部分會是較少碰觸的,因為,這些code會由 chipset porting的人負責撰寫及維護. . q' N2 T/ t# h2 @
張貼者: HARRISON HSIEH 位於 8:41 下午 1 d% A% D- |5 }6 q0 }$ u# Y
標籤: BIOS相關
3 I: G/ {2 o5 D+ P0 F+ k6 意見:
0 }% K5 H3 |0 E B/ c ; Z, _/ ]& ?; B5 g2 z! S) W+ Y6 D
tonyya 提到... : ]+ Z* i, j5 C% [, @5 w V" F
無意間發現你的部落格/ {+ k5 g0 D& C' ?7 Z* J" J
0 m1 D$ ?- q* o7 q' \: Q8 d( k
很多文章都覺得受益良多
, ~: E' K7 }# Z
' N C$ T( v! t我也剛接觸這門領域不久
8 q9 b+ ?: }, `. ~ o* {1 q/ ]
: j1 z) ?6 |+ U' f% ~很多東西都似懂非懂
' G. s0 T! e: Z7 m! T
. g/ I8 V) l- D: E& G% _# v) B不知對於一個新人而言
; c/ X1 k3 k/ j' C5 o, ~( U5 z" O# Z7 a, V# ~ y2 S, t
有沒有什麼好的訓練方式$ O h a2 J4 I/ I) L! ~
" ^6 ~2 ?9 K4 m可以及早進入狀況
4 t( ~4 k) Z+ c# T% X ?" X: B: `十月 03, 2007 5:53 上午 : l% A4 i% A& K& `
$ p* d& N. [4 q0 a# H" L
Harrison 提到... 2 Y+ _1 N! f3 u5 E/ L3 x0 c
現在的BIOS有分成Legacy BIOS(組合語言)與UEFI BIOS(C語言),但是這兩種BIOS對於一個剛接觸的新手來說就只是Win98跟WinXp使用方式的差別而已,介面不同,但是要做的事情幾乎一樣。
- i5 Z2 H l6 S6 F
. u" d* U7 E2 S4 o+ u& W1 y/ J5 R. q所以我的建議是多去了解這些工具的用法(組合語言指令/C語言用法)還有多看看Intel IA32 Architecture guide vol1~3(目前最新版是IA64),因為了解系統架構才是最基本的。
& f# I O/ }4 X0 N$ G3 n3 u+ X) }( V6 Z. k, D9 N! |! L
如果要快速上手的話,你就先必須知道"設定方式",例如: 如何填CMOS/PCI Register(CF8/CF9),還有如何調整PIRQ/GPIO/ASL Code...等,如何透過SMbus/LPC存取? 何謂KBC/EC? 又要如何把OpROM 載入到記憶體,然後把控制權交給OpROM,執行後又把控制權還給BIOS/CPU Microcode如何更新?...etc. 這些都是基本OEM BIOS會做的事情,至於BIOS核心就必須很了解IA32架構你才有辦法去做。; o) {" I* {, Y/ \( [
十月 04, 2007 5:39 下午 1 ]# q" h1 L) ~; G; v
( U. E$ O6 n A* ` L- Mtonyya 提到... ! _6 L, g# g2 ]1 x. x+ S! z' F
首先感謝你的回覆
+ I( ^( C& j' ^' |6 a) V. Z$ x" J( T& M, v1 e, ^
1.目前接觸的是Legacy BIOS(組合語言)4 h( x+ d9 @$ Q( u1 a" v
$ M- H( x" w& F4 q8 l1 V, N# b2.IA32的系統架構有在看,目前也在積極補強一些相關的spec知識,不過還是要有實際做過才有感覺,對我而言如果只是光看的話無法深刻的體會% {* Y" K+ `$ J& _# d* F$ l
' K0 X2 v7 @# V0 f2 y* P
3.關於你說的設定方式,有的有碰過,像是PCI,ASL code,SMBUS/LPC, CPU Microcode更新,我會去補強你所提到而我沒碰到的部份
5 n( g4 c! @3 w. y$ G, F9 y1 T$ E0 I# M i) _* h
4.進入這行的感想是對於一些硬體的知識比以前來的了解,辛苦的是要一直摸索找方向,雖然東西很多要K,問題就在於太多東西反而有時不知從何著手 @@!
, ^1 c0 h. Z+ ]7 i" T- i& p( `) V9 t. W8 I
5.再次感謝你所提供的意見* O2 t" H( H$ o6 x
十月 05, 2007 8:09 上午 & ~8 p7 ] Y; p1 s1 Q% h! F
3 z$ K9 ~$ ]9 D/ @, E% T3 Rchiehlin@mail2000.com.tw 提到... . ?% T# i1 L3 V8 b
PCI Register 是 cf8 cfc Index ,Data! [4 H* k- K8 p: q! G
十月 25, 2007 11:17 上午
. _- s+ b2 }/ g5 L: l6 R8 r5 Y
8 C7 P! {0 F, x1 }4 c2 gPT 提到...
; p/ A8 I. M# a關於SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)
O4 W" J4 `. l5 e4 ^* _mov eax, 80002750h
: G+ r; L; l6 y+ l- z% ~5 t依照我的理解方式是
" Y- D/ I2 ^7 y6 _1 k8 A6 O10000000^00000000^00100^011^01010000
, P4 F% s8 {% N# Y0 \所以應該是80002350h |
|