|
最近相當忙,Blog也荒廢了好一陣子,利用一點時間上來澆澆水2 s8 f, h6 p$ R1 Z1 m* W2 [( m- t
% X+ J- G, P6 H. X8 Z7 d
如同標題所提示的
( t) O* E/ ~+ I1 L' {* x+ T6 E一個 ARM 的系統在bootloader之前究竟有沒有事情可以做?; I& g; @% k6 i3 D! j) e, B. g: J
: ^& T* T3 W o+ N8 Z' i! c首先,一個系統必須先上電之後才會跑
2 q4 }. H* F3 H那麼第一個跑到的程式碼是什麼?
, [) S1 b* k2 e+ W; @: t; p
& P' j7 f# q6 |; d刻板印象上,聽說CPU會跑去一個固定的位置去抓第一道指令,這個位置通常是一' q1 H; x1 w* E) p' m& m
個flash ROM裡頭放著BIOS or bootloader,bootloader被執行之後,就會將kernel) l; Z5 e" y* T! }6 q
載入RAM,bla..bla..bla.....最後完成開機。(以上的印象在wince or Linux皆適用。)
8 _$ Z0 M# Z9 M8 Y6 z" R; G- R% h
那麼before bootloader不就應該什麼也沒有? 因為通電後就跑bootloader了不是嗎?
; G, j8 e# A) s( x其實真實的過程並非如此單純,甚至還可以說相當複雜。0 E: L5 d: i* s/ ?
7 L3 s$ c9 T4 w/ `9 T3 R在進入到bootloader之前,大致上還可以細分成兩到三個
$ N, D; k P- s
; ?3 e) r5 ~4 ~$ e' w1) Collect Hardware Information
1 y# ^! F7 ^3 A4 v! C( h2) Run BootROM
; U- T: i. J8 x4 E; j, q6 M3) Initialize Boot Device
. N7 D1 s$ w; N4 B$ j- K
* R2 \8 Q) }! w) C7 X1) 第一個動作是收集硬體的資訊,主要包含CPU跑多快?是哪種記憶體?跑多快?這個收集的, K4 t) I y P# M6 f/ K
動作通常由硬體做,或者是固定的資料(因為板子layout好就固定,不需要改來改去),所以( S$ g' E" N- _0 T9 D( J
通常非常快就結束。結束後,CPU這時候才會真正被通上電源。 |
評分
-
查看全部評分
|