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

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

[复制链接]
发表于 2010-7-1 11:31:10 | 显示全部楼层 |阅读模式
一旦正確的頻率供給給system後, BIOS便依據既定的POST table(類似行程表)來做事. 首先,與chipset最為相關的便是 [chipset config stage]. 意即,在此階段BIOS必須對 chipset registers填入正確的值,俾使其正常運作. 一般而言,要config下列的 devices:
( ]/ [* r, Q& D* B- NB(還記得前面有提過北橋內部約可分 4 blocks; "有些" blocks 需要 在此 program...)
! D+ {" D" H7 L5 x! @- SB(即 PCI-ISA bridge)
5 y/ X7 r' Y% Q! a) P- G- ACPI registers6 Q5 u' [" M' d' B
- USB registers
, m6 n; {/ v7 v: e" @- SATA registers8 d; W  d: `3 z4 Z* t+ |" \5 l
- PATA registers, |7 o6 T, \+ i- C3 c+ Z+ G/ Y* f6 d
...
8 S0 a; d3 g! e+ ?4 F
) @' L5 b5 c$ G  @& v/ a# [4 F* 在此所謂的 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之處 !!!" k4 o  L7 W! v, \! q& }: w2 h

$ n0 s8 ]2 w! a0 J* ACPI registers通常透過 IO 來存取+ Y3 f! h8 _- l- c% ~" X) Y! ?
Ex. // assume ACPI Base is 800h,要 access ACPI Reg55h5 d/ J# j9 a6 t$ W  I0 Z" S
mov dx, 855h
' H: P0 g6 W5 I/ hin al, dx ; <- al = ACPI Reg55h's value' w' x& s  A5 f5 R" C
3 _" @: S2 w& A  Q" j3 P
* 上述所列的 devices多為 PCI device,也都有唯一的PFA(PCI Function Address,即 bus#,device#,func#),也因此,只要對 device 下 PCI configuration read/write便可以 config device registers.1 W) {0 h  |4 k4 |4 x2 G

# J: V4 q. `' e) o# y2 C6 tEx. 假設: set SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)
9 P( ]! R6 i; f: F=> 簡單的 assembly can be:
1 Y' @- i9 v! y8 c: H
+ C' k* I- C" w: D2 M# Jmov eax, 80002750h
+ O/ r( h9 b) }* x0 Y5 ^. bmov dx, 0cf8h" h: v( V) T  u$ s$ ?; y
out dx, eax
. s/ \/ k3 k& r8 h  F$ ]
$ m4 s" Z& W2 A# b( xmov dx, 0cfeh
: f3 e. w/ T7 @8 J6 ~# y4 Gin al, dx6 {; m- ^% n, W' {. k2 S' O
or al, 00001000b
4 A3 j( }$ v2 ?, o- S0 e" M* Bout dx, al 4 f2 {$ ?; C6 N' [) g2 q. h
" k6 O9 g  _3 k: ~
事實上每家BIOS都 maintain many "tables" 來說明: 哪一個 device 中的哪些 registers要填?值.相關的 access routine都已經寫好. Programmer只需更改表裡面的值即可 ^_^
( A& t( t7 y2 \8 I
4 y$ O+ f, F7 V+ h0 {; ~8 \+ y*當有人要求改 register setting時,我們必須知道三件事:  P0 ?+ v% L- v; W
1. why (為什麼要改?)
, k6 T5 s8 Q, D) `3 D# R, r2 ?2. what(改成何值?)
+ G1 G+ P: X0 N9 Y9 X3. when(什麼點改?)
' ~, p' V& m. P& K% t8 m/ c. n. y% P
*對於 BIOS kernel與 OEM coding的人言,這部分會是較少碰觸的,因為,這些code會由 chipset porting的人負責撰寫及維護.
' I' t0 O/ C/ `: j  F" [張貼者: HARRISON HSIEH 位於 8:41 下午   # z# ?* u' H1 x. A- o- C
標籤: BIOS相關
" d7 `& y* q7 ]* c  {6 意見: 2 o9 w: M8 d0 j1 ^; l! t
5 S' M$ p* Y( U% P
tonyya 提到... 8 d( H2 r3 Q+ q/ a& c2 _
無意間發現你的部落格8 d5 v" ?2 _$ s; [0 l( T: d; b

5 f4 @- Q( M; b/ v3 a& o很多文章都覺得受益良多: e- F2 q$ ~% L$ f0 z% x9 n) I$ M
9 X0 S- m/ m- r- e- Z5 R
我也剛接觸這門領域不久
$ o2 H% ]+ C2 w  D0 i/ y7 e- k: \) Q. f" N" [
很多東西都似懂非懂1 e6 B# B$ K& [+ X$ X/ `- D

3 ]% d  G- l% {不知對於一個新人而言
; l" A& C" ?, }/ w# D+ \
) T/ g# [* v; J/ ?5 g) _有沒有什麼好的訓練方式! N4 p4 {1 t' S+ b/ b! M! z$ P
* w- Z* ?# p6 a" Z7 b" P/ b
可以及早進入狀況8 H5 t: \% K' S* P2 I
十月 03, 2007 5:53 上午  5 L5 d7 @; h: X$ B) u5 u9 M
/ d$ I- f& Q, x# Y: \4 b
Harrison 提到...
6 ]1 |% j: K+ o9 L2 n現在的BIOS有分成Legacy BIOS(組合語言)與UEFI BIOS(C語言),但是這兩種BIOS對於一個剛接觸的新手來說就只是Win98跟WinXp使用方式的差別而已,介面不同,但是要做的事情幾乎一樣。
9 k2 P3 S4 F) X7 O0 ?& v+ K  U2 H7 J  J- m/ l" M) P
所以我的建議是多去了解這些工具的用法(組合語言指令/C語言用法)還有多看看Intel IA32 Architecture guide vol1~3(目前最新版是IA64),因為了解系統架構才是最基本的。
, @, j1 `4 X% c$ e- Q7 d, c+ V3 R% t# H4 p' T
如果要快速上手的話,你就先必須知道"設定方式",例如: 如何填CMOS/PCI Register(CF8/CF9),還有如何調整PIRQ/GPIO/ASL Code...等,如何透過SMbus/LPC存取? 何謂KBC/EC? 又要如何把OpROM 載入到記憶體,然後把控制權交給OpROM,執行後又把控制權還給BIOS/CPU Microcode如何更新?...etc. 這些都是基本OEM BIOS會做的事情,至於BIOS核心就必須很了解IA32架構你才有辦法去做。2 @8 j; g& ?0 r2 z1 w
十月 04, 2007 5:39 下午  ) V/ ]7 q+ R; E8 F. K

7 |. n) y1 `1 n5 f  O4 @* j& y; gtonyya 提到...
" ^  Y4 _- a, e# O+ t) j: y首先感謝你的回覆
: A! [) @9 x4 W9 [( R  _  l- P% `7 m% Q2 W0 ]5 ]
1.目前接觸的是Legacy BIOS(組合語言)& G9 h4 Q; k' k% w1 D9 }- T; _9 h4 Z

7 t  q6 x* w! o6 x% k; C# _2.IA32的系統架構有在看,目前也在積極補強一些相關的spec知識,不過還是要有實際做過才有感覺,對我而言如果只是光看的話無法深刻的體會% A! l" y- C1 i! a# n; |. |) C

% k( z. c' M4 a9 f0 o" ]3.關於你說的設定方式,有的有碰過,像是PCI,ASL code,SMBUS/LPC, CPU Microcode更新,我會去補強你所提到而我沒碰到的部份4 T) R* X; o# f" [) c) r" H

: g: [2 x, K: v$ B7 L  `* q4.進入這行的感想是對於一些硬體的知識比以前來的了解,辛苦的是要一直摸索找方向,雖然東西很多要K,問題就在於太多東西反而有時不知從何著手 @@!* [$ I* X; H; c% l& S8 M: u; P
" D- T' ]* [! ^) C3 y0 o
5.再次感謝你所提供的意見/ L; y8 Q2 \2 A$ ]9 v  N" r0 O0 E
十月 05, 2007 8:09 上午  
/ _6 Y% b: J& v5 r+ k5 k
* Q1 D  `$ \# W1 ochiehlin@mail2000.com.tw 提到...
: u. k# S; d* LPCI Register 是 cf8 cfc Index ,Data
9 b9 d; V% m$ P; ?! \5 H十月 25, 2007 11:17 上午  + ?4 C/ K3 v3 W0 S' z
. V: M0 ]- R: I$ Y" I8 b, a: o
PT 提到... 9 f" |) ]% ^% b9 q+ h+ M/ t
關於SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)+ B: b) f/ F+ J/ z) f& @
mov eax, 80002750h* A1 h8 t5 o, W& _4 N% i# D
依照我的理解方式是3 r4 P  b" d' A4 r5 O, d
10000000^00000000^00100^011^010100009 P$ i9 h2 P8 j" t& E) [- Q5 B
所以應該是80002350h
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

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

GMT+8, 2025-5-22 02:22 , Processed in 0.078377 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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