|
最近相當忙,Blog也荒廢了好一陣子,利用一點時間上來澆澆水
0 o& b2 Q1 G! A" d7 O' t* x9 N1 }) J( N# |8 h$ C
如同標題所提示的6 A6 |7 S" v( ^1 i0 f
一個 ARM 的系統在bootloader之前究竟有沒有事情可以做?
, t$ _5 |4 U w3 x4 u" A! J& {' k3 F; x: b1 D+ X
首先,一個系統必須先上電之後才會跑- L! V0 [8 l( l9 E
那麼第一個跑到的程式碼是什麼?
9 p1 j, {) h- K4 E: y0 F: B# g# ~$ C; ?" ]
刻板印象上,聽說CPU會跑去一個固定的位置去抓第一道指令,這個位置通常是一' ?6 N: b1 v+ f1 _
個flash ROM裡頭放著BIOS or bootloader,bootloader被執行之後,就會將kernel
) G- S f: @& A5 c載入RAM,bla..bla..bla.....最後完成開機。(以上的印象在wince or Linux皆適用。)+ i" u+ z; |: _# z$ U1 u6 T" g
2 C: A& _8 k; ~8 p9 _; [# ?: Z+ i那麼before bootloader不就應該什麼也沒有? 因為通電後就跑bootloader了不是嗎?& j) b& G4 ~ N7 V1 F. E
其實真實的過程並非如此單純,甚至還可以說相當複雜。
" d, J: C! D! b0 O' n
9 X) p% W9 V) K2 m; O l在進入到bootloader之前,大致上還可以細分成兩到三個
% N: z, a" B0 w. M. o) A
* c7 D+ @3 @9 Y, s# j9 f. G6 V8 V1) Collect Hardware Information
; N6 e+ h8 @+ [) p" C2) Run BootROM" v. g/ o7 s S+ A& j( o p
3) Initialize Boot Device, |. Y5 L$ ?! }& Q7 q
, H0 ?$ P+ k# j) f1 G5 w- e9 |
1) 第一個動作是收集硬體的資訊,主要包含CPU跑多快?是哪種記憶體?跑多快?這個收集的. z) F9 N7 E4 p' j( G
動作通常由硬體做,或者是固定的資料(因為板子layout好就固定,不需要改來改去),所以
, ~, I7 w6 ]& g# d! e7 O通常非常快就結束。結束後,CPU這時候才會真正被通上電源。 |
評分
-
查看全部評分
|