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

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

[复制链接]
发表于 2010-7-1 11:31:10 | 显示全部楼层 |阅读模式
一旦正確的頻率供給給system後, BIOS便依據既定的POST table(類似行程表)來做事. 首先,與chipset最為相關的便是 [chipset config stage]. 意即,在此階段BIOS必須對 chipset registers填入正確的值,俾使其正常運作. 一般而言,要config下列的 devices:. g3 \' e0 I, V- b  o4 X6 O
- NB(還記得前面有提過北橋內部約可分 4 blocks; "有些" blocks 需要 在此 program...)4 q  T$ H; [3 T0 Q! c2 E
- SB(即 PCI-ISA bridge)6 p6 J4 \' p! y
- ACPI registers* q3 ^0 c( j* D7 t/ s( U
- USB registers! G2 s3 @! i: O4 h) l
- SATA registers
: O/ Z7 `$ [. B4 l- PATA registers
8 S: N( }- c: ^" o( B0 t# j...
% L% ^" ]4 v, c8 F9 j2 S" [' o& f9 i" l& ?' ^: V* L7 b; z! B
* 在此所謂的 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之處 !!!( O4 P5 {  H3 M& S: }" @% q+ D# f
# P. z4 M. `# {9 D) o
* ACPI registers通常透過 IO 來存取& a+ s: I, x4 M# T- A* |& S1 u+ K4 l
Ex. // assume ACPI Base is 800h,要 access ACPI Reg55h7 a1 |) D: Q5 g% ^- H) x9 J( r: I
mov dx, 855h# _( q& A' k- n: l
in al, dx ; <- al = ACPI Reg55h's value
* J3 F* H) Z/ W) z1 R6 V
0 p* }! k# v1 H/ A* 上述所列的 devices多為 PCI device,也都有唯一的PFA(PCI Function Address,即 bus#,device#,func#),也因此,只要對 device 下 PCI configuration read/write便可以 config device registers.6 S+ F& \7 [0 y9 t9 E  p

/ K4 s$ T9 @) G  T2 v" X0 yEx. 假設: set SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)  X4 W, i+ l: {) R3 ]
=> 簡單的 assembly can be:
! r/ E; h$ b, `+ r" G( [0 \7 e
- C, [0 {" L$ u1 p  [5 ^mov eax, 80002750h6 Q% m4 Y& x  s( Y
mov dx, 0cf8h: D9 {1 C0 O& L3 F
out dx, eax
* ?' Q. h4 Q0 |3 i7 F5 A4 L* H" H' C
& X3 {/ V8 l" H+ pmov dx, 0cfeh
" U: s6 [) n" H0 V6 w5 ~3 p8 Min al, dx
& }3 w7 h' h9 A$ t0 A# l- Mor al, 00001000b
+ j0 T- d4 V4 P) D/ h8 b9 q/ q& V: i8 Iout dx, al
) @  g- L9 @! R# P- O5 q' \: G" s  z7 o
事實上每家BIOS都 maintain many "tables" 來說明: 哪一個 device 中的哪些 registers要填?值.相關的 access routine都已經寫好. Programmer只需更改表裡面的值即可 ^_^% X1 x8 l* |# T* g. z6 G
( v4 N! H/ R9 `2 C' ^% I6 H
*當有人要求改 register setting時,我們必須知道三件事:
# y9 k5 _: d% k( |1. why (為什麼要改?)
' B( ^9 I% a: o7 w* J2. what(改成何值?)) e: _6 G/ d. z) I4 k, N
3. when(什麼點改?)
6 d0 k' t! Q, s- ?: Y1 c. F% k3 s3 a1 D! g) y( v0 \
*對於 BIOS kernel與 OEM coding的人言,這部分會是較少碰觸的,因為,這些code會由 chipset porting的人負責撰寫及維護. # e7 A; S3 `0 w) A
張貼者: HARRISON HSIEH 位於 8:41 下午   
1 @& m# c3 x! v# S標籤: BIOS相關 ! }* F+ n3 S, e& c& b
6 意見:
: v: c/ O7 G" l. S8 L7 h 3 S) I2 i+ i/ i) t" M- c
tonyya 提到...
* O, t; |9 T4 K- [無意間發現你的部落格
  ^$ K5 U- }' ~  f- o3 E6 Y1 r1 [/ D
