|
|
一旦正確的頻率供給給system後, BIOS便依據既定的POST table(類似行程表)來做事. 首先,與chipset最為相關的便是 [chipset config stage]. 意即,在此階段BIOS必須對 chipset registers填入正確的值,俾使其正常運作. 一般而言,要config下列的 devices:, }+ ~& C) J0 ? |( r5 k
- NB(還記得前面有提過北橋內部約可分 4 blocks; "有些" blocks 需要 在此 program...)% k) R' ~* K& y: x e: ?
- SB(即 PCI-ISA bridge)
8 ?7 m' f; P1 w2 v- ACPI registers
$ O" j9 F6 c2 G7 B6 l* ]( }5 J, e/ e- USB registers
6 D0 Y( z3 I" s& \" w- SATA registers
7 T$ c5 T+ g8 u0 Z3 p- PATA registers: z" s, @& R6 o+ h7 G/ J9 X
...2 ~% ^* z: g$ a2 _$ R
; c9 b' |5 J M. 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之處 !!!
* f/ q$ F6 y! _. Z; [3 g* Q! {1 e, F- p2 B6 o. y" j5 R
* ACPI registers通常透過 IO 來存取- p6 `( \' W( }0 s. D& p7 a- O2 \
Ex. // assume ACPI Base is 800h,要 access ACPI Reg55h
2 \ u3 l, E6 r, v9 V p2 ?! Xmov dx, 855h. q5 {$ S6 ]( p* n
in al, dx ; <- al = ACPI Reg55h's value) Z4 L* {; I2 i
$ z6 d. E! v+ p. D2 W7 t
* 上述所列的 devices多為 PCI device,也都有唯一的PFA(PCI Function Address,即 bus#,device#,func#),也因此,只要對 device 下 PCI configuration read/write便可以 config device registers.
- A# k" M" o8 x& X P
! b& F1 F; {7 g- @% t8 T9 r- B; CEx. 假設: set SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)
( n0 [5 _! h% f) Y3 j=> 簡單的 assembly can be:0 m" O# o+ l7 _( s
; R1 v. e* L! q5 I9 L+ g( j: q0 N- y
mov eax, 80002750h
! ]& [0 E% x1 K) ~: ^mov dx, 0cf8h; F8 F% U4 D2 I- J0 c3 {# g
out dx, eax% }( ]9 \ F! W& W9 h" e% T+ J* ?
0 ~% d& B, \9 T! L9 z+ h, U( ]
mov dx, 0cfeh
; O5 u( R: ?& n& q4 T3 Zin al, dx
9 p9 w6 |4 d O# D7 w8 x( E$ Qor al, 00001000b& \6 d/ a* s2 R* G
out dx, al ; c4 D. i- p; y( ~ l4 W
+ ]) Q4 I; h3 z; N' a' ?& n
事實上每家BIOS都 maintain many "tables" 來說明: 哪一個 device 中的哪些 registers要填?值.相關的 access routine都已經寫好. Programmer只需更改表裡面的值即可 ^_^1 [4 O2 f B% ]6 y+ Z. a
# m c, w9 U- U; b5 X& R$ ~. W
*當有人要求改 register setting時,我們必須知道三件事:
0 b9 [# Q2 E! m6 s8 Q1. why (為什麼要改?)
2 Y; t2 p" A- q2 f0 Z& n2. what(改成何值?)
1 n0 O6 `+ z3 E3. when(什麼點改?)
* v. S8 W! K; t2 f* _% ]$ w$ ~& Z$ `$ Z! p" g2 K, b
*對於 BIOS kernel與 OEM coding的人言,這部分會是較少碰觸的,因為,這些code會由 chipset porting的人負責撰寫及維護. 1 R- D: O+ C$ F, T
張貼者: HARRISON HSIEH 位於 8:41 下午 , d3 i/ N& c6 {2 q7 _: n
標籤: BIOS相關 . c3 F6 g, \( y4 H$ ?! t- v2 v) X
6 意見: ! I/ ?# m$ W7 d' @3 M; U. j! A
5 L. v! Y2 h" v7 D2 [" Q
tonyya 提到... 0 }: G3 V; P: e
無意間發現你的部落格
; P0 Z; {, Y$ w4 I. T
/ m d+ q3 O, l) a% Q, M很多文章都覺得受益良多8 B% n2 h1 r t* }+ ]
& \# g* _9 R. B. Q0 @我也剛接觸這門領域不久
! y- C4 _7 v1 ]. o# V9 ]5 }/ V( I' @) f: |
很多東西都似懂非懂) K" L+ @2 S6 s9 w1 P f9 c
2 Q& u; g7 I( j0 V+ M' y
不知對於一個新人而言7 B: ]3 e+ K3 i4 R1 m* N% T4 {
; |/ B/ c0 j* @/ }( g K0 X' a
有沒有什麼好的訓練方式
0 Y7 b; b" v7 f! H% v
2 c/ d% ]2 d% G& z# t% I% W1 ~可以及早進入狀況3 V) H/ Z$ ~) ]! h! _
十月 03, 2007 5:53 上午 ( g% F) y B* j. b. R* z; i
3 _' K2 U6 x( Q, S4 Y
Harrison 提到... 3 w/ R) u6 k* Y; L% ~! K
現在的BIOS有分成Legacy BIOS(組合語言)與UEFI BIOS(C語言),但是這兩種BIOS對於一個剛接觸的新手來說就只是Win98跟WinXp使用方式的差別而已,介面不同,但是要做的事情幾乎一樣。
/ w+ x; [4 T4 o' d
" @8 a' }) z; q! B- l( R9 B6 |所以我的建議是多去了解這些工具的用法(組合語言指令/C語言用法)還有多看看Intel IA32 Architecture guide vol1~3(目前最新版是IA64),因為了解系統架構才是最基本的。
# P9 H3 }2 d ~ V) ]) b) L4 z7 a- l7 ], @" ^4 v9 u
如果要快速上手的話,你就先必須知道"設定方式",例如: 如何填CMOS/PCI Register(CF8/CF9),還有如何調整PIRQ/GPIO/ASL Code...等,如何透過SMbus/LPC存取? 何謂KBC/EC? 又要如何把OpROM 載入到記憶體,然後把控制權交給OpROM,執行後又把控制權還給BIOS/CPU Microcode如何更新?...etc. 這些都是基本OEM BIOS會做的事情,至於BIOS核心就必須很了解IA32架構你才有辦法去做。
% D" h- u4 A. N2 M8 s十月 04, 2007 5:39 下午
, o4 W$ U! {1 K- o; o" } . F) I8 _% z J+ {/ R0 v6 E
tonyya 提到... 7 `1 p% t8 ?8 A$ _, x
首先感謝你的回覆
! @; W. n1 W g6 ?7 I5 h( e3 _9 U& A9 G8 r9 A# x
1.目前接觸的是Legacy BIOS(組合語言)
/ d7 o9 `! r: {# Q
# O, I2 S9 K$ r" u" q2.IA32的系統架構有在看,目前也在積極補強一些相關的spec知識,不過還是要有實際做過才有感覺,對我而言如果只是光看的話無法深刻的體會
8 B) ~% f( n- t* D" \
* u/ _# p |& B9 R3.關於你說的設定方式,有的有碰過,像是PCI,ASL code,SMBUS/LPC, CPU Microcode更新,我會去補強你所提到而我沒碰到的部份9 `! ^: i5 h& \# E) X% U6 n
6 y* k$ r+ }2 _) y4 z9 _7 y% }% Q
4.進入這行的感想是對於一些硬體的知識比以前來的了解,辛苦的是要一直摸索找方向,雖然東西很多要K,問題就在於太多東西反而有時不知從何著手 @@!
8 E) u6 `' s5 H/ A" k1 Q8 }) ?6 E
5.再次感謝你所提供的意見# w7 O. u6 s. u" V9 |# S& l
十月 05, 2007 8:09 上午 $ M2 g% I) B6 V A$ y+ k! c
/ c7 F5 M7 ~0 v, _. z2 u- q
chiehlin@mail2000.com.tw 提到...
R: z+ V( G0 F; e D2 y8 [1 O. V7 KPCI Register 是 cf8 cfc Index ,Data+ y8 B; D! d' D+ S5 @: v' Y
十月 25, 2007 11:17 上午
2 s0 F* B4 q4 t1 g : G) w4 E8 u# s, |8 p
PT 提到...
/ w; l# _2 @( p0 t關於SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3). u" t, D& l# u
mov eax, 80002750h
, _5 B4 z0 o$ y* V. n$ m7 o& U依照我的理解方式是) E% Z+ p; J& w0 X- y
10000000^00000000^00100^011^01010000
& z" V+ n# V1 x9 y所以應該是80002350h |
|