|
一旦正確的頻率供給給system後, BIOS便依據既定的POST table(類似行程表)來做事. 首先,與chipset最為相關的便是 [chipset config stage]. 意即,在此階段BIOS必須對 chipset registers填入正確的值,俾使其正常運作. 一般而言,要config下列的 devices:7 e* J6 f" Z, _7 M6 M
- NB(還記得前面有提過北橋內部約可分 4 blocks; "有些" blocks 需要 在此 program...)4 e7 e+ t! S k) ]. Y7 ~# T" e
- SB(即 PCI-ISA bridge)
/ e: ^* h0 x0 H- ACPI registers
& L6 z+ P2 V! Z9 P! ~+ E- USB registers) C, I1 c& a6 ]; ~; c, M7 h" q
- SATA registers# ^, I+ [& V# b* w
- PATA registers# U+ V8 Q; q7 t! C8 N
...
. d3 i \: I5 ~9 U1 Q% L
5 }3 \- K7 A$ ^1 }, a* c* 在此所謂的 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之處 !!!
6 N% ~* \7 |4 B" l
% k0 v6 v7 Y& K1 u4 |* ACPI registers通常透過 IO 來存取1 @# S4 O4 e$ C+ m* o Q2 U/ X
Ex. // assume ACPI Base is 800h,要 access ACPI Reg55h7 {2 j) z' j+ {/ A3 b9 `
mov dx, 855h, z# s; I8 Q1 `
in al, dx ; <- al = ACPI Reg55h's value
) n; p9 [/ N. f
2 t1 r. g7 I2 c! X) q" X; x* 上述所列的 devices多為 PCI device,也都有唯一的PFA(PCI Function Address,即 bus#,device#,func#),也因此,只要對 device 下 PCI configuration read/write便可以 config device registers.
2 L0 H5 i1 Y% k7 \, Q
+ {# O& N% \; h4 G6 jEx. 假設: set SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)% y9 ]" J0 s# H
=> 簡單的 assembly can be:
! n$ y# J+ H$ B1 y2 x5 l4 w' B
s( Q1 n. E4 s2 E0 @, B pmov eax, 80002750h
3 c: S; M9 Z0 _1 W, X* w# Pmov dx, 0cf8h8 s8 d5 O4 u+ Y5 U$ J+ w
out dx, eax/ x* l" P X1 H. g0 k# a- e
1 c2 `6 V+ O9 d/ X3 G0 G" W- X emov dx, 0cfeh
: e+ _- z6 C4 B5 r% p9 y; Q& [* o6 win al, dx
- A+ G0 G( ~" u+ ^or al, 00001000b
) F2 S. o$ L, F- R1 m# }out dx, al / T$ L6 U; M- e3 l, Z& q
( b% h' Y/ j+ v事實上每家BIOS都 maintain many "tables" 來說明: 哪一個 device 中的哪些 registers要填?值.相關的 access routine都已經寫好. Programmer只需更改表裡面的值即可 ^_^- Q' ~# x- O/ m
1 U# t1 o5 F, B$ _) [4 b o*當有人要求改 register setting時,我們必須知道三件事:
+ k' e+ V4 q+ P/ t) G$ }$ \1. why (為什麼要改?)( i: E$ M4 q8 b- }. c
2. what(改成何值?)' N1 W- |4 u. [3 f6 M8 L
3. when(什麼點改?)5 \' K; D9 u& k2 P R
( J& H7 f4 }6 ^8 Z5 R# g
*對於 BIOS kernel與 OEM coding的人言,這部分會是較少碰觸的,因為,這些code會由 chipset porting的人負責撰寫及維護. $ V& S( j1 @9 {
張貼者: HARRISON HSIEH 位於 8:41 下午 3 z; h q8 J/ _
標籤: BIOS相關 7 m$ k1 l' K4 J, O5 u
6 意見: ( q0 E% L- g% \% t9 G
. {4 c( G* H; n% ]4 h- e* u) h8 ^: q
tonyya 提到...
% {2 _* ~+ y' g- j# K無意間發現你的部落格
, a+ h, E+ a; I9 |7 S* R, f2 P7 f* _7 p b7 W
很多文章都覺得受益良多
7 i. B7 x: ?- w5 s4 c' `! u
0 k; x2 s/ b' e f* [* J" h' g我也剛接觸這門領域不久
9 A) ]0 G7 O) ^% M: k" t7 V' w/ a4 |& f* T) i
很多東西都似懂非懂
! e/ S1 v/ j3 |
5 T3 Q# E( A7 ]/ ?) m& x不知對於一個新人而言
4 n3 b5 _0 ~( F9 Z& g
. T+ V5 T; _, R) I0 z( R: j& v有沒有什麼好的訓練方式5 q x% q( [( D6 R
{. y4 Y% u2 j: P, y
可以及早進入狀況
5 n% k9 J& J: i( g" X. |) F十月 03, 2007 5:53 上午 : H6 G. r% {& h& F5 A6 O3 e
5 x, W9 I' `/ E1 WHarrison 提到... 8 `$ D9 {/ M0 s3 w0 J; T( R4 N, L
現在的BIOS有分成Legacy BIOS(組合語言)與UEFI BIOS(C語言),但是這兩種BIOS對於一個剛接觸的新手來說就只是Win98跟WinXp使用方式的差別而已,介面不同,但是要做的事情幾乎一樣。
0 w+ d- I# ?4 A# z9 ~' q* f8 z+ |/ _4 U) j( ^1 {+ n" ]
所以我的建議是多去了解這些工具的用法(組合語言指令/C語言用法)還有多看看Intel IA32 Architecture guide vol1~3(目前最新版是IA64),因為了解系統架構才是最基本的。) X( }9 T w5 o& c. d
+ h, C0 L7 N9 Z% F9 m
如果要快速上手的話,你就先必須知道"設定方式",例如: 如何填CMOS/PCI Register(CF8/CF9),還有如何調整PIRQ/GPIO/ASL Code...等,如何透過SMbus/LPC存取? 何謂KBC/EC? 又要如何把OpROM 載入到記憶體,然後把控制權交給OpROM,執行後又把控制權還給BIOS/CPU Microcode如何更新?...etc. 這些都是基本OEM BIOS會做的事情,至於BIOS核心就必須很了解IA32架構你才有辦法去做。' P, j5 l- z3 T- j
十月 04, 2007 5:39 下午
' S& F z) T* n) C' p+ \0 f. r. E
; D) L1 S7 l7 G! T$ P# S$ G# itonyya 提到... ' D$ l" I3 ^& u, m' B+ W
首先感謝你的回覆$ K* u% D1 A* i8 |4 c/ z& C
9 l' V! e9 t2 u6 d/ n
1.目前接觸的是Legacy BIOS(組合語言)
& ?; h. O0 w P0 e" a# X7 y
" I& Y' L1 g8 q8 r3 O2 e+ n2.IA32的系統架構有在看,目前也在積極補強一些相關的spec知識,不過還是要有實際做過才有感覺,對我而言如果只是光看的話無法深刻的體會$ Y) v0 Z4 I( e. p9 _8 n* Y
+ v$ R- J$ ?# t. V
3.關於你說的設定方式,有的有碰過,像是PCI,ASL code,SMBUS/LPC, CPU Microcode更新,我會去補強你所提到而我沒碰到的部份
8 p2 M) T0 M% ?/ v7 R3 q1 w+ u3 R
4.進入這行的感想是對於一些硬體的知識比以前來的了解,辛苦的是要一直摸索找方向,雖然東西很多要K,問題就在於太多東西反而有時不知從何著手 @@!
9 n( j7 N) j( u/ F8 ]
% T; M% S( s$ z. V0 c" U' V6 |5.再次感謝你所提供的意見) Z0 Y! P* B+ b" D
十月 05, 2007 8:09 上午
0 C, i0 j1 N2 D* H# p' p F! S. p0 `9 U' J' W* {# N
chiehlin@mail2000.com.tw 提到... 9 e; H: x: J% k
PCI Register 是 cf8 cfc Index ,Data: J# w& T6 l/ g: s
十月 25, 2007 11:17 上午
; ?& _; @; q8 A3 ]" t
/ d6 z X- P1 p- U( ePT 提到...
* Z+ a- i( L/ D4 E5 G" G& @; n+ s關於SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)
3 \; C+ D2 M, Tmov eax, 80002750h
( a: S" l; L( V' X M依照我的理解方式是, w, A$ s' U" ]( c
10000000^00000000^00100^011^010100007 n" I8 w8 O, j u+ X7 i
所以應該是80002350h |
|