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

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

[复制链接]
发表于 2010-7-1 11:31:10 | 显示全部楼层 |阅读模式
一旦正確的頻率供給給system後, BIOS便依據既定的POST table(類似行程表)來做事. 首先,與chipset最為相關的便是 [chipset config stage]. 意即,在此階段BIOS必須對 chipset registers填入正確的值,俾使其正常運作. 一般而言,要config下列的 devices:
1 I, h: m6 n' Y+ A% |  s& B% i- NB(還記得前面有提過北橋內部約可分 4 blocks; "有些" blocks 需要 在此 program...)
( w" z; {5 M1 u: W" l- SB(即 PCI-ISA bridge)7 b; K3 k) `* K; R2 X& E3 z! Z
- ACPI registers7 m7 u+ D2 I4 n8 G4 [' K
- USB registers
. g8 J3 C1 a. G: V  z( `+ i- SATA registers/ C& s8 q, m) C3 S  f
- PATA registers. |8 w* w- `# K/ Q; }
...7 c' ^0 x" ^/ L0 X: y' s4 z

5 g" b; ?+ G  r- ]1 _* 在此所謂的 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之處 !!!
3 E$ B1 l) l" R
0 I1 [" H% o8 H0 A0 T7 S3 E* ACPI registers通常透過 IO 來存取
; c6 v5 |/ W8 c' oEx. // assume ACPI Base is 800h,要 access ACPI Reg55h
+ A% J" D" N& {5 Q$ e$ @0 Xmov dx, 855h9 ?" D4 ~0 l4 `% f. F* K( n
in al, dx ; <- al = ACPI Reg55h's value/ |3 j& q; |2 D: Q. g) `

2 V3 c0 L" |6 I  g+ `2 `. ^* 上述所列的 devices多為 PCI device,也都有唯一的PFA(PCI Function Address,即 bus#,device#,func#),也因此,只要對 device 下 PCI configuration read/write便可以 config device registers.
" P9 ?" [0 T; s* w, ?, v0 J1 D3 L: G
Ex. 假設: set SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)
9 |4 i, }5 I* B3 E% D; ^6 Y  @* e=> 簡單的 assembly can be:" u3 }$ a- x$ q+ Y" `' T) _: u
, B, {; R0 z! Q# M: i$ J, n
mov eax, 80002750h
+ J+ [9 O0 T+ |4 a6 ?- tmov dx, 0cf8h
3 }4 y% I. X: K4 l- n* c: Z' ^out dx, eax* y, _3 e5 x- W

& k$ u+ ^! h' K5 ~6 ]# g$ E3 Kmov dx, 0cfeh% [' I" {4 m4 L( W# x6 i% c
in al, dx7 V6 Q' S0 [6 D- b- N6 p) Y) x9 A" q
or al, 00001000b
4 ?6 x; |3 m" J" q  t2 Y$ ?* hout dx, al
2 Y) W) c: F) c4 f1 Y" p2 A( j4 ]/ X9 O% _+ G- \6 D) i
事實上每家BIOS都 maintain many "tables" 來說明: 哪一個 device 中的哪些 registers要填?值.相關的 access routine都已經寫好. Programmer只需更改表裡面的值即可 ^_^
1 s2 v8 p. g( ^( E- D$ Q, o+ G, \4 L. L7 f
*當有人要求改 register setting時,我們必須知道三件事:
6 v5 ]' B! w3 {4 r( q: u: W1. why (為什麼要改?)+ @" O2 l2 g: K. u& T0 e
2. what(改成何值?)+ P9 X& F: Q  c0 @5 q. J
3. when(什麼點改?)' z2 P; ]1 Q- U* Q
: u' V5 _% c! e, Z
*對於 BIOS kernel與 OEM coding的人言,這部分會是較少碰觸的,因為,這些code會由 chipset porting的人負責撰寫及維護.
  g8 R. ]5 m! @) [8 m2 T張貼者: HARRISON HSIEH 位於 8:41 下午   
' ^- H- y5 z2 r8 L+ n8 |* Q( i標籤: BIOS相關 - R( }: @' n- }! d+ R3 e
6 意見:
. i) ?- O' N" k/ Y5 [ 8 y2 X- o2 o, V% ^
tonyya 提到...
7 C5 @  b5 J' f- `無意間發現你的部落格8 q' j1 l+ r+ s& C9 c: F2 U2 [

