|
|
任何 firmware 都有相對應的硬體;也唯有深入瞭解硬體,才能寫出好的 firmware ! (當然,對 programming language 很熟,有技巧的的人可以寫出好的 firmware,但是,另一個層面是:對硬體很瞭解,所以所寫的firmware 與 H/W 搭配良好,這也是另一種值得追求的地步)1 m, n k5 r6 t7 M9 o' K
6 y+ J5 V9 }" U( t3 j: V6 RBIOS 就是 "主機板的 F/W". 所以,它的對象就是主機板上的所有 devices. (為了後續的解說,我只列出一些,其他的坊間書上都可找到)
7 e6 b3 E: x1 B* g; t+ { _0 k" ~3 P$ E
- [CPU]2 u* K5 \" H! R% t2 U6 |5 L
=> central process unit. 依架構不同有分 Intel or AMD cpu. 其工作之一是: fetch code->decode it->fetch operands->calculate->store result.
1 M: v5 o. }0 }' k) R, Q3 P* |, m
- [North bridge]* I7 E; b t( D6 ]* S
=> 即俗稱的北橋. 常見的 Intel 945/P/G,965 等是其北橋晶片代號. 它可以約略區分成四個 blocks(H/W view)1 o1 r. D1 s+ s# ~# e9 n
1. Host interface: 即 與 CPU interface 的部分.
3 g- ~) x& b: a" z2. DRAM interface: 即與 DRAM interface的部分
% H9 U; h) H0 {6 f! z2 o3. Display interface: 即與 AGP/PCIe VGA interface的部分4 N- {' L1 g9 q8 T" W' M* [
4. Link interface: 即與 South bridge(南橋) interface的部分& F& Q' j' k8 r6 c2 s
; Q: B7 u$ N" P. J6 M簡單說,North bridge的功能是: Host block 承接 CPU 所 issue 的 cycle, 辨認(identify),並且將之 forward至 "正確的接收者" ( Ex. DRAM block, display block, or Link block )
* A% H+ X' E. e( Z: J
: y' H+ M9 Y& z1 C所以,它像交通警察一樣,接收中央的命令,將來自四面八方的車流引導至正確的地方,讓整個城市的各部分各角落可以相互交流無虞. G x, L" U1 p6 f
, y/ T8 s: f" J* V3 I
-[South bridge]
6 z% V. `7 Y* H3 E% _. [; X6 H=> 及俗稱的南橋. 常見的 Intel ICH7/8為其南橋晶片代號. 它"可能"包含以下的 blocks:6 O, j# i/ }: Y
1. Link interface: 即呼應北橋的部分.
. @1 a: ]5 X* p5 b* N/ `2. PCI block: 處理 PCI request部分(即 implement PCI spec H/W part)- b+ [3 F1 E+ ]7 c8 R! L
3. ACPI block: implement ACPI H/W part, @+ C: y+ Y1 b" E8 {6 K
4. USB
( F4 I) r& { j6 W e+ l8 S5. Audio! _ d j/ w, A6 y
6. SATA(AHCI)
# G" N; a3 X1 n6 n$ z. q7 t1 k7. ...5 ?. z) C0 t8 U! E3 ~
' c% z! @9 h* D所以, 南橋裡面包含許多我們常見的名詞, USB/1394/SATA/HDA/TPM/PCIE...等
: p k- n, e/ V( i4 k5 }2 u2 f& u- Q A* a
2 h- {6 g8 M$ k( z) T6 P-[BIOS ROM]/ M% o6 C- n% A2 q
=> 儲存 BIOS image的device. 常見的有 ISA ROM/LPC ROM/SPI ROM. 編譯出來的 BIOS binary file透過燒錄器或是 flash tool 燒錄到此 ROM中. 內容是0101...的 binary code$ Z8 E, N$ {5 k1 w. W4 X) K
# N' Q7 I9 a# D( W/ f
所以,總結來說: 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裡...)
" N4 w% G# f6 X6 A. a; d& N$ l& h1 V% @# u* ?( F
以上依序所講到的 CPU->NB->SB->ROM,將在後面的敘述中用來說明一些觀念及flow.
* g8 o2 o9 x3 M0 H7 G2 k9 b; j5 h8 ^& }* Y
Summary:
9 Z5 j. V) A. s$ [4 K1 ^3 o* l1. BIOS可以說是 chipset's driver !!!
( O7 ?" ]$ m! i: F! e, C2. CPU所 issue 的 cycle會先抵達NB,由NB判定是給誰的;若不是 for DRAM or display,則會再轉發給SB,由它判定是要給誰的 |
|