|
|
一旦正確的頻率供給給system後, BIOS便依據既定的POST table(類似行程表)來做事. 首先,與chipset最為相關的便是 [chipset config stage]. 意即,在此階段BIOS必須對 chipset registers填入正確的值,俾使其正常運作. 一般而言,要config下列的 devices:4 v. v0 u$ }# A, {
- NB(還記得前面有提過北橋內部約可分 4 blocks; "有些" blocks 需要 在此 program...)
_3 w& H6 Q$ f% M# C7 |) o- SB(即 PCI-ISA bridge)
% d' X/ O# x8 {; z8 q* K" {- ACPI registers
" \1 F; \8 \) s; R- USB registers' @" M9 j1 O3 W9 ]
- SATA registers0 U" q. S5 H, [. N! \
- PATA registers/ t: n3 m6 Q" |8 {5 J4 |. X, p4 ]% ?
...3 \. R2 N- x* _
9 O+ U! l: k$ V) l. r7 l n! Z+ h* 在此所謂的 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之處 !!!
9 b" s3 M, B* f" y, l; f% W% t/ R% }4 J7 e2 B- s( \
* ACPI registers通常透過 IO 來存取2 \8 }: R' g7 U6 a) D
Ex. // assume ACPI Base is 800h,要 access ACPI Reg55h3 h# ]4 B3 O3 _7 t8 W; u5 H
mov dx, 855h
# D5 W: E! i5 c) `' k2 Q% k/ }+ }) F3 yin al, dx ; <- al = ACPI Reg55h's value: K8 x4 v- f+ B& a* V6 F
7 F7 @. Y3 t [1 P4 F
* 上述所列的 devices多為 PCI device,也都有唯一的PFA(PCI Function Address,即 bus#,device#,func#),也因此,只要對 device 下 PCI configuration read/write便可以 config device registers.
3 k! x% r7 O4 f) c; H2 c- t( T* s& f3 r4 c. |( P0 T
Ex. 假設: set SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)1 u, x0 @. W, n) f
=> 簡單的 assembly can be:3 s7 O( O T& e- Z
7 F+ b; g& l, ^! F5 m! F
mov eax, 80002750h* E, y4 _# M+ ~9 g3 j& v7 V( @# J
mov dx, 0cf8h
1 ^+ b) @& U0 ^( [1 g" ^) aout dx, eax& I1 Z9 z. X4 n+ d$ P' X1 Z
. X8 f$ J B. Omov dx, 0cfeh7 Y9 |' K/ V- g) v( b
in al, dx
. N' H. ^/ S+ H( j" t5 Jor al, 00001000b" U8 Q3 ]5 M% X! I
out dx, al
+ v( L% ]& { b' x' [
/ n# U. {& P |5 p1 b事實上每家BIOS都 maintain many "tables" 來說明: 哪一個 device 中的哪些 registers要填?值.相關的 access routine都已經寫好. Programmer只需更改表裡面的值即可 ^_^
2 T; X$ x" b: x4 ?0 `3 J# y8 g+ `# T$ Z2 V' w/ Q; g
*當有人要求改 register setting時,我們必須知道三件事:
4 t- \9 r" i/ Y0 B4 _8 b. e0 [1. why (為什麼要改?)% |, i4 a% T# b) P4 W% G. M
2. what(改成何值?)' F% x3 `* N/ c7 k; l" m. d. P: t
3. when(什麼點改?)8 c2 e# s/ |/ ] c
9 b6 _4 e7 C! b3 {2 w! ^& |*對於 BIOS kernel與 OEM coding的人言,這部分會是較少碰觸的,因為,這些code會由 chipset porting的人負責撰寫及維護.
! L/ ^0 K7 D3 n3 D0 P張貼者: HARRISON HSIEH 位於 8:41 下午 % Y, a+ L L1 F
標籤: BIOS相關
" h& c; w+ r2 [! q8 z$ H6 意見: . \; n4 u$ @, k+ y7 w! H
# A* N8 g1 h9 x5 P* h v
tonyya 提到...
4 X- n- h: V, v8 I; W. `無意間發現你的部落格1 X8 _4 G& G, [4 r1 R$ Y1 x/ G$ Z' v
' e* q, K5 p* ]# g很多文章都覺得受益良多
, |8 R; z8 s6 T: \& |2 ^- v1 T8 m) o! D3 O& i
我也剛接觸這門領域不久" _* c1 x6 r5 R8 F: n
( ?3 T4 A3 j% ~) p( a# r4 S
很多東西都似懂非懂
1 _3 _! |! I; J# u- D: Q) u- a, k8 K$ Y" k
不知對於一個新人而言: p5 J# _8 d4 j- P) h$ |
, E0 }) a& r/ p/ N9 J( H; C# D
有沒有什麼好的訓練方式
5 c4 k# c, c9 s z+ |3 N8 z1 l! d3 s e2 M' \5 O, \
可以及早進入狀況2 X% m: o- T+ z/ ?) S7 l
十月 03, 2007 5:53 上午 ' `8 i; M- H2 U
! Z: Q$ d8 u7 j, H& b
Harrison 提到... $ f& Y! c" U9 J
現在的BIOS有分成Legacy BIOS(組合語言)與UEFI BIOS(C語言),但是這兩種BIOS對於一個剛接觸的新手來說就只是Win98跟WinXp使用方式的差別而已,介面不同,但是要做的事情幾乎一樣。
2 `( z1 v& a+ i' O* u: d/ v0 V; i# L) g
所以我的建議是多去了解這些工具的用法(組合語言指令/C語言用法)還有多看看Intel IA32 Architecture guide vol1~3(目前最新版是IA64),因為了解系統架構才是最基本的。
1 {3 Z* }' ~# `( v% J- ]6 F+ I! c" m) I/ ^# Q9 o _( r- k$ ]
如果要快速上手的話,你就先必須知道"設定方式",例如: 如何填CMOS/PCI Register(CF8/CF9),還有如何調整PIRQ/GPIO/ASL Code...等,如何透過SMbus/LPC存取? 何謂KBC/EC? 又要如何把OpROM 載入到記憶體,然後把控制權交給OpROM,執行後又把控制權還給BIOS/CPU Microcode如何更新?...etc. 這些都是基本OEM BIOS會做的事情,至於BIOS核心就必須很了解IA32架構你才有辦法去做。 n0 {7 |- o3 J; {
十月 04, 2007 5:39 下午
% c# o/ W$ d" y' @ z' D" k( q7 e 3 t5 y/ c: q# e0 D7 |4 w# ]8 |4 h# Q, a- S
tonyya 提到... $ E* f: Z, l: I* O2 e- u7 c2 l! C
首先感謝你的回覆7 w o# ?/ P9 T$ m I
% B9 v* j- X/ V. R9 d: h
1.目前接觸的是Legacy BIOS(組合語言)& ~* e2 [' V# i/ v% f
$ f* z0 K7 u( o- [7 `2.IA32的系統架構有在看,目前也在積極補強一些相關的spec知識,不過還是要有實際做過才有感覺,對我而言如果只是光看的話無法深刻的體會
- k& J: I/ @2 s7 o. L+ S' o1 g! q# K( g2 B; b
3.關於你說的設定方式,有的有碰過,像是PCI,ASL code,SMBUS/LPC, CPU Microcode更新,我會去補強你所提到而我沒碰到的部份
% _7 d! s8 i, o8 K l6 `
( ?' y% j+ M5 W! l. f8 ]4.進入這行的感想是對於一些硬體的知識比以前來的了解,辛苦的是要一直摸索找方向,雖然東西很多要K,問題就在於太多東西反而有時不知從何著手 @@!0 G' M& T) K) e9 Z
4 V5 a- }4 U8 L/ G( a
5.再次感謝你所提供的意見
8 o6 |; |0 f" P十月 05, 2007 8:09 上午 - W% I, l# n7 t+ ~
7 [: P% |& g6 j/ `5 ychiehlin@mail2000.com.tw 提到... 2 S# \7 j/ ^. q/ Q! ~" o/ W
PCI Register 是 cf8 cfc Index ,Data, v6 D) t4 H* n0 n: m# @5 O T; v! U f
十月 25, 2007 11:17 上午
# i1 {) M6 B" z - j; x) V8 i& j+ U* P
PT 提到... 6 a0 C c, _# n. o( G! h- I! O
關於SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)5 ^# p: E. M, n$ t7 j) O7 Z7 Y
mov eax, 80002750h
0 V% n. p, b" M- y: S依照我的理解方式是5 R! H0 O, {( s7 x' n2 P9 R
10000000^00000000^00100^011^01010000
0 M. ~ h4 n$ V, k所以應該是80002350h |
|