找回密码
 加入计匠网
搜索
热搜: BIOS ACPI CPU Windows
查看: 15314|回复: 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 Q3 Y  _, d, b$ N$ v8 t- NB(還記得前面有提過北橋內部約可分 4 blocks; "有些" blocks 需要 在此 program...)- D. z4 Q( e! f& U! m1 P' C; M
- SB(即 PCI-ISA bridge)' U2 ~2 m- y4 G- f% ?. z* n
- ACPI registers
8 e0 W9 q1 y7 M9 Q. r- USB registers
3 Y6 e3 n9 A1 E% A* x- SATA registers" r, m+ \  L# W3 H% E) A! g  \7 y
- PATA registers
2 j5 n) i" E9 p& q! @- S  N...& u8 C6 C# t8 u7 u2 \

- i) z9 l7 A1 F8 l9 m3 q* 在此所謂的 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之處 !!!
' B! i* s0 _9 h0 O! F  n$ b7 c2 l% W% V6 D/ P! u% ]
* ACPI registers通常透過 IO 來存取$ k% O. F' @) O# t! C
Ex. // assume ACPI Base is 800h,要 access ACPI Reg55h
; G# u- ~# a- I( J5 l: tmov dx, 855h; s4 g4 u. G- p& Y% P. p) C' |
in al, dx ; <- al = ACPI Reg55h's value. R% w" h: T8 N9 i5 P% h" P" Q4 b+ x
0 X6 l( h/ _% i( ~3 n. f2 n% e( O' q
* 上述所列的 devices多為 PCI device,也都有唯一的PFA(PCI Function Address,即 bus#,device#,func#),也因此,只要對 device 下 PCI configuration read/write便可以 config device registers.
$ {) B. J4 \& k5 S* Q- a4 ?% s' ]6 L7 T
Ex. 假設: set SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)
% j( C& M9 a3 r0 X# s! T=> 簡單的 assembly can be:. w+ a5 s$ v/ h/ U/ ?/ ]. \

4 R2 V& i$ x' B  m' Imov eax, 80002750h# E' H! q% ]" R/ s
mov dx, 0cf8h
& @+ X$ e; m! H: W0 }4 C; Mout dx, eax' K2 i; }5 j' P' z1 L0 ?

3 D8 ]2 A# ]6 s, zmov dx, 0cfeh5 {: T+ \& Q$ U& P; D2 n. a( l
in al, dx
, B3 ^! u+ x( {! Q( P, Por al, 00001000b
5 R+ }* K1 D6 b; \! H# W& Hout dx, al . V! \7 c$ I& n: j

3 l! p0 V  w2 j5 ]' Y事實上每家BIOS都 maintain many "tables" 來說明: 哪一個 device 中的哪些 registers要填?值.相關的 access routine都已經寫好. Programmer只需更改表裡面的值即可 ^_^
  @' }! L- |7 D* l2 g' K: @7 V" m; P' U" @1 C. @
*當有人要求改 register setting時,我們必須知道三件事:
6 z4 J) p5 {: j! _6 O1. why (為什麼要改?)
, \; @6 {. S: j. E. l7 `1 J8 p2. what(改成何值?)
) R9 f$ N9 y- I2 u& v( ~& q* ~3. when(什麼點改?)
; ~" q5 O8 t2 l5 c
1 Q* o7 k: F4 B2 E4 p  y*對於 BIOS kernel與 OEM coding的人言,這部分會是較少碰觸的,因為,這些code會由 chipset porting的人負責撰寫及維護.
* y+ M$ ~+ {2 u2 k& H, Q6 b! w張貼者: HARRISON HSIEH 位於 8:41 下午   
% B4 c9 Q5 [% t4 m標籤: BIOS相關
1 @0 K& w" q0 e; s6 意見:
# I: Y7 @% N8 z5 }; n
  f0 l- M+ h5 f1 E! Z4 `8 n' Ptonyya 提到...
) e( H* e0 x. B無意間發現你的部落格6 |; R5 A8 T! p2 o
" h. r- }( L% c1 L# C, g& l
很多文章都覺得受益良多
# h0 ?% z. N" S# ?+ d$ [1 }6 \* n1 Z/ _- D0 r* j" G/ Y
我也剛接觸這門領域不久! c. i7 w% Y; [% L+ M  Y7 z+ V
" G/ Y! U+ M' n. ]  Q
很多東西都似懂非懂" n" o. ^0 ]. G7 a) a- B6 x& A

9 n( u& r* {# D! Y. k% {/ t" U6 y不知對於一個新人而言, T2 h# ~. E) \, a

( f, x0 g& @; n2 x5 d/ l有沒有什麼好的訓練方式; u( _1 ]4 z# v2 C1 [7 S

! `. h- E0 S) J# v. ]可以及早進入狀況+ N' u* S* H2 o- U
十月 03, 2007 5:53 上午  
9 A' B! @/ n* ] 9 y( e. J3 r' G2 W7 n
Harrison 提到... # H" h. U  t4 \) f! Y$ O8 L
現在的BIOS有分成Legacy BIOS(組合語言)與UEFI BIOS(C語言),但是這兩種BIOS對於一個剛接觸的新手來說就只是Win98跟WinXp使用方式的差別而已,介面不同,但是要做的事情幾乎一樣。
0 L; @1 q7 w, T1 p# \
* X0 r( S: e+ r所以我的建議是多去了解這些工具的用法(組合語言指令/C語言用法)還有多看看Intel IA32 Architecture guide vol1~3(目前最新版是IA64),因為了解系統架構才是最基本的。
4 y' D- e9 w+ t$ X2 G( x+ z  f. @% @' y2 x$ X% r
如果要快速上手的話,你就先必須知道"設定方式",例如: 如何填CMOS/PCI Register(CF8/CF9),還有如何調整PIRQ/GPIO/ASL Code...等,如何透過SMbus/LPC存取? 何謂KBC/EC? 又要如何把OpROM 載入到記憶體,然後把控制權交給OpROM,執行後又把控制權還給BIOS/CPU Microcode如何更新?...etc. 這些都是基本OEM BIOS會做的事情,至於BIOS核心就必須很了解IA32架構你才有辦法去做。
& Q7 [4 y6 C; _" M5 d7 u十月 04, 2007 5:39 下午  % ?. u" b( m5 _7 P; [& [" }0 K

$ c: d/ p2 e' s3 s1 Xtonyya 提到... 2 @9 V0 N! R- r# n' R: P
首先感謝你的回覆9 n/ R0 \  \$ K* G' C) t" t; _
: k) v5 ?( X  p& `
1.目前接觸的是Legacy BIOS(組合語言)
* x! a" P! W0 F8 N& E! S
4 h# l: q$ R( L7 A( l. S* A2.IA32的系統架構有在看,目前也在積極補強一些相關的spec知識,不過還是要有實際做過才有感覺,對我而言如果只是光看的話無法深刻的體會
  p5 |7 A& @- E3 ~; L- s
3 j! y. {* P! r8 q& m3.關於你說的設定方式,有的有碰過,像是PCI,ASL code,SMBUS/LPC, CPU Microcode更新,我會去補強你所提到而我沒碰到的部份/ v" q/ c/ M& }0 S* [

- o+ b9 M+ C- j4.進入這行的感想是對於一些硬體的知識比以前來的了解,辛苦的是要一直摸索找方向,雖然東西很多要K,問題就在於太多東西反而有時不知從何著手 @@!
' x1 J5 |$ T- ?* p2 u+ [3 g% D
) E6 K( L  b4 l3 I% {; i0 a( M5.再次感謝你所提供的意見
$ o" f) W) |7 N( B7 b% B十月 05, 2007 8:09 上午  
0 |  x+ Q7 P8 [3 M" m) c
. e% n8 l! ]1 K, q6 `" V2 L" B% qchiehlin@mail2000.com.tw 提到... " [9 o/ p7 U+ G) t6 R" u2 y
PCI Register 是 cf8 cfc Index ,Data
, V/ A; Z/ M# s/ H十月 25, 2007 11:17 上午  ! R  @* o5 f( _9 O& c4 \/ [+ L6 H
! |8 |# n: x, E3 b- A5 R
PT 提到...
. q6 k8 Y5 ?6 `6 X5 l/ M: h4 K8 ^關於SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)" P5 S4 G2 n- E) a
mov eax, 80002750h) f! r& W3 A3 }/ q1 [
依照我的理解方式是, s# O/ p2 O9 g! h' d
10000000^00000000^00100^011^01010000
: L1 j8 i0 V0 u- o所以應該是80002350h
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

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

GMT+8, 2024-12-23 21:05 , Processed in 0.053719 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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