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

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

[复制链接]
发表于 2010-7-1 11:31:10 | 显示全部楼层 |阅读模式
一旦正確的頻率供給給system後, BIOS便依據既定的POST table(類似行程表)來做事. 首先,與chipset最為相關的便是 [chipset config stage]. 意即,在此階段BIOS必須對 chipset registers填入正確的值,俾使其正常運作. 一般而言,要config下列的 devices:
/ {' x% Z# g3 D: v  Z. T( y. {- NB(還記得前面有提過北橋內部約可分 4 blocks; "有些" blocks 需要 在此 program...)- R# F+ ^- A* z5 ~4 D4 L# W
- SB(即 PCI-ISA bridge)2 G; z+ z7 s1 [, @9 N  I
- ACPI registers
, ]0 o/ T& v* ^& d; p7 c- USB registers
% ?1 j* y' D$ `% ]/ u9 a0 G9 X( [7 D- SATA registers
+ o" o7 _9 H/ S2 j) h; ~7 p6 B- PATA registers
3 B% Q+ |) T1 f; y/ {: x...
- q4 Z: O! c" I( N" r* y/ y" {3 e, ?2 {$ _0 Z, v' z8 ?
* 在此所謂的 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之處 !!!4 i$ D# |$ s  ]

. o1 M: H- P1 a6 u- `# \- ?8 B& o* ACPI registers通常透過 IO 來存取' V6 n; {* ^/ j- S& d
Ex. // assume ACPI Base is 800h,要 access ACPI Reg55h
: X0 N5 ~5 V# Bmov dx, 855h. }  p. G9 l  C7 |* S
in al, dx ; <- al = ACPI Reg55h's value
, \+ z$ z0 Z' D: E3 P8 j
4 b- H) Z; E' w6 P  J" V# h* D1 z* 上述所列的 devices多為 PCI device,也都有唯一的PFA(PCI Function Address,即 bus#,device#,func#),也因此,只要對 device 下 PCI configuration read/write便可以 config device registers.
2 M$ l: v( H- _
; U. v" U( Q  C! kEx. 假設: set SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)- Y6 N) a1 c% p6 |! O& i
=> 簡單的 assembly can be:: Z( |& |" `6 t* z

+ y# ?3 w" D. @( Vmov eax, 80002750h
! a# ?$ D' r+ Rmov dx, 0cf8h& t: X* o( l, y
out dx, eax8 r( _4 O  x8 \; f, c1 L1 {
& ~  s% B  [3 c' g
mov dx, 0cfeh/ z1 O+ ^. v* ]* R) \0 ^4 o
in al, dx& z8 b7 T% T7 D$ {' _5 F: T  ^# X' N  h
or al, 00001000b
4 I8 `' k0 B0 m) uout dx, al
! L2 y! e/ h. I  C1 \9 [) a8 r$ f9 ]0 U1 r" N! F
事實上每家BIOS都 maintain many "tables" 來說明: 哪一個 device 中的哪些 registers要填?值.相關的 access routine都已經寫好. Programmer只需更改表裡面的值即可 ^_^8 T/ C. P& J( b3 a4 k

$ L- F' ^) M/ Q3 w' _*當有人要求改 register setting時,我們必須知道三件事:
: r, D. v1 p1 L6 \. H: ]' N1. why (為什麼要改?)" `4 Z0 }/ b# z0 _4 i/ ]/ ?8 H
2. what(改成何值?)! q; S6 ]8 F% V  b
3. when(什麼點改?)
" q8 L/ Y, d# f5 r) Q
. T8 @* R$ k0 }4 H+ }) a6 u*對於 BIOS kernel與 OEM coding的人言,這部分會是較少碰觸的,因為,這些code會由 chipset porting的人負責撰寫及維護. / E5 N+ G7 u2 P
張貼者: HARRISON HSIEH 位於 8:41 下午   
1 d' I, f4 a& x5 w, o! C標籤: BIOS相關 . R# [0 C( c' Z
6 意見: 1 ]! @. [& Y& U/ u. j2 m# \% M% r

( u8 |. z6 V0 @8 B/ N* ]2 A8 D6 v. Itonyya 提到...
& B9 o" R# V7 v1 m& A3 ~) O- h, x無意間發現你的部落格
. Z% W0 c- V) Z6 K. G
) b+ [* `5 f! ?5 ^& U7 v/ ?( n很多文章都覺得受益良多
  W( K1 _. t) W* H0 P5 E+ S* a
# y) a  p, f$ E9 \我也剛接觸這門領域不久
; [% E" C+ D# ?. K& p9 V' F
* D. }8 u* x4 s: D很多東西都似懂非懂6 B$ `7 f/ o8 O+ X, |9 \8 F& L
* \- X" [% T% |8 C* A
不知對於一個新人而言
1 L7 [" X0 B* c0 l% n4 a+ m8 h' P) U" J$ e) [
有沒有什麼好的訓練方式
+ t: |+ k0 A9 ^8 z3 M. G& t7 V5 t' t
可以及早進入狀況6 R5 @! D" ^5 K5 N( t& J
十月 03, 2007 5:53 上午  3 H9 e: t4 u( o2 Y# s1 ~
: ^; a, j4 O- r% k
Harrison 提到... ' |& p  w& u& Z7 w" g( X9 V' D
現在的BIOS有分成Legacy BIOS(組合語言)與UEFI BIOS(C語言),但是這兩種BIOS對於一個剛接觸的新手來說就只是Win98跟WinXp使用方式的差別而已,介面不同,但是要做的事情幾乎一樣。' i4 d6 c) A  S" s& J0 e

# A# w; m# J! _; c+ d所以我的建議是多去了解這些工具的用法(組合語言指令/C語言用法)還有多看看Intel IA32 Architecture guide vol1~3(目前最新版是IA64),因為了解系統架構才是最基本的。& A3 n/ ^, a( m1 ]- r
/ s( W) O2 A1 M+ z  O* ?! V; \
如果要快速上手的話,你就先必須知道"設定方式",例如: 如何填CMOS/PCI Register(CF8/CF9),還有如何調整PIRQ/GPIO/ASL Code...等,如何透過SMbus/LPC存取? 何謂KBC/EC? 又要如何把OpROM 載入到記憶體,然後把控制權交給OpROM,執行後又把控制權還給BIOS/CPU Microcode如何更新?...etc. 這些都是基本OEM BIOS會做的事情,至於BIOS核心就必須很了解IA32架構你才有辦法去做。6 A/ [; z9 d! ^6 m6 L
十月 04, 2007 5:39 下午  * t! R$ Q. d  @- M% k
. w, H/ q) V' j! g. F/ I: o3 x
tonyya 提到... ) T' D! G! l+ j6 J! r0 q# J
首先感謝你的回覆- w$ _7 h" a. L2 G5 o) j

# N0 p' N, O0 r1.目前接觸的是Legacy BIOS(組合語言)! R/ k" w" C! f  Q6 U3 H) d
' |$ b' c, s8 j( l3 ?
2.IA32的系統架構有在看,目前也在積極補強一些相關的spec知識,不過還是要有實際做過才有感覺,對我而言如果只是光看的話無法深刻的體會; B9 \6 {; m' F2 t% _9 h4 H$ w
6 ]5 V- ^, @8 t1 @5 y$ K
3.關於你說的設定方式,有的有碰過,像是PCI,ASL code,SMBUS/LPC, CPU Microcode更新,我會去補強你所提到而我沒碰到的部份
$ ^; G1 Q1 }3 h2 k* C2 {2 z, d6 a
! \, {4 |* B  f1 w4.進入這行的感想是對於一些硬體的知識比以前來的了解,辛苦的是要一直摸索找方向,雖然東西很多要K,問題就在於太多東西反而有時不知從何著手 @@!, |, }! x( ^: p5 ], g0 t
/ @+ Z. h% h. M9 t8 S
5.再次感謝你所提供的意見! U6 P6 |# Z, X) ^, ?5 U
十月 05, 2007 8:09 上午  
, {3 ^( ]2 e6 s/ B  }8 a3 h/ n6 g - B. q+ n0 F) S6 b, x! W. o' `
chiehlin@mail2000.com.tw 提到...
4 E3 f! C, H4 D1 ]  I& \* FPCI Register 是 cf8 cfc Index ,Data! s! l7 E+ W6 T  Q0 O3 l
十月 25, 2007 11:17 上午  
: D: ?- _$ Z6 l+ ^
) }* |/ e; n9 C7 X3 K& DPT 提到... ; |9 D( i; q) m& e" l
關於SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)& ~% T% D& v4 |: [3 {
mov eax, 80002750h
" C0 J# F! {5 s依照我的理解方式是
: o6 L- i6 i8 ^# V5 y& y6 |5 O7 w10000000^00000000^00100^011^01010000
/ P  i# n2 U. w$ }所以應該是80002350h
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

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

GMT+8, 2025-4-29 05:54 , Processed in 0.024895 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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