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

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

[复制链接]
发表于 2010-7-1 11:31:10 | 显示全部楼层 |阅读模式
一旦正確的頻率供給給system後, BIOS便依據既定的POST table(類似行程表)來做事. 首先,與chipset最為相關的便是 [chipset config stage]. 意即,在此階段BIOS必須對 chipset registers填入正確的值,俾使其正常運作. 一般而言,要config下列的 devices:- w6 b  W2 Q  u
- NB(還記得前面有提過北橋內部約可分 4 blocks; "有些" blocks 需要 在此 program...)5 R" c# A7 _. C
- SB(即 PCI-ISA bridge)
, y% {; c' V! s) k0 B- ACPI registers/ P: g: G. x; I# P* d" `2 l
- USB registers
* ~0 P# Z! `* k% g  h# P6 e- SATA registers$ A, |+ j& p4 o/ i8 Z1 Y
- PATA registers
1 `7 y7 o* j6 g0 d( @! p( V...
, y: Z# Y" K" P& B" a+ ~/ T+ k8 J! |# q* a2 F1 O
* 在此所謂的 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之處 !!!
$ |- Z+ U8 I3 x' ]: J( O2 a9 [+ y/ X) U% A$ S7 m
* ACPI registers通常透過 IO 來存取8 Z$ M& F8 B, s
Ex. // assume ACPI Base is 800h,要 access ACPI Reg55h3 S" |8 L) w8 J
mov dx, 855h
& W. @' o$ x. h( Q" a: A. min al, dx ; <- al = ACPI Reg55h's value
: y; w  U( t: A  |( n/ T4 y7 X7 G; v1 l% |. R) a6 w) M
* 上述所列的 devices多為 PCI device,也都有唯一的PFA(PCI Function Address,即 bus#,device#,func#),也因此,只要對 device 下 PCI configuration read/write便可以 config device registers.
5 H  w1 `: S, A/ W
: O+ b8 h9 O5 S6 M+ o# x! MEx. 假設: set SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)4 l. y$ _# h( E# w, I/ k. L
=> 簡單的 assembly can be:
' h1 B1 G- j1 e% X' @
9 x! E! ]: u1 c2 P# i( nmov eax, 80002750h
& {: M- g% J  C! f0 W1 q. k* tmov dx, 0cf8h
2 Z' T& E4 ?2 I1 ]; o5 M) a! ]out dx, eax
* R4 u# b' v8 L) h2 S, U1 s1 l- l/ T) f' P
mov dx, 0cfeh
$ e9 R% I  U7 J: c+ K4 u& kin al, dx
. f1 u1 X, E  T! V' t4 w& |/ n+ R) Bor al, 00001000b2 n! t- w) k1 `7 T
out dx, al . C6 H( j( d8 m, L
) N3 S) d; ?4 K
事實上每家BIOS都 maintain many "tables" 來說明: 哪一個 device 中的哪些 registers要填?值.相關的 access routine都已經寫好. Programmer只需更改表裡面的值即可 ^_^3 J( i8 P: ~; U3 o& S9 W
: X+ N: j9 s: Z+ ?) g
*當有人要求改 register setting時,我們必須知道三件事:
& W* O' k# _$ @: H) @# p( g1. why (為什麼要改?)5 Q" f4 w% c3 Y
2. what(改成何值?)8 K: @) [/ ]+ i6 C, g! i& x* b
3. when(什麼點改?)
: `4 z' S5 r1 i+ A2 [+ m3 V# X9 J+ ], T6 `; G
*對於 BIOS kernel與 OEM coding的人言,這部分會是較少碰觸的,因為,這些code會由 chipset porting的人負責撰寫及維護. 9 _5 ]: ^+ \0 M. o
張貼者: HARRISON HSIEH 位於 8:41 下午     V, |1 ^6 A3 x2 Z+ g) I& C: z
標籤: BIOS相關 ( q2 X, K9 s8 A7 s( B
6 意見: ; Y# e7 t9 X; ^

1 x. H+ \1 J/ ~! Atonyya 提到...
3 s8 X4 T9 p+ A; L; S5 r無意間發現你的部落格
( c; l! l0 s2 x- ]( y2 j3 H! X9 k  a
很多文章都覺得受益良多, W5 }; q, g" c, C% D' J1 {$ r, a
& N: Z4 f9 c4 Y; u* q& c
我也剛接觸這門領域不久
- o, ~' l6 X# ]" r% N! B" o
' B1 y5 d  q' D' J- g( ~0 f很多東西都似懂非懂9 N$ F$ z! {) z  ~3 \5 n+ Y- ]

; o+ R1 ^5 ]% S% J' K不知對於一個新人而言. @( }! H2 g! l/ A$ W' D% n. \

+ U; a; V  X  D- D有沒有什麼好的訓練方式
4 T# Q- k0 C! r2 s3 `" o9 m- m  s' ^' U( q8 i) t7 Z+ R9 F" a& ]& ^
可以及早進入狀況
' I( I5 j6 x! X# [十月 03, 2007 5:53 上午  ! p7 B0 k) @2 ?6 {( F. X

! e! @2 G, Z: M: L2 S' E* dHarrison 提到... 4 D% V* o) d2 L& ~- ?
現在的BIOS有分成Legacy BIOS(組合語言)與UEFI BIOS(C語言),但是這兩種BIOS對於一個剛接觸的新手來說就只是Win98跟WinXp使用方式的差別而已,介面不同,但是要做的事情幾乎一樣。
2 Z* d9 q2 x* {6 d) [* Y- }0 t" m; h2 l- d- Q: J9 H+ c* `4 B
所以我的建議是多去了解這些工具的用法(組合語言指令/C語言用法)還有多看看Intel IA32 Architecture guide vol1~3(目前最新版是IA64),因為了解系統架構才是最基本的。
' ?1 A6 ]' A- o0 ]( u( y: Z3 H) K; }) R/ j% e" M. y1 `
如果要快速上手的話,你就先必須知道"設定方式",例如: 如何填CMOS/PCI Register(CF8/CF9),還有如何調整PIRQ/GPIO/ASL Code...等,如何透過SMbus/LPC存取? 何謂KBC/EC? 又要如何把OpROM 載入到記憶體,然後把控制權交給OpROM,執行後又把控制權還給BIOS/CPU Microcode如何更新?...etc. 這些都是基本OEM BIOS會做的事情,至於BIOS核心就必須很了解IA32架構你才有辦法去做。, Q# O" `( P! X4 T% _, C, p, {/ o" v( B  Q2 o
十月 04, 2007 5:39 下午  
0 ?, N+ x8 T4 J4 O; o! ^
  Y2 G# q* w; i9 A1 \# {& m7 e. O3 xtonyya 提到... . y0 B! |* l. o1 f0 ^