$ L$ d* H1 z5 a. I" O- K' ]1 Z很多文章都覺得受益良多
' K  j0 r8 \6 H; }5 b; [$ a  W) j# ]
我也剛接觸這門領域不久6 {! j4 K1 `) T: W; u# L2 Q

; Z1 c( p# l$ w$ D/ Z1 G2 a很多東西都似懂非懂# W6 A4 Z; r  G8 u8 t: _) m

5 z: [1 C) A, F7 v1 [% f1 S. k1 U不知對於一個新人而言
7 D4 _9 f; F% x* }5 D5 H4 Y" @) s% F' E; h6 a
有沒有什麼好的訓練方式2 s+ E& G/ S) u! s% g0 R& q; t

  f7 f5 D8 u; `$ V可以及早進入狀況
6 {/ ?+ |  C9 S, S; b% I, B/ l十月 03, 2007 5:53 上午  
4 C$ E9 [6 m$ F1 o+ p; i2 f" {0 }$ W
8 p; k4 M" F+ R- p1 n; J! R" ?, n8 fHarrison 提到...
- ~" ^) Q  a9 ^3 c% P現在的BIOS有分成Legacy BIOS(組合語言)與UEFI BIOS(C語言),但是這兩種BIOS對於一個剛接觸的新手來說就只是Win98跟WinXp使用方式的差別而已,介面不同,但是要做的事情幾乎一樣。9 v2 q7 v5 U+ I  D
% C! I2 W* T7 Y4 f
所以我的建議是多去了解這些工具的用法(組合語言指令/C語言用法)還有多看看Intel IA32 Architecture guide vol1~3(目前最新版是IA64),因為了解系統架構才是最基本的。" P4 F0 O! w0 y) R
! ]. K, S- e. @& q/ R8 ^& \. e' S" n
如果要快速上手的話,你就先必須知道"設定方式",例如: 如何填CMOS/PCI Register(CF8/CF9),還有如何調整PIRQ/GPIO/ASL Code...等,如何透過SMbus/LPC存取? 何謂KBC/EC? 又要如何把OpROM 載入到記憶體,然後把控制權交給OpROM,執行後又把控制權還給BIOS/CPU Microcode如何更新?...etc. 這些都是基本OEM BIOS會做的事情,至於BIOS核心就必須很了解IA32架構你才有辦法去做。
, j' g( A* @" y/ s) W. C4 \6 p十月 04, 2007 5:39 下午  
0 F3 {( U+ d5 g. ~# x
2 `$ m8 Y) O9 c, y5 f0 Ftonyya 提到... 1 H- ]( |; {1 y& W+ h
首先感謝你的回覆3 Y; z0 @% U& l% q
: ]( n, [! w/ ^, c3 X( G3 G
1.目前接觸的是Legacy BIOS(組合語言)
2 i  q8 U. }/ v# d3 W: r/ s% h0 u% T1 g2 }+ E/ x
2.IA32的系統架構有在看,目前也在積極補強一些相關的spec知識,不過還是要有實際做過才有感覺,對我而言如果只是光看的話無法深刻的體會
6 Q/ f) L' _- r/ F6 Y6 G: [
5 N9 L' ]- W7 A$ ]) @; A3.關於你說的設定方式,有的有碰過,像是PCI,ASL code,SMBUS/LPC, CPU Microcode更新,我會去補強你所提到而我沒碰到的部份
6 n6 D# b" `$ h! h
- A0 w0 _3 I. o, X! ~4.進入這行的感想是對於一些硬體的知識比以前來的了解,辛苦的是要一直摸索找方向,雖然東西很多要K,問題就在於太多東西反而有時不知從何著手 @@!
1 H; C/ _1 B. P7 c4 y1 U. t6 c( p% Q4 ~' ?3 k. s
5.再次感謝你所提供的意見
; x" c0 K4 \5 n, l% w& V& e十月 05, 2007 8:09 上午  ( i% u0 i7 T0 L  F
9 _% e. B( H& B0 G5 }
chiehlin@mail2000.com.tw 提到... , A8 S1 }& G+ I
PCI Register 是 cf8 cfc Index ,Data
' G: ]7 |$ F% _: p9 F4 A十月 25, 2007 11:17 上午  % I$ Y5 W% x' p" V3 X+ i
0 V6 y8 f- u. M& r6 c( X
PT 提到... ( n+ |4 i+ Z. o; Z+ ^: B' i
關於SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3): K9 W7 r# G) u. l& ?' C
mov eax, 80002750h
. h2 K. m* j' D. b( N: I依照我的理解方式是/ O! s' u+ T1 y1 w
10000000^00000000^00100^011^010100000 T- i  v; O6 R, [: i: W
所以應該是80002350h
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

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

GMT+8, 2026-6-4 09:01 , Processed in 0.206010 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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