|
|
一旦正確的頻率供給給system後, BIOS便依據既定的POST table(類似行程表)來做事. 首先,與chipset最為相關的便是 [chipset config stage]. 意即,在此階段BIOS必須對 chipset registers填入正確的值,俾使其正常運作. 一般而言,要config下列的 devices:
8 k3 X) y, T2 u& Z- NB(還記得前面有提過北橋內部約可分 4 blocks; "有些" blocks 需要 在此 program...)
$ d3 V9 k6 ^2 c4 @- SB(即 PCI-ISA bridge)
+ f$ `& j( D/ S3 T' |8 a/ M1 o: _- ACPI registers' k7 I, Q7 X! m: \. m1 {4 Q
- USB registers2 Y0 W% M$ N: t% K# R% z
- SATA registers
* k' `% T3 @+ a6 m% q( H" Y9 `; S9 S- PATA registers
' C! y, o4 d7 `1 r3 _0 D...
1 ^% f9 T! S. B0 n1 h8 ^ [5 ]# }' E- 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之處 !!!- x+ ^6 x( d& e) C |- \
9 [! H& i4 ~) o6 k5 h0 L* ACPI registers通常透過 IO 來存取+ c/ U+ S8 o. M5 ~ S: J" I/ |
Ex. // assume ACPI Base is 800h,要 access ACPI Reg55h9 s2 u+ t4 j/ @9 c1 N
mov dx, 855h* u& S0 x8 H' Q/ b7 p8 H5 s
in al, dx ; <- al = ACPI Reg55h's value' B5 R+ V7 G4 _5 B; \; I
: d( P8 {- F, h" V A& x0 s
* 上述所列的 devices多為 PCI device,也都有唯一的PFA(PCI Function Address,即 bus#,device#,func#),也因此,只要對 device 下 PCI configuration read/write便可以 config device registers.
: |' G. w$ a$ n3 r, I; H4 O
! f5 i b0 I1 y( rEx. 假設: set SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)
# B9 ^" b9 T# ]=> 簡單的 assembly can be:; ~ s8 }- E: d3 k" v5 ~
( k9 m% m8 I0 S& }
mov eax, 80002750h
) G( U9 v/ y, H! [( @mov dx, 0cf8h
# t. l+ H# n; d8 d2 Lout dx, eax
6 l7 o2 _+ u$ \0 q- u( k! F2 X% a, l6 Z/ V. L
mov dx, 0cfeh
0 \4 M z8 c. c- N3 T9 Oin al, dx: S, ~8 k- n/ b9 P: s" V
or al, 00001000b+ i! m7 w, z) b7 i
out dx, al 9 b* a& s: c2 M6 ~+ l$ J
# [/ ^3 t! q% U( l v. J3 {事實上每家BIOS都 maintain many "tables" 來說明: 哪一個 device 中的哪些 registers要填?值.相關的 access routine都已經寫好. Programmer只需更改表裡面的值即可 ^_^
* k+ i8 n) x: H, l, T& W3 Q; q& Y/ l6 i) V& v' S; t
*當有人要求改 register setting時,我們必須知道三件事:: ]: x! [ N6 T5 W
1. why (為什麼要改?)
( J! U1 P+ n( d. s2. what(改成何值?)
6 y# O4 H# F+ Y/ w- Z# Z3. when(什麼點改?)( _8 W3 K# M" N
+ H! p$ P4 L9 x- t: |4 P$ Q
*對於 BIOS kernel與 OEM coding的人言,這部分會是較少碰觸的,因為,這些code會由 chipset porting的人負責撰寫及維護. , }- D# H ]. |" j& a5 e* ?; A
張貼者: HARRISON HSIEH 位於 8:41 下午
: D- f" Y- J" | W, \; G- C9 |4 h; ~標籤: BIOS相關 6 ?7 G5 c( U( }! Z4 z
6 意見: ' k4 Y. ~) R" ^* e+ ]- j
0 A+ K4 ~8 ?, N* J, n6 B
tonyya 提到... ! _6 b7 N H0 A9 [4 W1 m9 w
無意間發現你的部落格
( M" I1 u6 f( U2 Y7 _2 c5 s9 n7 ]; K' R
很多文章都覺得受益良多 J4 i7 G# |7 d+ X( g3 G: j( e
: x; q' A. _, ~% n( V+ {我也剛接觸這門領域不久
8 m$ h8 m. {: \, H
5 R7 L2 P+ B% _0 b5 e很多東西都似懂非懂 ?" [8 ~* ^$ O6 b* ~! M- t
9 N5 P! E# E5 y$ M* Q5 t6 k6 r* E不知對於一個新人而言9 p0 ~8 D" k8 M* v
2 B2 v, m8 n2 o* m' M有沒有什麼好的訓練方式
& Z+ r% W7 q6 G- M8 O7 L
/ F- d i& `2 O0 K1 \# m可以及早進入狀況! p8 ?$ j: J: m: C; d7 s' S+ n
十月 03, 2007 5:53 上午 & M, N! ^9 A$ S# w) G
0 g' H0 O$ f& j; [' `Harrison 提到...
$ B( N4 r: l# q現在的BIOS有分成Legacy BIOS(組合語言)與UEFI BIOS(C語言),但是這兩種BIOS對於一個剛接觸的新手來說就只是Win98跟WinXp使用方式的差別而已,介面不同,但是要做的事情幾乎一樣。7 y5 k9 H. U0 k1 y9 R% ]% G
( t/ h% Y7 }5 h) z, _+ K9 V, T7 d所以我的建議是多去了解這些工具的用法(組合語言指令/C語言用法)還有多看看Intel IA32 Architecture guide vol1~3(目前最新版是IA64),因為了解系統架構才是最基本的。4 J; U$ d: y2 f6 ?
9 h9 k' _) c* ?如果要快速上手的話,你就先必須知道"設定方式",例如: 如何填CMOS/PCI Register(CF8/CF9),還有如何調整PIRQ/GPIO/ASL Code...等,如何透過SMbus/LPC存取? 何謂KBC/EC? 又要如何把OpROM 載入到記憶體,然後把控制權交給OpROM,執行後又把控制權還給BIOS/CPU Microcode如何更新?...etc. 這些都是基本OEM BIOS會做的事情,至於BIOS核心就必須很了解IA32架構你才有辦法去做。( E% Z3 m) U* i6 F/ F% R
十月 04, 2007 5:39 下午
, k# G$ j4 X3 Z) N8 g
* D" c! P9 K- vtonyya 提到... % I+ {2 E, F3 p
首先感謝你的回覆/ Y, ^ k0 p7 n0 w# S! O
( H5 P8 e% R2 I' t3 ~8 p
1.目前接觸的是Legacy BIOS(組合語言)* m6 d' W: m$ x$ c3 q
$ }) T6 E# P9 R% _2.IA32的系統架構有在看,目前也在積極補強一些相關的spec知識,不過還是要有實際做過才有感覺,對我而言如果只是光看的話無法深刻的體會
4 o) ]+ T6 ^: S4 A4 Z# n# d8 h/ S1 W$ ~: f
3.關於你說的設定方式,有的有碰過,像是PCI,ASL code,SMBUS/LPC, CPU Microcode更新,我會去補強你所提到而我沒碰到的部份2 C# A9 [/ \" i6 w+ P
, \' F4 S$ y- F- }- h) k
4.進入這行的感想是對於一些硬體的知識比以前來的了解,辛苦的是要一直摸索找方向,雖然東西很多要K,問題就在於太多東西反而有時不知從何著手 @@!
: S# M9 |/ F- M9 ?( b( j, d; ^5 K. r* }( E% {
5.再次感謝你所提供的意見
/ w$ E9 ?0 R: w4 b十月 05, 2007 8:09 上午 ' J' m% t2 E" J& H
+ w/ H/ g) y# I; n K/ n k0 Hchiehlin@mail2000.com.tw 提到...
6 m6 [/ N7 D. d; ?3 v% dPCI Register 是 cf8 cfc Index ,Data
" v* \( ]' s, r& j十月 25, 2007 11:17 上午
5 P# s0 q4 ~9 v- F U
' C$ _% M8 T1 k# f+ J# A0 ZPT 提到... + D# p0 Q) e! [* b7 x9 f% [& P
關於SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)
! ^9 L* h8 q! G+ K9 Rmov eax, 80002750h% r3 [8 E+ V6 d+ s2 r
依照我的理解方式是
M( _7 C) H8 i5 I10000000^00000000^00100^011^010100007 q9 S4 Q ^! [$ O. |+ H
所以應該是80002350h |
|