|
|
一旦正確的頻率供給給system後, BIOS便依據既定的POST table(類似行程表)來做事. 首先,與chipset最為相關的便是 [chipset config stage]. 意即,在此階段BIOS必須對 chipset registers填入正確的值,俾使其正常運作. 一般而言,要config下列的 devices:& b* c! K5 F$ U
- NB(還記得前面有提過北橋內部約可分 4 blocks; "有些" blocks 需要 在此 program...)
2 ^; s5 K4 F# B$ q4 x- t8 v D- SB(即 PCI-ISA bridge)# ^ e" F4 E/ G. B: z" Z; S1 o
- ACPI registers
( p q/ B; H; f% i% S- USB registers1 @; g7 v* ~4 L7 ~ G
- SATA registers0 R& i4 a& T; j
- PATA registers
8 {6 _: C0 W) T- {...1 Z0 w9 S$ I) a( C2 g
$ _1 D/ [# M) M: X2 }6 t2 w* y$ L* 在此所謂的 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# I1 P( E9 g* T0 y
4 {0 M& `) ?! m$ g* ACPI registers通常透過 IO 來存取
# J" F. ` J' f& H" E1 C& TEx. // assume ACPI Base is 800h,要 access ACPI Reg55h7 g% d; P& R% t/ M2 k' t& H
mov dx, 855h9 M+ [* X! ~0 \) j% n& ]
in al, dx ; <- al = ACPI Reg55h's value* g% u& K4 I: h# ?
% z4 l5 E$ a o/ L4 t* 上述所列的 devices多為 PCI device,也都有唯一的PFA(PCI Function Address,即 bus#,device#,func#),也因此,只要對 device 下 PCI configuration read/write便可以 config device registers.3 ^" B+ e) m8 c0 w% g' Y1 l2 y4 \
8 L2 n( N4 h! F' ], ^* {6 f
Ex. 假設: set SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)9 g; Z2 l" ] Y% y
=> 簡單的 assembly can be:; ~1 {4 L7 _( @9 f, J
0 X9 @7 E7 g7 I/ fmov eax, 80002750h8 n8 @+ t: f* c2 x- }# A
mov dx, 0cf8h
! \, {; ?- }/ Eout dx, eax
( ~1 g+ G& Q6 p5 S- x: V) R$ Z$ v* ]% L$ C+ D p( }8 v* s j1 Z
mov dx, 0cfeh
+ P2 t6 G6 q( \0 Din al, dx- N2 r7 E" X* y7 Z9 _ a0 L- L
or al, 00001000b4 [9 a O- s5 I
out dx, al 5 Y) ?: F: N$ X3 g
( I9 @. Q' v! A2 a v6 a事實上每家BIOS都 maintain many "tables" 來說明: 哪一個 device 中的哪些 registers要填?值.相關的 access routine都已經寫好. Programmer只需更改表裡面的值即可 ^_^4 V4 @4 V) ~ o* e+ m
6 z! y3 T( E- p, O8 G*當有人要求改 register setting時,我們必須知道三件事:8 K' p* O% t( M6 l, x6 I
1. why (為什麼要改?)
W5 Y+ X7 \# Y( B- k2. what(改成何值?)
9 A9 M. r# b( c4 P, D! d. q3. when(什麼點改?)
# r# p; x" g6 n( x* P( R
0 u: u0 o; Y' e; W* t( b: }*對於 BIOS kernel與 OEM coding的人言,這部分會是較少碰觸的,因為,這些code會由 chipset porting的人負責撰寫及維護.
0 w. ~, `" N, x張貼者: HARRISON HSIEH 位於 8:41 下午
% V( J3 J4 a2 M% c# a標籤: BIOS相關 9 |2 u. |- p# N7 C) b }4 z
6 意見:
0 n) ?1 G/ q/ n! m# S+ ]
0 e/ }3 k) F g8 c) l3 M D* ztonyya 提到...
! W; ?5 D0 l0 h9 n+ o8 N' E無意間發現你的部落格
& a h$ L2 J* y; y; @) o* }5 r. {/ b u
很多文章都覺得受益良多) `0 t( u1 [' C) f
% n- H! C( ?& u x
我也剛接觸這門領域不久
# I! [+ P# ?% |' H& p4 J7 t( V+ e6 r
很多東西都似懂非懂
- E: E" `: n( W1 `4 a7 q
: C7 V6 O; `- r* g8 G' y不知對於一個新人而言
; l$ e, G2 U! |5 r0 a9 a1 U6 c$ R n1 ^" b6 h+ k; y. `
有沒有什麼好的訓練方式
! A% r4 a$ ~" G& q- D/ J+ y& |9 k; B/ D( @# H8 x/ ~* n
可以及早進入狀況' N+ H; C3 M" Z8 R- D( \. Z2 {* l
十月 03, 2007 5:53 上午
; S& l z) I7 B7 X3 P
H$ h) ^# @6 fHarrison 提到...
1 m. } |6 w1 g) z- c6 u$ e現在的BIOS有分成Legacy BIOS(組合語言)與UEFI BIOS(C語言),但是這兩種BIOS對於一個剛接觸的新手來說就只是Win98跟WinXp使用方式的差別而已,介面不同,但是要做的事情幾乎一樣。
7 d3 G9 ~2 t, v. O5 t. |
; i; H( A# F% D# W所以我的建議是多去了解這些工具的用法(組合語言指令/C語言用法)還有多看看Intel IA32 Architecture guide vol1~3(目前最新版是IA64),因為了解系統架構才是最基本的。
2 u& H8 q% R7 W3 [# ~5 Z) _" ]/ J0 |; v$ C. p p
如果要快速上手的話,你就先必須知道"設定方式",例如: 如何填CMOS/PCI Register(CF8/CF9),還有如何調整PIRQ/GPIO/ASL Code...等,如何透過SMbus/LPC存取? 何謂KBC/EC? 又要如何把OpROM 載入到記憶體,然後把控制權交給OpROM,執行後又把控制權還給BIOS/CPU Microcode如何更新?...etc. 這些都是基本OEM BIOS會做的事情,至於BIOS核心就必須很了解IA32架構你才有辦法去做。1 V- a$ S" _& |# \, o F+ o
十月 04, 2007 5:39 下午
\* t- C- L8 e
" z, B! m3 H: h: G6 t! etonyya 提到... 4 o2 U* s1 K& |! j X+ P
首先感謝你的回覆
5 D5 P! a" W! {+ H7 P. G- o0 ^, j4 g" O6 B+ F6 g4 v8 T0 C
1.目前接觸的是Legacy BIOS(組合語言)3 v! X0 T+ D* J8 D+ V( r6 Z) t8 M% l
2 j2 b3 Q K1 i7 E2.IA32的系統架構有在看,目前也在積極補強一些相關的spec知識,不過還是要有實際做過才有感覺,對我而言如果只是光看的話無法深刻的體會+ V' p! ]4 S5 T! \; ?1 I$ v& k1 h5 f4 ]8 d
' }5 ^/ a/ }3 i3 C9 C! B1 B
3.關於你說的設定方式,有的有碰過,像是PCI,ASL code,SMBUS/LPC, CPU Microcode更新,我會去補強你所提到而我沒碰到的部份
! d4 f! E4 n! K) ^3 _
$ ~9 A# p- n* h4.進入這行的感想是對於一些硬體的知識比以前來的了解,辛苦的是要一直摸索找方向,雖然東西很多要K,問題就在於太多東西反而有時不知從何著手 @@!8 w) ~, F8 x! f T! ~! l5 y' p7 U
, e+ o' G5 Z2 r0 U( q1 F6 f0 u5.再次感謝你所提供的意見
0 e4 U4 E7 G7 o' e十月 05, 2007 8:09 上午 ' l; E' C) @1 |$ ]4 V* Z
* l3 E9 X8 R/ Q% q% M
chiehlin@mail2000.com.tw 提到... # w+ O7 h4 J. }. R
PCI Register 是 cf8 cfc Index ,Data8 E2 Q% g( A( Y% o
十月 25, 2007 11:17 上午
; \8 Q0 S3 i+ F8 K) W $ n9 M% E/ ~7 k9 @- ^$ Z
PT 提到...
0 v& o* I1 c" ]& D關於SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)2 h- M0 |; X w7 `3 Y4 E7 {
mov eax, 80002750h
4 X' p& q3 k/ A9 r2 w: y+ ?1 [& M依照我的理解方式是
3 Q% v# D1 X4 u) j u10000000^00000000^00100^011^010100003 W( Q3 \; Y9 r+ A. J+ q
所以應該是80002350h |
|