|
|
任何 firmware 都有相對應的硬體;也唯有深入瞭解硬體,才能寫出好的 firmware ! (當然,對 programming language 很熟,有技巧的的人可以寫出好的 firmware,但是,另一個層面是:對硬體很瞭解,所以所寫的firmware 與 H/W 搭配良好,這也是另一種值得追求的地步)& n, P9 l, L8 q5 g/ ^
+ D* S# ?5 a. U- Z% Z7 r OBIOS 就是 "主機板的 F/W". 所以,它的對象就是主機板上的所有 devices. (為了後續的解說,我只列出一些,其他的坊間書上都可找到)& r7 R9 u* j/ _* {# H/ {4 ]
! ~' g& z' x- O9 h& x* w( D2 G- [CPU]
2 `. S- G7 X H=> central process unit. 依架構不同有分 Intel or AMD cpu. 其工作之一是: fetch code->decode it->fetch operands->calculate->store result.2 n3 r/ F H" K# ?/ Q- }6 z0 I
, c8 X+ M# m8 \$ y; U6 a
- [North bridge]
, l7 S) Z& i3 }. f3 \& |* ]=> 即俗稱的北橋. 常見的 Intel 945/P/G,965 等是其北橋晶片代號. 它可以約略區分成四個 blocks(H/W view)/ d( R' S& B+ X( f% H6 w
1. Host interface: 即 與 CPU interface 的部分. ( K% \% x* E. X; [
2. DRAM interface: 即與 DRAM interface的部分5 I7 O5 i/ }$ ~5 W) r; J* w
3. Display interface: 即與 AGP/PCIe VGA interface的部分' V5 H1 r; d8 h, R+ H
4. Link interface: 即與 South bridge(南橋) interface的部分* S+ s" R- Z6 ~
6 E* B; n4 O* P# g$ L0 ]
簡單說,North bridge的功能是: Host block 承接 CPU 所 issue 的 cycle, 辨認(identify),並且將之 forward至 "正確的接收者" ( Ex. DRAM block, display block, or Link block )- F0 ?" U' @# }6 i( ^
' B# [8 a" m6 [0 N" g! _2 t所以,它像交通警察一樣,接收中央的命令,將來自四面八方的車流引導至正確的地方,讓整個城市的各部分各角落可以相互交流無虞.
; b$ e" T. i; t7 c) C# t! s! k2 m& g
-[South bridge]! k5 p% b) x! h9 t% [! z
=> 及俗稱的南橋. 常見的 Intel ICH7/8為其南橋晶片代號. 它"可能"包含以下的 blocks:
$ K% J2 x8 c# U1. Link interface: 即呼應北橋的部分." b) J8 [- B; B+ O! X; E4 i9 a: M
2. PCI block: 處理 PCI request部分(即 implement PCI spec H/W part)# B5 ]7 ~: _# i6 I' [9 _
3. ACPI block: implement ACPI H/W part
, O3 M* V" ~4 ]- E/ ?' D; k4. USB: ]+ S9 R( z0 ]( n
5. Audio
+ x4 b) ] L) I. T: ]; S8 z) Q! ^7 P6. SATA(AHCI)
. }4 S) C' ]$ Z, d3 O) x/ ^7. ...
) G$ r9 f3 C0 R" n# z S$ u# O: o& {7 b) U! p
所以, 南橋裡面包含許多我們常見的名詞, USB/1394/SATA/HDA/TPM/PCIE...等7 t* t/ h1 s' q/ n( k3 g8 R& k
% M7 x7 d! \% k( V0 @-[BIOS ROM]2 B K. y% p; v! j
=> 儲存 BIOS image的device. 常見的有 ISA ROM/LPC ROM/SPI ROM. 編譯出來的 BIOS binary file透過燒錄器或是 flash tool 燒錄到此 ROM中. 內容是0101...的 binary code
; o5 x2 |; J1 \; e* I4 w: V* h3 T% S, |* Q8 c& L8 B L
所以,總結來說: 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裡...)
8 @: u1 s9 @; ~$ v. N' ~
7 V4 ~# a7 B' [! t以上依序所講到的 CPU->NB->SB->ROM,將在後面的敘述中用來說明一些觀念及flow.
7 P2 f- w+ ?% D( [& u' N6 s. u, {& D8 y; _7 \
Summary:, M1 K3 _4 g w9 f( {) \
1. BIOS可以說是 chipset's driver !!!' f5 Q: ], }3 i/ q9 p
2. CPU所 issue 的 cycle會先抵達NB,由NB判定是給誰的;若不是 for DRAM or display,則會再轉發給SB,由它判定是要給誰的 |
|