找回密码
 加入计匠网
搜索
热搜: BIOS ACPI CPU Windows
查看: 15972|回复: 0

[转载]我所知道的BIOS- Chipset Config 5

[复制链接]
发表于 2010-7-1 11:31:10 | 显示全部楼层 |阅读模式
一旦正確的頻率供給給system後, BIOS便依據既定的POST table(類似行程表)來做事. 首先,與chipset最為相關的便是 [chipset config stage]. 意即,在此階段BIOS必須對 chipset registers填入正確的值,俾使其正常運作. 一般而言,要config下列的 devices:
8 E: F/ G& P- z9 n* U4 [- NB(還記得前面有提過北橋內部約可分 4 blocks; "有些" blocks 需要 在此 program...)2 v% b+ [  _  u5 y2 L
- SB(即 PCI-ISA bridge)' N& `; S$ n1 N* p4 p) d
- ACPI registers
: x% x# z. `( I' R+ m5 C- USB registers
- z: n& f+ b, ~: G) l! e- SATA registers' E" u  J$ u# ^$ ^2 c1 A8 S
- PATA registers6 L* V2 @8 M9 x+ r. y; u4 r) @4 d
...
3 x3 v: q# `# _. A+ |3 I, \* j  E: B! y) t
* 在此所謂的 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之處 !!!$ |& O3 l+ J' ?. H5 e) [

( n) W+ w3 j" y+ _' ^4 U; C+ P* ACPI registers通常透過 IO 來存取
. T$ ], O: p# eEx. // assume ACPI Base is 800h,要 access ACPI Reg55h
) u7 y7 U) J2 Q( j+ hmov dx, 855h7 R: V7 }6 i, r
in al, dx ; <- al = ACPI Reg55h's value! b" w' _) ~" |" Z# y1 w

# j5 X8 s& ~7 a/ @* 上述所列的 devices多為 PCI device,也都有唯一的PFA(PCI Function Address,即 bus#,device#,func#),也因此,只要對 device 下 PCI configuration read/write便可以 config device registers.
# m7 {# `; M9 g: i
; M5 {" c$ M8 }' PEx. 假設: set SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)
  ]  d0 u. g0 l; X; W=> 簡單的 assembly can be:
& }+ _" T1 T+ U9 H: @2 }; m8 I* f0 W8 y# I8 F6 t. y
mov eax, 80002750h% H4 h. D7 E9 E! x% u5 P
mov dx, 0cf8h
  u/ f& r, j+ N; I  m9 kout dx, eax7 @1 J+ t7 u7 x9 j1 ~# \/ L/ R/ O

8 x9 z& V7 u' i1 b9 v+ F% |$ \- wmov dx, 0cfeh! R  x% D6 U) Q1 ?- o
in al, dx
* T8 {. K2 [; a3 z$ c, b- w+ Kor al, 00001000b) M' ?' q- @- y; Y
out dx, al
  t9 ~" D, H$ j# g3 t6 @5 X5 T" w% k, l8 |6 D/ k" U
事實上每家BIOS都 maintain many "tables" 來說明: 哪一個 device 中的哪些 registers要填?值.相關的 access routine都已經寫好. Programmer只需更改表裡面的值即可 ^_^
7 e1 N. ~/ P& C. w" T* J0 E& ?) ^* a5 t8 {$ b
*當有人要求改 register setting時,我們必須知道三件事:
+ @) C  i, q! q& \% f: q1. why (為什麼要改?)0 a+ H! a% `' @  j9 b% A5 k/ E- A
2. what(改成何值?)7 T! \# A8 k8 o3 l& K( N
3. when(什麼點改?)' z% O& [6 L2 h  A
$ b: j4 G( q8 U1 z" f! e  d
*對於 BIOS kernel與 OEM coding的人言,這部分會是較少碰觸的,因為,這些code會由 chipset porting的人負責撰寫及維護.
5 f( A7 ~" w" A3 q6 H0 x# R2 ?張貼者: HARRISON HSIEH 位於 8:41 下午   5 f: p! q8 \; f: W% K% r# r; v& ?
標籤: BIOS相關 1 Y( e1 Q+ m* t9 W8 `+ @5 N
6 意見: " Y2 p% I' C6 E' ~' K1 A

: v8 j3 `; L$ j7 y0 m: otonyya 提到... 6 p. W. c* k3 ~% X  E) I- [$ |
無意間發現你的部落格# ~7 T& ?) E/ P$ H: n' Q" `) i; b7 a

