|
|
任何 firmware 都有相對應的硬體;也唯有深入瞭解硬體,才能寫出好的 firmware ! (當然,對 programming language 很熟,有技巧的的人可以寫出好的 firmware,但是,另一個層面是:對硬體很瞭解,所以所寫的firmware 與 H/W 搭配良好,這也是另一種值得追求的地步)* M1 ?5 p# n0 L$ W: f4 t
9 e+ |9 h9 Y' I, T
BIOS 就是 "主機板的 F/W". 所以,它的對象就是主機板上的所有 devices. (為了後續的解說,我只列出一些,其他的坊間書上都可找到)
: P8 @, n: d8 W+ {, i+ n$ {
% p) `/ D, _- F8 C7 j3 J; x7 W5 e- [CPU]
. i$ o( @- B. A=> central process unit. 依架構不同有分 Intel or AMD cpu. 其工作之一是: fetch code->decode it->fetch operands->calculate->store result.6 G# v: H9 X, @
. t) E1 v- S% y6 H; _- [North bridge]/ F+ ^! M5 Z: x: j& G
=> 即俗稱的北橋. 常見的 Intel 945/P/G,965 等是其北橋晶片代號. 它可以約略區分成四個 blocks(H/W view)
( k) e3 C7 w% e* I# P/ k0 P, X1. Host interface: 即 與 CPU interface 的部分.
: J9 [* m5 H$ }1 B2. DRAM interface: 即與 DRAM interface的部分 g' V. o' H9 m; C
3. Display interface: 即與 AGP/PCIe VGA interface的部分8 n+ p4 \6 Y/ a3 [0 L( S
4. Link interface: 即與 South bridge(南橋) interface的部分
/ e8 [6 M9 c. k7 ]. n
+ r; w- B5 N0 ^簡單說,North bridge的功能是: Host block 承接 CPU 所 issue 的 cycle, 辨認(identify),並且將之 forward至 "正確的接收者" ( Ex. DRAM block, display block, or Link block )5 R; u+ t) M1 d, K# j! A
; T7 ^! |6 [' W& k. k: p
所以,它像交通警察一樣,接收中央的命令,將來自四面八方的車流引導至正確的地方,讓整個城市的各部分各角落可以相互交流無虞.7 R/ w, }" f8 R0 Z% S. B
* K2 | h* G, S8 `* A- I+ l-[South bridge]
* F& d4 A9 D* E1 x6 G1 H=> 及俗稱的南橋. 常見的 Intel ICH7/8為其南橋晶片代號. 它"可能"包含以下的 blocks:
. C9 A) y4 b( N H$ w4 u2 u1. Link interface: 即呼應北橋的部分.6 H+ d3 V+ R4 X9 V' B
2. PCI block: 處理 PCI request部分(即 implement PCI spec H/W part)/ _0 S/ Y& y$ Z1 b
3. ACPI block: implement ACPI H/W part
$ ]: o6 w3 `/ s! [8 t0 F2 n4. USB4 C0 `8 u" r9 s+ B6 y. N e& N! y7 i/ H
5. Audio, b- f5 J. N; [9 [) w
6. SATA(AHCI)4 {/ q" u4 r3 M6 ^( t" t
7. ...
8 Y( s" x1 ]4 B0 P4 h4 r8 t6 i1 v) W! E: G& k6 l
所以, 南橋裡面包含許多我們常見的名詞, USB/1394/SATA/HDA/TPM/PCIE...等7 K6 }) r; Z( k$ B$ r9 ]! Z
( M1 C2 b$ q# }9 P% u" a: h-[BIOS ROM]
5 X% x$ G3 t, E" V=> 儲存 BIOS image的device. 常見的有 ISA ROM/LPC ROM/SPI ROM. 編譯出來的 BIOS binary file透過燒錄器或是 flash tool 燒錄到此 ROM中. 內容是0101...的 binary code
' n# g% N/ s4 p1 S/ ^, Z& H$ ~% B) g1 m6 u5 N
所以,總結來說: 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裡...)
; |/ L7 a# e9 K( k% P6 }* B( c, M% V: P! Q
以上依序所講到的 CPU->NB->SB->ROM,將在後面的敘述中用來說明一些觀念及flow.
' V& l, I. e: |9 Z4 w
7 [" x5 v- P/ \7 L' p1 @) @' {Summary:9 p! x# k; C! |' I; K
1. BIOS可以說是 chipset's driver !!!
3 x7 h# s( U( C* O2. CPU所 issue 的 cycle會先抵達NB,由NB判定是給誰的;若不是 for DRAM or display,則會再轉發給SB,由它判定是要給誰的 |
|