|
|
一旦正確的頻率供給給system後, BIOS便依據既定的POST table(類似行程表)來做事. 首先,與chipset最為相關的便是 [chipset config stage]. 意即,在此階段BIOS必須對 chipset registers填入正確的值,俾使其正常運作. 一般而言,要config下列的 devices:- w" Q/ N& p$ T
- NB(還記得前面有提過北橋內部約可分 4 blocks; "有些" blocks 需要 在此 program...)
, V6 _5 Q# D4 w( V+ i- SB(即 PCI-ISA bridge)
1 @4 r v+ |& \# @; H0 m- ACPI registers
: W+ Q2 P" D1 }0 b' ^- USB registers5 n9 N' x/ L" n5 P2 W `/ U
- SATA registers7 n$ F) m0 B$ i0 c# p9 Q
- PATA registers
+ H! i& ^# o3 H( f...
$ v% _- D) P$ D9 S6 z
6 u0 B) }& Q+ s5 L0 G9 x' L1 m* 在此所謂的 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之處 !!!
( u' E9 L2 h/ \7 y) O; H3 z: z/ o. F5 j3 A
* ACPI registers通常透過 IO 來存取
+ b. F7 Y2 F! f8 P5 K9 FEx. // assume ACPI Base is 800h,要 access ACPI Reg55h6 S4 q7 q8 L2 @7 D a6 U
mov dx, 855h4 H+ m3 D: ?9 U' ^
in al, dx ; <- al = ACPI Reg55h's value
0 @9 V4 D' E/ F# b: ]2 e' b% ^' d* _& [4 N. ?7 ^; b9 E% _3 T) E
* 上述所列的 devices多為 PCI device,也都有唯一的PFA(PCI Function Address,即 bus#,device#,func#),也因此,只要對 device 下 PCI configuration read/write便可以 config device registers.0 [) ?5 |, A; t) K# O3 t
A+ O9 P8 W0 M' ^" v
Ex. 假設: set SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)
d4 V) w+ F! H) A' N=> 簡單的 assembly can be:
, q% _; Y: m9 e6 r9 o7 P& w$ Q& z \
mov eax, 80002750h' @6 w7 V1 |+ q+ M/ m* \9 q9 v
mov dx, 0cf8h
# u! B3 {0 [, s# D- d* Z& K; u/ bout dx, eax
t5 h, ` P2 m
9 X ?4 ]: D! \0 C, i4 X! bmov dx, 0cfeh
) L) p) U0 `/ t) l) T: gin al, dx
6 A) h1 F9 J6 M* Eor al, 00001000b' a$ t, x7 K) j7 e
out dx, al
) n: k' _) w, P2 v$ N P0 a- H# x5 V5 b9 K6 }3 }7 K
事實上每家BIOS都 maintain many "tables" 來說明: 哪一個 device 中的哪些 registers要填?值.相關的 access routine都已經寫好. Programmer只需更改表裡面的值即可 ^_^
& f8 _0 u- A" ~. ?5 k% ]& J4 b7 p/ E& ?- w0 v F
*當有人要求改 register setting時,我們必須知道三件事:
% Y5 {0 g f8 f1. why (為什麼要改?). v9 I0 w Y) [9 i8 e
2. what(改成何值?). K9 W! |4 d, |* f
3. when(什麼點改?)
7 r0 D, u2 u0 a+ I7 O
3 o( U# \! B: {+ k |*對於 BIOS kernel與 OEM coding的人言,這部分會是較少碰觸的,因為,這些code會由 chipset porting的人負責撰寫及維護. . [& \5 C0 b @9 M, g* `8 K+ K# g9 c
張貼者: HARRISON HSIEH 位於 8:41 下午 & m' V: Z, K( ?8 s
標籤: BIOS相關
% z6 R* o& y' \/ w6 意見:
l0 U' ^/ s: L# H5 h+ S 2 v4 X- f& Q. z. L- e$ Y0 g
tonyya 提到... & {0 b8 T3 S5 r# X
無意間發現你的部落格
5 c( s2 E6 O# z3 L+ q! [; E+ W1 f3 T, p3 Q9 l4 u' E
很多文章都覺得受益良多
" M6 h* U* U7 P* S( h8 H
) {% |# @8 Z% O# C8 m我也剛接觸這門領域不久
8 [! O; Q/ D1 N; m
; V2 u& M. O( c. b7 J很多東西都似懂非懂
& a+ D( S9 ^) ^+ r1 G8 I3 y
' l2 A* ?: c. m& l# [' [不知對於一個新人而言
3 i, r7 y% z# \6 K
$ m" V D5 D/ T: L) p+ @有沒有什麼好的訓練方式/ o6 N+ j8 O% }: W: n* g, t
0 i+ Y' {) F: L! t/ S可以及早進入狀況/ M* j8 e% B: g- l8 t" K7 s7 L
十月 03, 2007 5:53 上午
/ \3 m: Q5 m+ n# y" W 4 B+ F- ^# X) W# n
Harrison 提到... 7 B, e8 q. b1 S2 R6 b
現在的BIOS有分成Legacy BIOS(組合語言)與UEFI BIOS(C語言),但是這兩種BIOS對於一個剛接觸的新手來說就只是Win98跟WinXp使用方式的差別而已,介面不同,但是要做的事情幾乎一樣。+ y' A0 V+ J& c+ r( I
# S# m# a' L7 U% X所以我的建議是多去了解這些工具的用法(組合語言指令/C語言用法)還有多看看Intel IA32 Architecture guide vol1~3(目前最新版是IA64),因為了解系統架構才是最基本的。
: F2 v5 G" i" N+ Y) C: R) X, x, U4 [0 x: H" \/ m
如果要快速上手的話,你就先必須知道"設定方式",例如: 如何填CMOS/PCI Register(CF8/CF9),還有如何調整PIRQ/GPIO/ASL Code...等,如何透過SMbus/LPC存取? 何謂KBC/EC? 又要如何把OpROM 載入到記憶體,然後把控制權交給OpROM,執行後又把控制權還給BIOS/CPU Microcode如何更新?...etc. 這些都是基本OEM BIOS會做的事情,至於BIOS核心就必須很了解IA32架構你才有辦法去做。
) Z E1 ^4 X+ q8 E K8 Y/ b5 S% _8 Y十月 04, 2007 5:39 下午
* t8 T. |( W9 ~+ F& G; {9 H4 C
- K- i) b, [/ H7 q* ^tonyya 提到... $ @7 }" Y* t: j2 j3 U; p+ `8 |, A
首先感謝你的回覆
! c0 e% ~0 Q9 m9 E1 u
0 n' b6 s9 G0 D$ U9 Q3 J8 G7 W1.目前接觸的是Legacy BIOS(組合語言)# o/ I# q: N" a! p4 U3 X
2 V" r' k4 r% n$ E' {1 ?8 X2.IA32的系統架構有在看,目前也在積極補強一些相關的spec知識,不過還是要有實際做過才有感覺,對我而言如果只是光看的話無法深刻的體會+ L5 a9 b7 D* ~8 @# V
4 B" Z- e$ E {- v; `* N3.關於你說的設定方式,有的有碰過,像是PCI,ASL code,SMBUS/LPC, CPU Microcode更新,我會去補強你所提到而我沒碰到的部份" W, | a# O K( {$ T$ q% z
& w- N* Y8 \1 `" |
4.進入這行的感想是對於一些硬體的知識比以前來的了解,辛苦的是要一直摸索找方向,雖然東西很多要K,問題就在於太多東西反而有時不知從何著手 @@!4 V# R+ w8 ~# a
' V6 Y4 e9 t7 ~3 N+ Y4 x
5.再次感謝你所提供的意見
6 u6 F$ u! J+ N* U% T十月 05, 2007 8:09 上午
, J, e1 p. `, Z) j * Q+ Z0 |! o; N) R4 k
chiehlin@mail2000.com.tw 提到...
l0 |; n) c( u) l9 s/ KPCI Register 是 cf8 cfc Index ,Data
6 h& V2 Q# I e9 Z: n十月 25, 2007 11:17 上午
' Q8 q5 u4 W% a A# {, m- G / X/ T& {$ t* `0 a
PT 提到... 2 r5 Z8 d7 d2 H6 H m
關於SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)# M) p( P7 G: }, e& u* {' k
mov eax, 80002750h
( l! R6 L) w- q+ v) U依照我的理解方式是
) S! f; Z# K' l10000000^00000000^00100^011^01010000' J. ?- c0 W8 Z& S) F6 v8 T+ I
所以應該是80002350h |
|