3 U& d$ w& \" x2 d+ K很多文章都覺得受益良多9 V$ }; h1 N* C2 n" Q  ?" ^
" [5 v: P' t2 R9 Z5 ]) S! w
我也剛接觸這門領域不久
# w8 t5 U: _! G& A+ A9 q; h; q. J7 U# i4 J) ]! b
很多東西都似懂非懂
; v: O2 R7 w- W% n; K6 m3 j$ I: h/ f
不知對於一個新人而言
3 D% i* }& i: p8 v8 T
9 Y" f+ E( f% x" I6 N有沒有什麼好的訓練方式
" r7 ~6 a$ p9 D! ^, k3 j' l$ S8 u0 i5 l  ]4 p3 {3 w: s5 j/ s  M( K
可以及早進入狀況
3 g" Y0 F# A, G7 D3 R% ~# M十月 03, 2007 5:53 上午  7 g9 s' Z9 i: l$ V) D! u

- H5 P- [- ?4 c$ P  ?) ]' }8 wHarrison 提到... * m0 H% e/ ]3 v; R
現在的BIOS有分成Legacy BIOS(組合語言)與UEFI BIOS(C語言),但是這兩種BIOS對於一個剛接觸的新手來說就只是Win98跟WinXp使用方式的差別而已,介面不同,但是要做的事情幾乎一樣。  D$ L4 [& x( T5 n# |; `& @' b: `
# a( [6 D6 `- C+ i
所以我的建議是多去了解這些工具的用法(組合語言指令/C語言用法)還有多看看Intel IA32 Architecture guide vol1~3(目前最新版是IA64),因為了解系統架構才是最基本的。
3 t' e, M3 d& b, M& A5 H! d+ _2 o! ~8 R, Z2 {4 E
如果要快速上手的話,你就先必須知道"設定方式",例如: 如何填CMOS/PCI Register(CF8/CF9),還有如何調整PIRQ/GPIO/ASL Code...等,如何透過SMbus/LPC存取? 何謂KBC/EC? 又要如何把OpROM 載入到記憶體,然後把控制權交給OpROM,執行後又把控制權還給BIOS/CPU Microcode如何更新?...etc. 這些都是基本OEM BIOS會做的事情,至於BIOS核心就必須很了解IA32架構你才有辦法去做。
4 ~  C( D1 k2 g2 Y6 W十月 04, 2007 5:39 下午  
& C! n  g2 \% n5 W( F$ u ( d. F0 }% Z1 l# O& {* c7 i) T
tonyya 提到... 2 I4 z$ Z0 P$ p8 L. J% M. f- r% x
首先感謝你的回覆
% u& n1 }5 U1 t; `  {/ A6 ]9 X8 O$ {9 ?4 k, A3 m
1.目前接觸的是Legacy BIOS(組合語言)- l7 g) R( {# M' x. x

# X& P$ b3 \% v9 i2.IA32的系統架構有在看,目前也在積極補強一些相關的spec知識,不過還是要有實際做過才有感覺,對我而言如果只是光看的話無法深刻的體會
0 M9 v/ k; Q5 N0 D7 ^- a+ L
+ n! E- y0 ?% s9 e, g) r3.關於你說的設定方式,有的有碰過,像是PCI,ASL code,SMBUS/LPC, CPU Microcode更新,我會去補強你所提到而我沒碰到的部份7 }3 C4 T! R2 X. b, Y2 ~4 B

4 @/ h- B& V+ q  S) e$ g; Z4.進入這行的感想是對於一些硬體的知識比以前來的了解,辛苦的是要一直摸索找方向,雖然東西很多要K,問題就在於太多東西反而有時不知從何著手 @@!; w- R3 e) d9 V9 j

/ q' z$ P$ ]+ y, ]6 O2 u' c6 m+ s5 V5.再次感謝你所提供的意見: G6 P7 p+ y- @3 Z+ g
十月 05, 2007 8:09 上午  
" ?" E) ]5 N2 Q3 M; O. N
+ \( ^5 U% E! E3 Q3 m9 [7 Echiehlin@mail2000.com.tw 提到... 1 o0 e& C7 [9 O) t3 a3 |) f7 @
PCI Register 是 cf8 cfc Index ,Data% R# Q& W8 w; l% R* g6 g6 \
十月 25, 2007 11:17 上午  % g9 c0 |# E0 a6 z/ q7 ^

' n% n4 r' \2 @1 ^- \PT 提到... ) W2 m: q. Z; i' h
關於SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)
0 h! D7 }0 u. X! R/ y) {7 l$ ~# }mov eax, 80002750h: J$ g/ @0 C5 ~& _5 J) h
依照我的理解方式是
4 {& f  t9 P( _10000000^00000000^00100^011^01010000
( G5 V' d/ ]# A# E  G) w) z所以應該是80002350h
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

Archiver|手机版|小黑屋|计匠网

GMT+8, 2026-2-21 08:01 , Processed in 0.104648 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表