|
|
一旦正確的頻率供給給system後, BIOS便依據既定的POST table(類似行程表)來做事. 首先,與chipset最為相關的便是 [chipset config stage]. 意即,在此階段BIOS必須對 chipset registers填入正確的值,俾使其正常運作. 一般而言,要config下列的 devices:9 S" E: K/ e5 a' t3 r9 F
- NB(還記得前面有提過北橋內部約可分 4 blocks; "有些" blocks 需要 在此 program...)
9 G9 n. P' s* |6 ^2 U- SB(即 PCI-ISA bridge)
2 F* w7 o+ p; y- ACPI registers7 ~+ y8 Y) ^5 }0 q
- USB registers
6 u, P, z( V4 E+ c9 Q4 f: X6 ^/ z+ C& R- SATA registers
$ Q* e8 L) w! |5 n- PATA registers; Q! M# R; P. {! N" I0 n
...6 M) f5 Z* _' t& J
: R3 x3 ^1 {8 p0 I: E1 u7 U9 |
* 在此所謂的 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之處 !!!% B5 M- c! @9 Z; Y" c e
9 U* u; j1 {* X* r. h
* ACPI registers通常透過 IO 來存取
3 T4 M! \; d3 F9 X O6 W+ s& w* yEx. // assume ACPI Base is 800h,要 access ACPI Reg55h
, ~) v y, s, c$ B! Nmov dx, 855h0 Q2 W) P# n/ g( p% o
in al, dx ; <- al = ACPI Reg55h's value& N" }4 d6 f" c$ D
& V6 `* E$ p4 f# x. w! W0 _* 上述所列的 devices多為 PCI device,也都有唯一的PFA(PCI Function Address,即 bus#,device#,func#),也因此,只要對 device 下 PCI configuration read/write便可以 config device registers.9 D/ ?9 F6 N! m) a) E4 z* `5 ~# k
: {8 ~$ |# K6 I0 A0 O6 z
Ex. 假設: set SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)
+ U" x& S# H+ W7 H* u# @=> 簡單的 assembly can be:0 C. a1 ^$ U R3 r" A R
4 s: |+ v+ f* {! C7 |# Tmov eax, 80002750h3 a; I" C7 \( h8 c" z
mov dx, 0cf8h# _- S! {0 d* l& C8 l3 z, {
out dx, eax4 W' C% r9 p, l! V1 e" ^
+ v o @ W* s0 f
mov dx, 0cfeh; |$ w0 z! J& U
in al, dx
7 z; C* y4 k4 c4 v, p" ?or al, 00001000b
8 B; o4 q8 T- k; A3 oout dx, al & P# w: N+ m/ u
- ~" C9 m$ o3 E7 N+ o/ J5 d事實上每家BIOS都 maintain many "tables" 來說明: 哪一個 device 中的哪些 registers要填?值.相關的 access routine都已經寫好. Programmer只需更改表裡面的值即可 ^_^
4 K/ h( {: h& v( X7 P' l6 H0 y1 @ F$ ?. r# f- R
*當有人要求改 register setting時,我們必須知道三件事:$ H# z( E5 e2 {
1. why (為什麼要改?)+ G' q% r! o+ i
2. what(改成何值?): R2 O0 H7 O- n
3. when(什麼點改?)& z% a& b. R, e5 w) L
6 `+ W- s" u" h/ _$ K
*對於 BIOS kernel與 OEM coding的人言,這部分會是較少碰觸的,因為,這些code會由 chipset porting的人負責撰寫及維護. ( [; ?, E1 d" I- A0 F
張貼者: HARRISON HSIEH 位於 8:41 下午
+ C8 y" v6 @* F標籤: BIOS相關 ' R, P h- T( R k/ N- r \
6 意見: # b% p! B2 H5 v5 L3 |" @
( w$ D+ N$ V+ H& v
tonyya 提到...
3 P. @$ j) _. F無意間發現你的部落格% s; Y8 t$ I) m
+ @4 @3 v3 j" \7 N Z5 P& P很多文章都覺得受益良多
" L7 }& `7 z( Z/ G2 S6 D3 O4 b, l4 U0 ?" ~% f5 S
我也剛接觸這門領域不久
# _3 V1 Q. |% j7 m* T
/ b9 Y7 D# n% h. @3 ]8 ?" A4 k3 }很多東西都似懂非懂! f2 L$ ? R. Y3 v6 \7 o
+ Z! w4 V7 d9 S8 J1 k
不知對於一個新人而言5 i& [% I3 b3 D8 ]
/ T" w; [ G& H+ g) B, [8 E/ I有沒有什麼好的訓練方式
5 K5 a+ m5 h3 S/ ]8 E! H' B4 e& |6 }
可以及早進入狀況
" u) Y& |: O' U; Y' z; A ~十月 03, 2007 5:53 上午 & k3 C# k- y7 k$ O, w: B6 a3 L# J ~
T# I. |: Z' s) i8 D& J& J4 D
Harrison 提到... % M9 z# j N6 [: g5 d: T
現在的BIOS有分成Legacy BIOS(組合語言)與UEFI BIOS(C語言),但是這兩種BIOS對於一個剛接觸的新手來說就只是Win98跟WinXp使用方式的差別而已,介面不同,但是要做的事情幾乎一樣。
5 A3 H& L1 `* X- s) f- l3 r3 C$ Q0 c! d0 r
所以我的建議是多去了解這些工具的用法(組合語言指令/C語言用法)還有多看看Intel IA32 Architecture guide vol1~3(目前最新版是IA64),因為了解系統架構才是最基本的。% ?# o% Z) o# p; I: {) F/ O" n9 M
v# C) H6 g( n8 A8 k
如果要快速上手的話,你就先必須知道"設定方式",例如: 如何填CMOS/PCI Register(CF8/CF9),還有如何調整PIRQ/GPIO/ASL Code...等,如何透過SMbus/LPC存取? 何謂KBC/EC? 又要如何把OpROM 載入到記憶體,然後把控制權交給OpROM,執行後又把控制權還給BIOS/CPU Microcode如何更新?...etc. 這些都是基本OEM BIOS會做的事情,至於BIOS核心就必須很了解IA32架構你才有辦法去做。 S9 A* M3 ?+ C5 ]: A8 A: F7 \
十月 04, 2007 5:39 下午 9 I+ r+ r+ r8 a0 f2 f; x
3 t1 F4 O1 r4 L9 _tonyya 提到... 7 Q, O7 \# P- v
首先感謝你的回覆
$ L# y' y: s* s" C' W) d5 I7 Z o W# `5 n2 h/ M
1.目前接觸的是Legacy BIOS(組合語言)6 r7 b& a( O$ c! f
8 ]4 Q1 u( Q( u! t1 {( M: R' h7 n2.IA32的系統架構有在看,目前也在積極補強一些相關的spec知識,不過還是要有實際做過才有感覺,對我而言如果只是光看的話無法深刻的體會
/ C: n) B( N; h1 p( q' l( Y1 F
3.關於你說的設定方式,有的有碰過,像是PCI,ASL code,SMBUS/LPC, CPU Microcode更新,我會去補強你所提到而我沒碰到的部份; U. k4 h9 a/ T, D
8 i; H% \. J+ Q$ p" l4 s4.進入這行的感想是對於一些硬體的知識比以前來的了解,辛苦的是要一直摸索找方向,雖然東西很多要K,問題就在於太多東西反而有時不知從何著手 @@!6 q: C* h* b: s* M" g) e
; ?' d/ a( J. i4 {
5.再次感謝你所提供的意見
4 x. \2 q( `2 v! Y) S5 Q十月 05, 2007 8:09 上午
, D: C3 y2 J8 [6 p1 y
/ I9 V2 W9 g+ K# J. z; v. J, ychiehlin@mail2000.com.tw 提到...
9 `# w C# _1 M4 s5 ~- u \% m7 |3 MPCI Register 是 cf8 cfc Index ,Data
9 O0 g' C% w2 v十月 25, 2007 11:17 上午
% [ |; q) x. P9 ]6 k 2 r0 k8 I6 X/ L; u
PT 提到... / B" W0 w [. b- j3 l
關於SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)
+ Y: n1 r4 B4 v" N6 h9 omov eax, 80002750h% j1 A$ r- n! ?
依照我的理解方式是 r5 I6 F0 ~1 {" ~
10000000^00000000^00100^011^01010000 \8 Q( e5 k% l, y5 E1 ~% v
所以應該是80002350h |
|