|
|
任何 firmware 都有相對應的硬體;也唯有深入瞭解硬體,才能寫出好的 firmware ! (當然,對 programming language 很熟,有技巧的的人可以寫出好的 firmware,但是,另一個層面是:對硬體很瞭解,所以所寫的firmware 與 H/W 搭配良好,這也是另一種值得追求的地步)
$ E: b7 v0 {' n0 b4 p' ]* K- y* i
) m+ K% m1 X4 `' `; g& cBIOS 就是 "主機板的 F/W". 所以,它的對象就是主機板上的所有 devices. (為了後續的解說,我只列出一些,其他的坊間書上都可找到)
3 q1 r" i9 n' [6 d. ^4 H1 ]( [( Y
* `9 [$ \+ N3 E, I; w- [CPU]
/ M- g; w/ o) I5 x=> central process unit. 依架構不同有分 Intel or AMD cpu. 其工作之一是: fetch code->decode it->fetch operands->calculate->store result.
# @3 a+ T9 m3 H" M- X) ?* q) l2 ~( |$ o- m! @4 C" a. C2 D
- [North bridge]
7 }; F% U% x9 R2 p& h+ F# a, i: w=> 即俗稱的北橋. 常見的 Intel 945/P/G,965 等是其北橋晶片代號. 它可以約略區分成四個 blocks(H/W view)" d/ G" g6 i* ?2 u) z! C- B4 A5 ~. [; ^
1. Host interface: 即 與 CPU interface 的部分. ) M& W6 g K. d
2. DRAM interface: 即與 DRAM interface的部分: C2 s" U# j5 g6 ~& F- f
3. Display interface: 即與 AGP/PCIe VGA interface的部分
$ p/ z g+ t5 P2 k8 S4. Link interface: 即與 South bridge(南橋) interface的部分
6 B" M$ v/ X% A: P/ H. u- Z+ a( V6 B2 P, L7 b1 H
簡單說,North bridge的功能是: Host block 承接 CPU 所 issue 的 cycle, 辨認(identify),並且將之 forward至 "正確的接收者" ( Ex. DRAM block, display block, or Link block )
# _0 A1 x9 e2 q) b4 G' G, d* U
1 m# i( A, T* J- O2 q所以,它像交通警察一樣,接收中央的命令,將來自四面八方的車流引導至正確的地方,讓整個城市的各部分各角落可以相互交流無虞.& a1 X% n& |! N+ D
* d7 P8 u) b* B5 y1 d% g-[South bridge]
: ?) R7 |! i3 A9 D1 {0 }' o1 O=> 及俗稱的南橋. 常見的 Intel ICH7/8為其南橋晶片代號. 它"可能"包含以下的 blocks:# v" t8 D# D0 `) J+ `
1. Link interface: 即呼應北橋的部分.
9 D- |) W5 o% z) ~7 K2. PCI block: 處理 PCI request部分(即 implement PCI spec H/W part)
+ D# m) T0 {; W0 ~7 _; A- c3. ACPI block: implement ACPI H/W part
5 l, @) @1 U, e7 z4. USB
, q0 B6 Z1 ?3 u5. Audio
1 E D6 e; b0 A# d6 o2 Q) S6. SATA(AHCI)
2 s4 Q* I: ]9 n$ B0 ^7. ...& ~1 |. m& u9 S# }% m
% a6 I, ?$ Z# \' p7 |2 @
所以, 南橋裡面包含許多我們常見的名詞, USB/1394/SATA/HDA/TPM/PCIE...等6 W2 b- h) x) a) W% k9 i
" t- u* T8 \+ |# [. y-[BIOS ROM]
' M2 C; E; R" F. P0 y=> 儲存 BIOS image的device. 常見的有 ISA ROM/LPC ROM/SPI ROM. 編譯出來的 BIOS binary file透過燒錄器或是 flash tool 燒錄到此 ROM中. 內容是0101...的 binary code
" ~1 N8 k" v* V, X
7 Y {0 b& n! U/ S0 E所以,總結來說: 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裡...)4 V& d+ i8 o" |- V- O* V. l% {$ W
# ^3 e1 w+ x0 E7 P& C% Q2 F
以上依序所講到的 CPU->NB->SB->ROM,將在後面的敘述中用來說明一些觀念及flow., G( {2 w5 H& S6 d5 h
2 m- y" K- Z7 g( m( j# A# C7 |5 {
Summary:
. |5 K7 i& r2 [3 @6 e5 d0 l1. BIOS可以說是 chipset's driver !!!5 E1 I% A8 P2 y
2. CPU所 issue 的 cycle會先抵達NB,由NB判定是給誰的;若不是 for DRAM or display,則會再轉發給SB,由它判定是要給誰的 |
|