首先感謝你的回覆
3 N5 x* R) ]* x0 c. f" C& F, S5 J- R% h$ Y
1.目前接觸的是Legacy BIOS(組合語言)5 i; @: h! r/ R. }8 Q7 [! B  N
7 L" A0 J' d1 |1 I6 ^
2.IA32的系統架構有在看,目前也在積極補強一些相關的spec知識,不過還是要有實際做過才有感覺,對我而言如果只是光看的話無法深刻的體會
$ ^1 y2 h* v2 [$ e( p  g) G9 v& B$ g0 N0 }- t1 t( B* e# I
3.關於你說的設定方式,有的有碰過,像是PCI,ASL code,SMBUS/LPC, CPU Microcode更新,我會去補強你所提到而我沒碰到的部份
# l" M# e4 c% @* y5 k9 i
; t  U2 {# J8 P4 }  {. M4.進入這行的感想是對於一些硬體的知識比以前來的了解,辛苦的是要一直摸索找方向,雖然東西很多要K,問題就在於太多東西反而有時不知從何著手 @@!4 M* p* n# n1 h
1 q" t) r  G" `
5.再次感謝你所提供的意見
$ ^! e- P: D0 W( \; Z2 i/ e十月 05, 2007 8:09 上午  : e3 @7 o; f4 n5 u, o6 o3 I4 u

, U5 E/ `( y* J( lchiehlin@mail2000.com.tw 提到...   d3 y! T; _; y$ t; u$ z2 ]% C
PCI Register 是 cf8 cfc Index ,Data: F6 Q- T2 F: B
十月 25, 2007 11:17 上午  
& L0 U& m. M5 \" I8 v
% P( K5 A8 a, a4 }- ^3 J! bPT 提到...
" n. ^5 S2 X9 w& ?) Y關於SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)5 f* b% x& d; Y3 W7 R0 e
mov eax, 80002750h" {5 N7 A% W+ \) ~2 j: J5 E
依照我的理解方式是9 r. E8 r0 P2 r! ?
10000000^00000000^00100^011^01010000
& O* l2 P2 T1 A所以應該是80002350h
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

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

GMT+8, 2026-5-16 06:54 , Processed in 0.037784 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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