|
任何 firmware 都有相對應的硬體;也唯有深入瞭解硬體,才能寫出好的 firmware ! (當然,對 programming language 很熟,有技巧的的人可以寫出好的 firmware,但是,另一個層面是:對硬體很瞭解,所以所寫的firmware 與 H/W 搭配良好,這也是另一種值得追求的地步)
" N8 [2 p" g' ^4 S! ]$ N3 J- n' Q2 k' ^. w5 n' h1 e
BIOS 就是 "主機板的 F/W". 所以,它的對象就是主機板上的所有 devices. (為了後續的解說,我只列出一些,其他的坊間書上都可找到)
0 w8 }; j, W0 k! ^9 o- H( g2 r* K3 C8 [
- [CPU]; Y$ G0 f4 b1 q! o* ~5 l6 C2 m
=> central process unit. 依架構不同有分 Intel or AMD cpu. 其工作之一是: fetch code->decode it->fetch operands->calculate->store result.
9 J. W4 u& }$ ^) r/ a3 F4 P* M5 m: a" Q( r x% u
- [North bridge]
7 _3 i/ [- ~/ @2 {8 Z* t=> 即俗稱的北橋. 常見的 Intel 945/P/G,965 等是其北橋晶片代號. 它可以約略區分成四個 blocks(H/W view); D8 O# ^3 T! z; |$ c8 p
1. Host interface: 即 與 CPU interface 的部分. * D2 m% X! n& o# o) @
2. DRAM interface: 即與 DRAM interface的部分
- B+ U4 V# M& b3. Display interface: 即與 AGP/PCIe VGA interface的部分
8 }4 R! k7 `8 q7 m% c4. Link interface: 即與 South bridge(南橋) interface的部分
# a5 V( j3 K9 c
- w7 n3 m- H9 c, Z9 |/ C- t, o" }簡單說,North bridge的功能是: Host block 承接 CPU 所 issue 的 cycle, 辨認(identify),並且將之 forward至 "正確的接收者" ( Ex. DRAM block, display block, or Link block )
* u6 o0 U( ]: f& x5 L
+ R3 d5 X* d) |' j3 ?+ Q6 h- e0 F所以,它像交通警察一樣,接收中央的命令,將來自四面八方的車流引導至正確的地方,讓整個城市的各部分各角落可以相互交流無虞.
7 a' z5 Q- G3 D4 g3 n& }( u4 ^( D. C# P5 ]7 V0 q' v; x
-[South bridge]
; b- X4 J. K8 V2 a+ r8 h$ K# J1 X=> 及俗稱的南橋. 常見的 Intel ICH7/8為其南橋晶片代號. 它"可能"包含以下的 blocks:
# r3 ~/ \1 u/ e+ b( J1. Link interface: 即呼應北橋的部分.% c g0 [$ Q" K) y5 Y- T9 \ ~1 P
2. PCI block: 處理 PCI request部分(即 implement PCI spec H/W part): a# Y; I% X8 O! Z# k4 {8 q8 u
3. ACPI block: implement ACPI H/W part7 y9 t; }9 F4 Q# ~# `! s& c
4. USB' z; H6 J8 e e8 e% H
5. Audio
# @! O- M$ C t6. SATA(AHCI)0 Q; F' f* P& E0 e W. K9 w9 {: O
7. ...
* P. S% Y2 G/ W; W/ t' _* i5 L! q/ B* m" O) c
所以, 南橋裡面包含許多我們常見的名詞, USB/1394/SATA/HDA/TPM/PCIE...等2 I- t* n$ `, P* q
9 ~4 J9 R: @5 I; k$ J- n* P
-[BIOS ROM]
( q% s& e' w. j O8 F=> 儲存 BIOS image的device. 常見的有 ISA ROM/LPC ROM/SPI ROM. 編譯出來的 BIOS binary file透過燒錄器或是 flash tool 燒錄到此 ROM中. 內容是0101...的 binary code% [3 K' z4 R, F2 {" h" E
% H- o5 ` t. i, N( M
所以,總結來說: 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裡...); K6 [ C* m! g; R
0 }! V6 k1 @2 u以上依序所講到的 CPU->NB->SB->ROM,將在後面的敘述中用來說明一些觀念及flow.9 q2 {; c0 v8 N- P
2 g. M/ S5 d" B* T. U- O1 {
Summary:6 v, K& g- V2 f: F; j+ r
1. BIOS可以說是 chipset's driver !!!+ o# p% } p; V5 @, G2 r* q
2. CPU所 issue 的 cycle會先抵達NB,由NB判定是給誰的;若不是 for DRAM or display,則會再轉發給SB,由它判定是要給誰的 |
|