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

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

[复制链接]
发表于 2010-7-1 11:31:10 | 显示全部楼层 |阅读模式
一旦正確的頻率供給給system後, BIOS便依據既定的POST table(類似行程表)來做事. 首先,與chipset最為相關的便是 [chipset config stage]. 意即,在此階段BIOS必須對 chipset registers填入正確的值,俾使其正常運作. 一般而言,要config下列的 devices:
2 C" R' ]/ F5 {' c' c- Z& M- NB(還記得前面有提過北橋內部約可分 4 blocks; "有些" blocks 需要 在此 program...)/ K' e$ F5 h7 `9 g: q2 O# o0 ~
- SB(即 PCI-ISA bridge)
7 A9 C3 H8 m1 S- ACPI registers+ p! X) a, {7 x2 U9 U% f3 _2 [
- USB registers8 X# @* X/ s* `% n3 `# J
- SATA registers! i8 C4 E! U- n& `6 K7 t8 a+ H
- PATA registers
$ o( I" H7 j6 Q, R  z0 [...
9 J5 z( _$ i" w& a& K; p' ?
) `, P  O5 B& b7 @# t8 s! H# R* 在此所謂的 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之處 !!!
7 r& a' `- ~/ G1 y6 T: u$ V
2 H; V; e: ^# s" i; I* ACPI registers通常透過 IO 來存取. B5 L, c" P$ W$ T1 B" D" C6 J& K
Ex. // assume ACPI Base is 800h,要 access ACPI Reg55h) {- W8 v/ q7 o4 E% i
mov dx, 855h% o. c  }8 b: N  z. ]  T
in al, dx ; <- al = ACPI Reg55h's value
* d: a1 z' E! @! T& r/ c& F' L# \' K1 b  a- |" K* Z
* 上述所列的 devices多為 PCI device,也都有唯一的PFA(PCI Function Address,即 bus#,device#,func#),也因此,只要對 device 下 PCI configuration read/write便可以 config device registers.
7 I! M' o  J$ U. g6 B! }6 Z5 _
* j/ D5 d1 m! w9 ?Ex. 假設: set SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)
6 Z( e, W  y* L4 Q8 _2 Z  f=> 簡單的 assembly can be:$ K: R* @7 o# d. Y/ N0 ?

2 G! S- B; N; S+ F6 u- i1 y; k1 Kmov eax, 80002750h2 E- L/ w  e$ ~7 v2 K
mov dx, 0cf8h; w, K+ h# z! o# s$ P
out dx, eax
1 f: |& E9 @' d" @: J
( e) G. c7 P, H# V) j' F  ]mov dx, 0cfeh8 D1 r& o' O/ B' }
in al, dx
5 n( r5 |  H9 m7 u% M( Z8 For al, 00001000b
( S6 ]' p' X  b6 y+ _" G& vout dx, al - p; F. {1 @7 J. R

' V% U/ S; Q2 j3 U9 M事實上每家BIOS都 maintain many "tables" 來說明: 哪一個 device 中的哪些 registers要填?值.相關的 access routine都已經寫好. Programmer只需更改表裡面的值即可 ^_^
6 u4 Q8 Y; Y6 Y9 ?4 D
$ A5 w, A$ I* c! i8 c% T: Y*當有人要求改 register setting時,我們必須知道三件事:! j1 h& w0 X1 N9 ~* q6 Y2 `
1. why (為什麼要改?)$ X; w' Q' P. K' e
2. what(改成何值?)
7 W; a/ M: |4 G6 P1 K" @7 P3. when(什麼點改?)0 Z$ J  j7 N; K: ~9 S

& N5 {$ g7 b1 C' r4 s. E*對於 BIOS kernel與 OEM coding的人言,這部分會是較少碰觸的,因為,這些code會由 chipset porting的人負責撰寫及維護.
2 X$ l1 Z+ }- o張貼者: HARRISON HSIEH 位於 8:41 下午   % T: j; k/ S2 H$ e+ O6 g' d% X
標籤: BIOS相關
6 ]$ D0 J6 J. ^2 E+ }0 D3 s2 {' M4 L6 意見: / l9 `/ G+ Z3 \
3 h8 v3 u7 z! p2 S2 ]/ W* T
tonyya 提到...   X9 I% F: M8 a2 C; Y' f- S' ^
無意間發現你的部落格5 C- I5 s7 z5 C6 W/ H
1 x3 W/ p* a: N# A
很多文章都覺得受益良多- W2 N0 [, A! ^+ V

; d! V3 r2 j: X" b( h* t* ]我也剛接觸這門領域不久. |4 \+ ?: y" q1 }1 V

- b6 H9 l5 z& K- q很多東西都似懂非懂: J, h( l: v" B2 r  \0 f

. W9 ^/ y8 Q$ N, a4 ?* f' W  R3 {不知對於一個新人而言
% x! i! ~2 b1 D2 z- A$ m, ~: c! N) |  n4 @! z, l, s
有沒有什麼好的訓練方式9 P" S+ P! c- E$ B* e$ y9 h

' s1 f4 B; E: F2 A可以及早進入狀況
) \9 U2 }. ~* {# g3 z十月 03, 2007 5:53 上午  
; F; G3 c+ a9 V1 n" S2 V1 D6 Z4 Y + t6 P& ?$ k5 k7 v( T
Harrison 提到...
( a8 a7 \+ S( ^  ^; C5 N3 b現在的BIOS有分成Legacy BIOS(組合語言)與UEFI BIOS(C語言),但是這兩種BIOS對於一個剛接觸的新手來說就只是Win98跟WinXp使用方式的差別而已,介面不同,但是要做的事情幾乎一樣。+ q! S3 `: f+ i6 j

, S( V% ?9 X  U! z& d4 G所以我的建議是多去了解這些工具的用法(組合語言指令/C語言用法)還有多看看Intel IA32 Architecture guide vol1~3(目前最新版是IA64),因為了解系統架構才是最基本的。% O: O' \- N  W' Z/ E

- d/ I2 I. u( N8 y/ C) z如果要快速上手的話,你就先必須知道"設定方式",例如: 如何填CMOS/PCI Register(CF8/CF9),還有如何調整PIRQ/GPIO/ASL Code...等,如何透過SMbus/LPC存取? 何謂KBC/EC? 又要如何把OpROM 載入到記憶體,然後把控制權交給OpROM,執行後又把控制權還給BIOS/CPU Microcode如何更新?...etc. 這些都是基本OEM BIOS會做的事情,至於BIOS核心就必須很了解IA32架構你才有辦法去做。
( r6 o' [# t8 Q) e/ c9 j十月 04, 2007 5:39 下午  3 g4 q4 |- p( \( d+ ]$ I% [! i* o4 b2 a

) F8 J% F# k6 G: {( P7 A) W. t- Stonyya 提到... 8 c, N$ ]6 A: [* B; F) ~
首先感謝你的回覆
9 f1 c; y' {- O4 b" v1 O8 w. G& S( [0 I6 l; s1 ~' l3 T
1.目前接觸的是Legacy BIOS(組合語言)
- t# k' C4 p4 D0 P( t
  e2 {8 q. M9 Q! u) V2 y1 K% x2.IA32的系統架構有在看,目前也在積極補強一些相關的spec知識,不過還是要有實際做過才有感覺,對我而言如果只是光看的話無法深刻的體會& f( ^4 @8 F+ ?5 S; w* ]5 ?
1 `! g% T# |8 U% _/ E
3.關於你說的設定方式,有的有碰過,像是PCI,ASL code,SMBUS/LPC, CPU Microcode更新,我會去補強你所提到而我沒碰到的部份3 `# n0 [; Z' i$ H

" |$ C' r( q( Y2 `9 N- M4.進入這行的感想是對於一些硬體的知識比以前來的了解,辛苦的是要一直摸索找方向,雖然東西很多要K,問題就在於太多東西反而有時不知從何著手 @@!4 Y  s/ P. a7 [. K5 h: V9 o' ]6 X/ T
* m# w0 g) S" h
5.再次感謝你所提供的意見, R' |. U4 i% G  Z# {) l" }
十月 05, 2007 8:09 上午  7 g5 b  M3 T! l% D
" ^, J- e5 y% P& o+ E1 R
chiehlin@mail2000.com.tw 提到... " R* Y, {! D) K9 z1 h3 X6 p
PCI Register 是 cf8 cfc Index ,Data
# f- b* Z7 E4 t十月 25, 2007 11:17 上午  
$ p8 n5 Q, b- Z# b- O* l; M& t- c" V
8 N  o1 ?1 ~/ v6 w5 {4 ~PT 提到...
6 P' D4 i$ [5 Z& Z關於SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)0 e' N( e, y& Z; z
mov eax, 80002750h
7 _* c/ m; C6 h依照我的理解方式是2 y. f8 C% k9 \) ?0 \
10000000^00000000^00100^011^01010000
4 g- X6 }- k& F) Z" o" Q所以應該是80002350h
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

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

GMT+8, 2024-5-15 18:49 , Processed in 0.022274 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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