|
|
一旦正確的頻率供給給system後, BIOS便依據既定的POST table(類似行程表)來做事. 首先,與chipset最為相關的便是 [chipset config stage]. 意即,在此階段BIOS必須對 chipset registers填入正確的值,俾使其正常運作. 一般而言,要config下列的 devices:
+ m+ T- E& O- B4 t# h: Y1 h- NB(還記得前面有提過北橋內部約可分 4 blocks; "有些" blocks 需要 在此 program...)
2 U& ?3 ^4 J: r# m* I: h2 c- SB(即 PCI-ISA bridge)
2 u4 s. ~! `1 Y- k6 U' u/ _- ACPI registers9 {0 I5 z4 C; C0 x
- USB registers2 O! \+ H; R: O# U: M. p0 ?0 S9 x/ U
- SATA registers2 S0 I% M) ~1 J) O
- PATA registers, ]2 T' H# m& O9 f
...
& a: Y% m1 b2 X7 i: u. R$ I/ Y: o. I9 j3 p' ` N
* 在此所謂的 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之處 !!!9 S! L: C7 c. o2 V; B1 W3 I
& h$ {9 c3 m9 M) [; T7 g; R1 M
* ACPI registers通常透過 IO 來存取" b# E6 E v$ Y6 [ }: n: {" w; |
Ex. // assume ACPI Base is 800h,要 access ACPI Reg55h! o* K/ q) _" l& g
mov dx, 855h9 |* s3 S- v2 a+ L
in al, dx ; <- al = ACPI Reg55h's value
; p. t+ t% B8 L4 C( d* g" |; D+ f; X( L/ I1 ?5 |' O5 B" E
* 上述所列的 devices多為 PCI device,也都有唯一的PFA(PCI Function Address,即 bus#,device#,func#),也因此,只要對 device 下 PCI configuration read/write便可以 config device registers.# N: [5 w, F5 D* V3 g6 e
3 C* A4 }% \8 z4 M8 {; i1 @Ex. 假設: set SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3), B4 l- C) B! n2 ?6 V
=> 簡單的 assembly can be:" q! c: J8 C2 g. ?
/ [) o0 I4 g4 ~+ P0 u, J
mov eax, 80002750h
0 x# T6 H" }5 @( E# q$ }* Rmov dx, 0cf8h
! ^3 a- G7 J4 r: Z3 l5 U1 s. Y) Qout dx, eax% D) h. a+ K* U" [; c! Y3 T5 N# Q
9 U6 A9 l' W% M1 i% d9 H" d( umov dx, 0cfeh l3 x, B5 s. \+ I5 @% i9 e# t
in al, dx9 i) @; c9 {, P8 ~+ |
or al, 00001000b
5 ]' L/ h& r0 X: Gout dx, al # ~0 q2 X* w. [5 g% R+ p
+ T& l8 v; p: g2 N# m8 O
事實上每家BIOS都 maintain many "tables" 來說明: 哪一個 device 中的哪些 registers要填?值.相關的 access routine都已經寫好. Programmer只需更改表裡面的值即可 ^_^/ [1 c" q9 g4 Y5 i. n- l
, D7 E# N& Y5 |0 W7 H; H; X
*當有人要求改 register setting時,我們必須知道三件事:
1 y& c n% j+ I9 r1 U: x0 i1. why (為什麼要改?)
+ U+ j9 l: j/ ^/ b2. what(改成何值?)
: i/ r0 a/ _0 k0 V7 m3 s3. when(什麼點改?) ?' c+ ^1 e2 ^; Y- c
: Z! c8 r9 e N! |& c*對於 BIOS kernel與 OEM coding的人言,這部分會是較少碰觸的,因為,這些code會由 chipset porting的人負責撰寫及維護.
0 O0 C3 b" L' l; B2 M張貼者: HARRISON HSIEH 位於 8:41 下午
2 B5 o9 Q. y; w. q( b標籤: BIOS相關
9 S! \% `. S5 q3 p0 y0 @. v+ h6 U6 意見:
* ?2 I5 m% [- I2 `* H: D% S
. I, B* B2 w( {5 ptonyya 提到...
" W) R( e6 u5 \ E8 v$ w* n8 j無意間發現你的部落格
" G8 |! q Z: v8 k- N& g" h, j5 g6 `. d7 c" N% d( w# }
很多文章都覺得受益良多" C: V8 e* \; p9 t1 v5 K7 ^7 E( H/ o
, `) y- `- n! [
我也剛接觸這門領域不久- ~' H/ _) S- L
l5 h" m7 j8 I8 r. Q
很多東西都似懂非懂
4 w% N( B. f" m7 G3 o. C1 \7 z% j" S
不知對於一個新人而言2 i' P: p, a6 ~. u; h0 i/ {& ?' G' ?
" V0 R y0 L0 d# \% E% G5 @! t有沒有什麼好的訓練方式# L' D0 ^% m4 M8 }7 o
" M5 y# C$ z$ W
可以及早進入狀況% T) V+ u$ a0 G
十月 03, 2007 5:53 上午 ! o T% L. k! w" V( O$ m
& F# ~6 w! F- Q+ X, wHarrison 提到...
" u1 i6 \( g3 c2 I7 p. U8 w: |3 U現在的BIOS有分成Legacy BIOS(組合語言)與UEFI BIOS(C語言),但是這兩種BIOS對於一個剛接觸的新手來說就只是Win98跟WinXp使用方式的差別而已,介面不同,但是要做的事情幾乎一樣。3 d: ? C4 b' z, N0 g
0 [) Y" {; k o7 J% `
所以我的建議是多去了解這些工具的用法(組合語言指令/C語言用法)還有多看看Intel IA32 Architecture guide vol1~3(目前最新版是IA64),因為了解系統架構才是最基本的。& P6 G0 [5 S2 r9 a* ~" s
" t) X/ B5 A; T8 |" J
如果要快速上手的話,你就先必須知道"設定方式",例如: 如何填CMOS/PCI Register(CF8/CF9),還有如何調整PIRQ/GPIO/ASL Code...等,如何透過SMbus/LPC存取? 何謂KBC/EC? 又要如何把OpROM 載入到記憶體,然後把控制權交給OpROM,執行後又把控制權還給BIOS/CPU Microcode如何更新?...etc. 這些都是基本OEM BIOS會做的事情,至於BIOS核心就必須很了解IA32架構你才有辦法去做。/ E* B2 d- c0 O' h
十月 04, 2007 5:39 下午 / v: U+ `5 R. ?: Y1 k
/ w# p; V% R3 f! i t9 Etonyya 提到...
- p- n9 t) Z# g( B* q9 n首先感謝你的回覆$ s* U4 f; k* X9 W( c4 s
! @' W. R. x8 H
1.目前接觸的是Legacy BIOS(組合語言)
2 p: i; _4 E- g! A
, K# H5 x$ e K2.IA32的系統架構有在看,目前也在積極補強一些相關的spec知識,不過還是要有實際做過才有感覺,對我而言如果只是光看的話無法深刻的體會
/ Q1 d" n9 {: W: B, `0 k" U# {+ p2 ^4 j# y7 v9 q7 `9 p
3.關於你說的設定方式,有的有碰過,像是PCI,ASL code,SMBUS/LPC, CPU Microcode更新,我會去補強你所提到而我沒碰到的部份
7 I5 o; _# h! U/ K" y& V( Z( H$ R( M' h9 s1 F3 g( ^! |
4.進入這行的感想是對於一些硬體的知識比以前來的了解,辛苦的是要一直摸索找方向,雖然東西很多要K,問題就在於太多東西反而有時不知從何著手 @@!) V9 E$ T0 L: _, X
/ C" ]8 J- L7 |& }: b- T1 M5.再次感謝你所提供的意見. l$ z, Q- L8 _3 `3 f1 X7 `
十月 05, 2007 8:09 上午 7 b7 a+ o2 L3 m( g
0 W" x5 a5 \& g$ V- `9 q2 hchiehlin@mail2000.com.tw 提到...
; \" F6 L: t4 O- a4 k/ WPCI Register 是 cf8 cfc Index ,Data
. g5 S% n+ i3 f& R( b' Z8 f十月 25, 2007 11:17 上午
9 _2 J. V; n3 ~) V # x! Z* V% b8 J/ `0 t% \
PT 提到...
2 u/ Y( O: f* [) W- y關於SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)
8 D2 r" s5 q$ smov eax, 80002750h' F4 @$ L" Y0 Q* f) N: F* `
依照我的理解方式是
; U3 b+ t W9 X, K' N10000000^00000000^00100^011^010100005 s& i9 ?* S/ t- s# z7 P
所以應該是80002350h |
|