很多文章都覺得受益良多
9 S9 H" ~& g) R* ^- D8 D2 E/ w1 ]
: W/ x2 v  z* Q6 ~$ j我也剛接觸這門領域不久
: t$ M$ }# f" S6 ?0 ~+ T0 l& @! \0 g2 i  U4 `
很多東西都似懂非懂8 q7 D, p4 F, T
8 u' ?6 @. @7 N( u, r
不知對於一個新人而言
9 W/ a5 P4 a2 `4 t! x  W1 m( g( A) G) x  k! @3 |* g
有沒有什麼好的訓練方式' s3 K# u1 w6 K
$ x1 Z' p4 s8 W% L$ H/ ?  b
可以及早進入狀況7 h# y) Z) Q. ^6 R) T- q
十月 03, 2007 5:53 上午  ( I8 ^) W) a! M+ p+ C6 Z

3 F$ M# @9 N& O! }Harrison 提到... # k  C+ o3 f7 T
現在的BIOS有分成Legacy BIOS(組合語言)與UEFI BIOS(C語言),但是這兩種BIOS對於一個剛接觸的新手來說就只是Win98跟WinXp使用方式的差別而已,介面不同,但是要做的事情幾乎一樣。/ ]2 b# b9 X4 E3 ~9 W3 x, m! _$ B: v
0 v/ P! ^, n5 a9 }0 K  `
所以我的建議是多去了解這些工具的用法(組合語言指令/C語言用法)還有多看看Intel IA32 Architecture guide vol1~3(目前最新版是IA64),因為了解系統架構才是最基本的。
! v% S6 n! c+ S. b, Y- X/ [- i; K6 j4 N( E$ x( {' q
如果要快速上手的話,你就先必須知道"設定方式",例如: 如何填CMOS/PCI Register(CF8/CF9),還有如何調整PIRQ/GPIO/ASL Code...等,如何透過SMbus/LPC存取? 何謂KBC/EC? 又要如何把OpROM 載入到記憶體,然後把控制權交給OpROM,執行後又把控制權還給BIOS/CPU Microcode如何更新?...etc. 這些都是基本OEM BIOS會做的事情,至於BIOS核心就必須很了解IA32架構你才有辦法去做。3 [: _/ Y# h+ `
十月 04, 2007 5:39 下午  
4 r$ ~% X: |1 o$ k4 T
+ J3 d' N( u" d( `3 ]5 w' L& ttonyya 提到... " V6 s+ ~( f5 \) t: `
首先感謝你的回覆
1 ^) D% f6 n( v' E! w; r5 q
2 s; C! E( H( u1 f$ }3 A. `* M1.目前接觸的是Legacy BIOS(組合語言)1 l" Q4 q- l: s4 `7 t. o) E

4 K- T4 A$ o7 s+ E- q% C7 H6 f2.IA32的系統架構有在看,目前也在積極補強一些相關的spec知識,不過還是要有實際做過才有感覺,對我而言如果只是光看的話無法深刻的體會) U% I& Z- ^% J' E

5 t8 R  @! F/ c1 v6 \: [2 v3.關於你說的設定方式,有的有碰過,像是PCI,ASL code,SMBUS/LPC, CPU Microcode更新,我會去補強你所提到而我沒碰到的部份
3 U% [, J/ z1 \2 j7 ^8 c3 |: Z# ]1 l/ ~
4.進入這行的感想是對於一些硬體的知識比以前來的了解,辛苦的是要一直摸索找方向,雖然東西很多要K,問題就在於太多東西反而有時不知從何著手 @@!2 S' E2 g5 Y( ~2 L! f

1 d: ~& ~4 S7 U, z5.再次感謝你所提供的意見
& O- R1 v" o) b* r2 |3 y/ f十月 05, 2007 8:09 上午  
+ ]! j5 ]6 i8 X: L' i 9 R" q' @4 I, t2 R0 Y1 h
chiehlin@mail2000.com.tw 提到...
; y4 P# N$ V1 o. N1 W5 S6 |7 EPCI Register 是 cf8 cfc Index ,Data
' l8 `, L7 N7 G& [# t. L) S4 C十月 25, 2007 11:17 上午  $ e. B4 A: M1 d% m! _+ s
6 y& @! t* C; `; `
PT 提到... 5 U- V. w) h& T3 u! ]1 C
關於SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)* g6 Y# G3 v0 x; z  F2 @
mov eax, 80002750h& |/ P- z$ j6 r. T  t. b+ d4 T
依照我的理解方式是9 v0 w! ~1 B7 |- s4 f4 i3 [
10000000^00000000^00100^011^01010000. n* Q2 s1 [) ~3 e9 t$ W  M
所以應該是80002350h
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

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

GMT+8, 2026-1-18 17:45 , Processed in 0.088158 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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