|
|
一旦正確的頻率供給給system後, BIOS便依據既定的POST table(類似行程表)來做事. 首先,與chipset最為相關的便是 [chipset config stage]. 意即,在此階段BIOS必須對 chipset registers填入正確的值,俾使其正常運作. 一般而言,要config下列的 devices:
% O, v8 D$ v7 s/ G- G/ r- NB(還記得前面有提過北橋內部約可分 4 blocks; "有些" blocks 需要 在此 program...)
5 M1 K% |; b8 F% G" `- SB(即 PCI-ISA bridge)# _: r$ v! Y7 [: t4 W; P
- ACPI registers
, y/ `3 I+ f! x- f- USB registers
: G5 |% s3 y b# r1 R) z6 w- SATA registers
: U f- M4 b. s8 L- PATA registers' [0 c8 V s! w4 y0 K3 L" f' F1 _1 r
...2 b6 r" u4 t, `% |3 k9 z J
5 y8 f) c0 Y3 x2 f" u
* 在此所謂的 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之處 !!!" q/ c% G3 w6 T* o7 \% @, Z
7 B3 y2 y6 H( p* ACPI registers通常透過 IO 來存取# k2 D2 r( h3 N# U5 }
Ex. // assume ACPI Base is 800h,要 access ACPI Reg55h
: Z* T+ e4 i$ o1 l3 lmov dx, 855h$ n1 Z9 F+ U F2 F
in al, dx ; <- al = ACPI Reg55h's value; M" X8 ^ E" e' j9 {+ R
, x; U4 f& x3 _3 c& p) j6 X
* 上述所列的 devices多為 PCI device,也都有唯一的PFA(PCI Function Address,即 bus#,device#,func#),也因此,只要對 device 下 PCI configuration read/write便可以 config device registers.
- n# N5 R6 D- C$ w" f
$ Y/ I' u7 H8 t+ @9 G# YEx. 假設: set SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)
2 h( v. }: `8 i5 i7 v, _9 V=> 簡單的 assembly can be:
, g& g' H. y5 }3 a
, p" U- P I2 U1 lmov eax, 80002750h
3 \$ P; |( Z' L+ F0 ^1 Smov dx, 0cf8h
0 L: l9 I* m5 ?* C3 |! ~out dx, eax
9 m* B' Z$ R' t- L, g" Y# n0 y, c& ~$ I, k
mov dx, 0cfeh
/ l- B4 S6 `3 G1 uin al, dx- X/ O/ ~6 o ^+ J( K
or al, 00001000b n5 b0 X, F7 B. l) C
out dx, al
5 ^- D( e1 R1 j5 Z! s6 Q6 s8 k- p& R0 X1 G z7 Y! O
事實上每家BIOS都 maintain many "tables" 來說明: 哪一個 device 中的哪些 registers要填?值.相關的 access routine都已經寫好. Programmer只需更改表裡面的值即可 ^_^
. _: Z2 x3 Q1 Q6 C7 n5 B" \! Y4 j* K. s
*當有人要求改 register setting時,我們必須知道三件事:
1 B$ X4 p1 b9 V5 ?3 P% p* ~ l1. why (為什麼要改?), |; v; W' Z7 k" B0 Q
2. what(改成何值?)
$ ^- X0 T8 o$ y/ c- F3. when(什麼點改?)
( m, U+ b0 [9 }
3 O. _0 o; s: I3 T- {: u( s*對於 BIOS kernel與 OEM coding的人言,這部分會是較少碰觸的,因為,這些code會由 chipset porting的人負責撰寫及維護. 8 q$ o F! b9 t) \
張貼者: HARRISON HSIEH 位於 8:41 下午
P" q1 a# L& T* _1 s' Y# a4 R標籤: BIOS相關 3 @3 |+ Z4 k7 q5 C" p8 I# L# Z1 F
6 意見:
4 u! T3 `9 u P, w8 c& e' s$ i
( R: [" j8 R8 O5 {tonyya 提到...
0 k8 w( [' ~% {- D無意間發現你的部落格
) x8 k+ M* R( N. i% i4 @
; J# Y1 G9 P2 s很多文章都覺得受益良多
2 K7 z& k( M# H& C& C3 B9 g+ I
( i9 Q) f( v- ]我也剛接觸這門領域不久
5 S9 g" c6 ]. L* m# n9 O% M; d4 ^' Y# F% |
很多東西都似懂非懂
2 D8 F8 R) h7 X
# t0 X$ L& u" f5 a, I" r* _不知對於一個新人而言
0 Q4 h# V* R; P: F* K' X3 B [1 K0 h
有沒有什麼好的訓練方式+ Q. m+ E* n$ p p
* ~4 x. o6 A V2 v
可以及早進入狀況! V+ m- l) ?" j6 ^0 h' u
十月 03, 2007 5:53 上午 0 v9 C; t: B$ s8 \: V
$ z6 P/ }8 |( n1 a5 ?Harrison 提到...
& Q9 L! G( R5 A3 S2 I" }現在的BIOS有分成Legacy BIOS(組合語言)與UEFI BIOS(C語言),但是這兩種BIOS對於一個剛接觸的新手來說就只是Win98跟WinXp使用方式的差別而已,介面不同,但是要做的事情幾乎一樣。4 v; s' X) I2 N5 ?/ t9 p
. }; X4 A7 ?4 [- D& ?所以我的建議是多去了解這些工具的用法(組合語言指令/C語言用法)還有多看看Intel IA32 Architecture guide vol1~3(目前最新版是IA64),因為了解系統架構才是最基本的。 c' X# E3 E* r, P; V
3 n5 D& }8 _/ f" X Y7 A+ A
如果要快速上手的話,你就先必須知道"設定方式",例如: 如何填CMOS/PCI Register(CF8/CF9),還有如何調整PIRQ/GPIO/ASL Code...等,如何透過SMbus/LPC存取? 何謂KBC/EC? 又要如何把OpROM 載入到記憶體,然後把控制權交給OpROM,執行後又把控制權還給BIOS/CPU Microcode如何更新?...etc. 這些都是基本OEM BIOS會做的事情,至於BIOS核心就必須很了解IA32架構你才有辦法去做。
8 H: K S0 s' J- m十月 04, 2007 5:39 下午
4 E7 l$ D! \0 q1 R0 [
+ i; I5 \( K+ E' g( A/ wtonyya 提到... : s* l+ B" I" g+ Y% O+ c5 |
首先感謝你的回覆4 a& ~$ C H2 k, y' W
3 \6 w& S v! v9 ~3 V& n- T
1.目前接觸的是Legacy BIOS(組合語言)# m7 h2 ]$ h9 h" P: w3 H
2 r& Y* O7 w; w+ ^" C$ z7 ]. }& c" I2.IA32的系統架構有在看,目前也在積極補強一些相關的spec知識,不過還是要有實際做過才有感覺,對我而言如果只是光看的話無法深刻的體會
3 L0 r3 ]5 K- W: T9 P: { d) B2 N c; M- s) A+ T; w0 ^
3.關於你說的設定方式,有的有碰過,像是PCI,ASL code,SMBUS/LPC, CPU Microcode更新,我會去補強你所提到而我沒碰到的部份' P9 m) E: g8 v) l& H9 j5 T. w9 ^
( T9 b' @$ q2 ?; v( q/ M4.進入這行的感想是對於一些硬體的知識比以前來的了解,辛苦的是要一直摸索找方向,雖然東西很多要K,問題就在於太多東西反而有時不知從何著手 @@!. L8 n/ K- Z0 \/ [
; V9 _7 O! L, r, @' k
5.再次感謝你所提供的意見) k8 N, s% V7 z! }5 A. B6 w+ A* ^. n
十月 05, 2007 8:09 上午 0 D3 D0 v% S& E1 M# n% q, O; {
- Z4 f2 P! N; q9 A% b% Bchiehlin@mail2000.com.tw 提到... - R3 G3 f" }% M6 j T; v
PCI Register 是 cf8 cfc Index ,Data' z! J" [# ]& D+ e$ M
十月 25, 2007 11:17 上午 1 f. X- C4 f/ s) N% D/ Q
q2 [. g1 h1 D& e# y
PT 提到... 5 K+ O- [9 @2 w
關於SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)$ o' E! N; |6 L, r* V, i* a
mov eax, 80002750h
. ~- ?2 s u/ ^1 E依照我的理解方式是
& u* t s* z# c+ Z3 P* t10000000^00000000^00100^011^01010000$ T; c! c0 p, Y; R" z5 W
所以應該是80002350h |
|