|
任何 firmware 都有相對應的硬體;也唯有深入瞭解硬體,才能寫出好的 firmware ! (當然,對 programming language 很熟,有技巧的的人可以寫出好的 firmware,但是,另一個層面是:對硬體很瞭解,所以所寫的firmware 與 H/W 搭配良好,這也是另一種值得追求的地步)
9 o% X1 J+ ^! z/ a, q' y
* l) I4 ^9 T j( p5 n; YBIOS 就是 "主機板的 F/W". 所以,它的對象就是主機板上的所有 devices. (為了後續的解說,我只列出一些,其他的坊間書上都可找到)
1 D/ z! P. T: K1 l2 y
4 t8 O' h" n4 \0 V0 L4 C' }- [CPU]
5 Y, \3 s1 f* D% ]8 w4 q" ^=> central process unit. 依架構不同有分 Intel or AMD cpu. 其工作之一是: fetch code->decode it->fetch operands->calculate->store result.5 R& [ q( B" l. s6 v
3 Y. d* t1 F# V; `
- [North bridge]
1 |9 Q. J- r& P! Z=> 即俗稱的北橋. 常見的 Intel 945/P/G,965 等是其北橋晶片代號. 它可以約略區分成四個 blocks(H/W view)
2 k0 o- u9 p$ n9 e, P$ Y1. Host interface: 即 與 CPU interface 的部分. & T' |1 ?) d# d- c1 F
2. DRAM interface: 即與 DRAM interface的部分
" k" u/ n1 S& B) A0 n# |# p3. Display interface: 即與 AGP/PCIe VGA interface的部分8 h- O* y6 h1 d: K) ?/ _$ R- T
4. Link interface: 即與 South bridge(南橋) interface的部分2 C2 w. w; T. R7 L. F* G* |* H
6 H7 @( T( n7 P簡單說,North bridge的功能是: Host block 承接 CPU 所 issue 的 cycle, 辨認(identify),並且將之 forward至 "正確的接收者" ( Ex. DRAM block, display block, or Link block )
( u2 \$ j k9 }, `( `4 F5 k
! p e8 P1 O' X/ O# @% k$ a所以,它像交通警察一樣,接收中央的命令,將來自四面八方的車流引導至正確的地方,讓整個城市的各部分各角落可以相互交流無虞.) n) m4 |" k q9 x% \
, _/ k1 I5 s& M2 B
-[South bridge]. |5 |" e1 A) O% t
=> 及俗稱的南橋. 常見的 Intel ICH7/8為其南橋晶片代號. 它"可能"包含以下的 blocks:4 Y/ O( T2 ~' |5 y( s: Q& t. J: ^$ ?
1. Link interface: 即呼應北橋的部分.
3 N$ L) j# {* y$ l) V2. PCI block: 處理 PCI request部分(即 implement PCI spec H/W part)6 s" B! a* q& K' E$ {0 w) Q0 x
3. ACPI block: implement ACPI H/W part* r; b ~% u- L( d
4. USB
$ P Q3 f* w9 `8 G) g5. Audio
7 s- u$ ^. }! y: t! V6. SATA(AHCI)
: T2 V9 s' w) _0 V4 k7. ...
$ f) Y0 y" b4 j- G# a' q1 T/ [& T6 q
所以, 南橋裡面包含許多我們常見的名詞, USB/1394/SATA/HDA/TPM/PCIE...等" a$ b# u3 a. w. L. |. S
' w1 b1 P! o5 K' A9 a7 X2 _2 v- q: ~-[BIOS ROM]
, ?/ ~# z1 h- T4 s0 i=> 儲存 BIOS image的device. 常見的有 ISA ROM/LPC ROM/SPI ROM. 編譯出來的 BIOS binary file透過燒錄器或是 flash tool 燒錄到此 ROM中. 內容是0101...的 binary code5 \& r t9 i3 S9 l8 G* m2 R
2 |; f8 _/ D$ i% K& i" s% 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裡...)
' u7 l3 j+ _6 ~! R- D( F$ H8 I( S# t6 C2 {, u, W
以上依序所講到的 CPU->NB->SB->ROM,將在後面的敘述中用來說明一些觀念及flow.
) g A- `6 _: P1 z3 o# y
0 e+ P/ ?5 t. ^9 Q, m# [9 p }Summary:
9 Z3 s) G6 h0 w% m& j1. BIOS可以說是 chipset's driver !!!
: T7 g7 V% e& o; j- X) r2. CPU所 issue 的 cycle會先抵達NB,由NB判定是給誰的;若不是 for DRAM or display,則會再轉發給SB,由它判定是要給誰的 |
|