|
|
任何 firmware 都有相對應的硬體;也唯有深入瞭解硬體,才能寫出好的 firmware ! (當然,對 programming language 很熟,有技巧的的人可以寫出好的 firmware,但是,另一個層面是:對硬體很瞭解,所以所寫的firmware 與 H/W 搭配良好,這也是另一種值得追求的地步): h$ i3 Q2 s/ {" x% N, b$ r6 w
% g/ Y/ R! F$ t( g6 v2 h) o
BIOS 就是 "主機板的 F/W". 所以,它的對象就是主機板上的所有 devices. (為了後續的解說,我只列出一些,其他的坊間書上都可找到)
' \& r8 u3 X; b& l! W. {; `7 C! B/ Q3 L! f! P# |3 V
- [CPU]+ X: K9 V5 F; x5 B5 a
=> central process unit. 依架構不同有分 Intel or AMD cpu. 其工作之一是: fetch code->decode it->fetch operands->calculate->store result.4 y4 d: `6 p0 H# C: i
( V( {/ {) g5 `! S% {$ n
- [North bridge]
6 g( l$ h: {% G7 a=> 即俗稱的北橋. 常見的 Intel 945/P/G,965 等是其北橋晶片代號. 它可以約略區分成四個 blocks(H/W view)
, m% e6 c% {7 ]( n" Q" N1. Host interface: 即 與 CPU interface 的部分.
! p8 q. y6 x; R1 V2. DRAM interface: 即與 DRAM interface的部分+ C% ?1 n; N. |3 T$ K8 ]; b
3. Display interface: 即與 AGP/PCIe VGA interface的部分6 v, l+ C% x" V$ i
4. Link interface: 即與 South bridge(南橋) interface的部分! _, h& M5 }/ o5 t: h
$ a/ v3 z1 m8 y5 @簡單說,North bridge的功能是: Host block 承接 CPU 所 issue 的 cycle, 辨認(identify),並且將之 forward至 "正確的接收者" ( Ex. DRAM block, display block, or Link block )) ~2 m* N9 |9 N1 z! o* F* k
6 l2 t! h/ I/ t, r# }7 u所以,它像交通警察一樣,接收中央的命令,將來自四面八方的車流引導至正確的地方,讓整個城市的各部分各角落可以相互交流無虞.
& r7 T K3 O1 Q+ B1 x0 u* r9 O+ a
4 V! J- B4 ]; V! f-[South bridge]' U/ f" z0 A4 z, e. q# G# X0 @
=> 及俗稱的南橋. 常見的 Intel ICH7/8為其南橋晶片代號. 它"可能"包含以下的 blocks:3 h9 r# Y* Q Z& c" S; Q/ X4 e( G
1. Link interface: 即呼應北橋的部分.
5 m ]; u- O+ l# K2. PCI block: 處理 PCI request部分(即 implement PCI spec H/W part)3 S; v, k4 ]4 }& d2 ]: q4 ]# o
3. ACPI block: implement ACPI H/W part
( R3 r8 ~ ~( m, x: G4. USB
0 z3 s- @% J% U$ X7 Q5. Audio1 ?! @9 F0 w6 L6 U9 J
6. SATA(AHCI)
( E' b2 D4 x7 A9 ]# H& h7. ...
# a& s6 y# h- Y/ P- F- K, M2 j" J6 [: z
所以, 南橋裡面包含許多我們常見的名詞, USB/1394/SATA/HDA/TPM/PCIE...等' z& N( D6 w6 d! z3 P9 \( j7 C
+ m! J3 b$ p3 \1 C) U* i3 g- z
-[BIOS ROM]' |4 o: L0 ?! G0 R
=> 儲存 BIOS image的device. 常見的有 ISA ROM/LPC ROM/SPI ROM. 編譯出來的 BIOS binary file透過燒錄器或是 flash tool 燒錄到此 ROM中. 內容是0101...的 binary code
7 W/ C$ U3 C. D( s) Z! ]7 h
6 x& R1 c; V$ ~2 ^" B3 ]$ L3 \所以,總結來說: BIOS code被CPU fetch, 經過 decode後, 會轉發給NB.NB接到後也會自行decode 此 request;若是 與 DRAM有關的,則 forward to DRAM block;若與 display有關,則forward to display block;若是與 PCI有關的,則將之轉發給 SB(透過兩者中間的Link),請SB再找適合的人 Ex. USB, SATA, or 1394 controller ! ( 別忘了 PCI H/W是在SB裡...)/ k1 S" _6 o$ Y" i/ Q7 ~
, z1 T0 U, V% ~. V; _* Y- t以上依序所講到的 CPU->NB->SB->ROM,將在後面的敘述中用來說明一些觀念及flow.% J* c0 ^$ w& q& U3 r4 W; C
" D5 N4 K4 O1 i. s; p
Summary:
9 ^6 @- Q8 [5 D6 ~1. BIOS可以說是 chipset's driver !!!7 G$ u' s8 _; N$ P! }' A! ]9 D
2. CPU所 issue 的 cycle會先抵達NB,由NB判定是給誰的;若不是 for DRAM or display,則會再轉發給SB,由它判定是要給誰的 |
|