|
任何 firmware 都有相對應的硬體;也唯有深入瞭解硬體,才能寫出好的 firmware ! (當然,對 programming language 很熟,有技巧的的人可以寫出好的 firmware,但是,另一個層面是:對硬體很瞭解,所以所寫的firmware 與 H/W 搭配良好,這也是另一種值得追求的地步)
% ?4 r% Z- n5 S3 Q% k) R4 T4 _
" e& r" u/ d% b: d! T. iBIOS 就是 "主機板的 F/W". 所以,它的對象就是主機板上的所有 devices. (為了後續的解說,我只列出一些,其他的坊間書上都可找到)
?, @6 Z; D- g* V8 n8 j6 W& A6 Q# Q0 w! j+ t( }
- [CPU]
( R9 G! a9 j) r9 C=> central process unit. 依架構不同有分 Intel or AMD cpu. 其工作之一是: fetch code->decode it->fetch operands->calculate->store result.. M8 g0 {) L/ D8 f
9 b d4 h% J/ F/ v/ y* i3 `2 ]: {- [North bridge]
2 K7 M! v5 N6 m& M5 r$ O1 m=> 即俗稱的北橋. 常見的 Intel 945/P/G,965 等是其北橋晶片代號. 它可以約略區分成四個 blocks(H/W view)
) R3 Z8 e% h5 y4 L9 J- T1. Host interface: 即 與 CPU interface 的部分.
, B6 U! E9 m- p2 F2. DRAM interface: 即與 DRAM interface的部分
) }* l, G2 t5 O4 A( q3. Display interface: 即與 AGP/PCIe VGA interface的部分
^, q/ p: H* V4 x2 |4. Link interface: 即與 South bridge(南橋) interface的部分
8 ?! X$ m$ v3 T; x
8 _- X( m' i' a0 @) B簡單說,North bridge的功能是: Host block 承接 CPU 所 issue 的 cycle, 辨認(identify),並且將之 forward至 "正確的接收者" ( Ex. DRAM block, display block, or Link block )
9 s$ y( |# {* e9 E& r, p& s1 c" P8 q
所以,它像交通警察一樣,接收中央的命令,將來自四面八方的車流引導至正確的地方,讓整個城市的各部分各角落可以相互交流無虞.
! i0 ^8 ]! r- t" \
! p, R+ f2 y9 t+ D( Q/ l7 E-[South bridge]
4 N% m8 f8 y s$ E Z=> 及俗稱的南橋. 常見的 Intel ICH7/8為其南橋晶片代號. 它"可能"包含以下的 blocks:0 N0 f' B8 }0 Q. `7 A
1. Link interface: 即呼應北橋的部分.
) R8 y$ K, R! T( W2. PCI block: 處理 PCI request部分(即 implement PCI spec H/W part)
; T, T0 q0 O2 M8 J2 g i- z n* o3. ACPI block: implement ACPI H/W part Q" y3 L2 D R; z$ c; ]% R+ n3 o
4. USB
/ ~7 x/ { {; D' u0 L$ ]) T5. Audio
9 v0 t, a% o2 I( @6. SATA(AHCI)
2 g* C' u% [$ p, T; H" M7. ...
+ E) g+ T7 ^# T i' c4 E) j, d- A) r4 H% K+ ~
所以, 南橋裡面包含許多我們常見的名詞, USB/1394/SATA/HDA/TPM/PCIE...等' l/ k ^+ U' |; L- I
$ l9 ]% v4 b0 p' o-[BIOS ROM]
& a+ c" w; ^6 ]3 V5 W5 \=> 儲存 BIOS image的device. 常見的有 ISA ROM/LPC ROM/SPI ROM. 編譯出來的 BIOS binary file透過燒錄器或是 flash tool 燒錄到此 ROM中. 內容是0101...的 binary code. j8 C# C+ B8 s& {2 W. ^
: f- T( A: B# \$ o p+ i) U
所以,總結來說: 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裡...)' r2 r' u6 T, Q+ r4 i9 W* ]2 u8 X) E
5 K+ l; g M9 E- w, ~$ B以上依序所講到的 CPU->NB->SB->ROM,將在後面的敘述中用來說明一些觀念及flow.
1 B, k2 z8 r' J; `. q, |8 w L. D1 r, N# e! [7 Z. e/ u% E' r) D
Summary:
& r4 S; l1 t3 ]1. BIOS可以說是 chipset's driver !!!- [& e$ t: H: |' e: p7 W2 k
2. CPU所 issue 的 cycle會先抵達NB,由NB判定是給誰的;若不是 for DRAM or display,則會再轉發給SB,由它判定是要給誰的 |
|