Chip123 科技應用創新平台
標題:
Before Bootloader~
[打印本頁]
作者:
gogojesse
時間:
2009-11-28 12:44 AM
標題:
Before Bootloader~
最近相當忙,Blog也荒廢了好一陣子,利用一點時間上來澆澆水
4 Y1 Q* H* I8 m+ y
5 G5 C2 j6 R: |! t
如同標題所提示的
2 I5 A R1 w& y; C; L# o5 Y: s
一個 ARM 的系統在bootloader之前究竟有沒有事情可以做?
$ U% U' m! C5 M) L
$ f+ p0 J3 f6 S' y" E8 f0 I
首先,一個系統必須先上電之後才會跑
: Z6 F! V* k/ o- b, U
那麼第一個跑到的程式碼是什麼?
# b# |: T, U8 j: J% Y
8 o. g. X, B/ I/ L- Y* j
刻板印象上,聽說CPU會跑去一個固定的位置去抓第一道指令,這個位置通常是一
2 Y% _$ a2 I9 m3 x* R9 J
個flash ROM裡頭放著BIOS or bootloader,bootloader被執行之後,就會將kernel
0 J8 ?1 ^7 G$ l/ H' c
載入RAM,bla..bla..bla.....最後完成開機。(以上的印象在wince or Linux皆適用。)
1 d+ W/ ~/ Y: e F! a, }% M
. [! J* M$ y# i& U# s
那麼before bootloader不就應該什麼也沒有? 因為通電後就跑bootloader了不是嗎?
) Q) G# V% H; y8 n5 L
其實真實的過程並非如此單純,甚至還可以說相當複雜。
' J; P, N% g8 R. W! ?3 ]( l8 t
% E! c. Z0 C) u( `5 U0 c; l
在進入到bootloader之前,大致上還可以細分成兩到三個
; V( |" C. I8 e
4 S% n% G. F" c) i2 A
1) Collect Hardware Information
, B! H0 ], }6 X9 s% B
2) Run BootROM
) H0 } H8 J( p \4 U+ M. H J
3) Initialize Boot Device
. F; O" I. h, A# ]
6 |! n, o6 e0 `
1) 第一個動作是收集硬體的資訊,主要包含CPU跑多快?是哪種記憶體?跑多快?這個收集的
5 w! a# U5 ^; W8 c0 t8 s
動作通常由硬體做,或者是固定的資料(因為板子layout好就固定,不需要改來改去),所以
& ^+ D5 A; K4 G# P% k5 R
通常非常快就結束。結束後,CPU這時候才會真正被通上電源。
作者:
gogojesse
時間:
2009-11-28 12:45 AM
2) 上電之後,CPU其實不是去外部的flash ROM拿資料,而是在那內部自己本身的一個ROM
' a# q0 ]& f/ v
裡頭拿資料開始執行,這個ROM通常叫做BootROM。BootROM裡頭的程式就分析剛剛第一
9 \% `" X# ~) R* u# a
的動作收集到的資訊,去做對應的工作,可能的工作例如
& Q% `3 x7 u& K6 A" {3 f
a) 設置程式執行的stack (需要用到CPU裡頭的SRAM or Cache)
. G/ T$ l# F9 T- u! n! v
b) 初始化DDR RAM,以便可以將bootloader執行使用(有些系統還是放在bootloader自己做)。
1 L" _9 g. u" w+ t/ p$ P7 `2 v1 N
% B- O( A6 E9 T7 |$ e
3) 一開始的初始化結束後,接著就可以初始化可能放置bootloader的地方,例如
$ U3 C6 T; }; m( @+ O" Z
SATA/PCIE/外部FLASH ROM等等。這樣便可以到這幾個可能的位置去找到bootloader。
6 w( o6 F7 r5 t- M$ n7 d
/ K- h' A; C; `/ Z, e# ^
以上就是在進入到bootloader可能的動作,CPU會支援這樣的功能,原因是希望可以讓CPU
" Z1 D" o0 {. X2 B$ v
支援更多種的開機方式,例如可以用SPI Flash,或是接SATA Disk等等,這樣客戶在使用
& S1 }4 _$ ?% W/ N" E
這顆CPU的時候,可以選擇的boot device就比較多種類,甚至版子就可以省掉flash ROM
- W! m5 @/ J z* Y. I
的cost直接把bootloader放到硬碟上。
2 K: ^% O7 ~' \- z, w+ j9 b( p& M2 P+ B
# k, K+ V m7 p& s% u" R |
以上粗略的解釋before bootloader的可能的動作,會說『可能』是因為各家做法多多少少
8 Z: ~1 [" B' W- U- {# |
有些差異,但其實想達到的目的都是差不多的。而且因為bootROM可能只能燒錄一次,所以
- \9 ^! X" _" P
增加一些彈性,可以避免以後無法重新燒錄,又需支援不同介面的窘況。
6 n! U- O5 R3 |2 P
3 u. F4 ~) v* x+ E# H. O) X" g
blog link:
http://gogojesseco.blogspot.com/2009/11/before-bootloader.html
歡迎光臨 Chip123 科技應用創新平台 (http://chip123.com/)
Powered by Discuz! X3.2