|
最近相當忙,Blog也荒廢了好一陣子,利用一點時間上來澆澆水1 [, ~: E8 D/ m0 q1 ~3 s
/ }2 W0 Q% |# A. F* i8 b
如同標題所提示的8 d4 ~. Q! _! X. a" M1 V/ }9 X
一個 ARM 的系統在bootloader之前究竟有沒有事情可以做?
. q+ A2 m, g+ m3 O
0 U6 M7 n8 a B& {& m首先,一個系統必須先上電之後才會跑" ]1 h& p6 q$ H+ f- Q6 U
那麼第一個跑到的程式碼是什麼?
4 T4 i8 w7 J" N( Z* h: O4 }- U
5 C! U6 F; t1 o6 m, H6 V- @2 L刻板印象上,聽說CPU會跑去一個固定的位置去抓第一道指令,這個位置通常是一
. F$ m& H3 ]" J' x$ k2 w個flash ROM裡頭放著BIOS or bootloader,bootloader被執行之後,就會將kernel H/ ?' H' i% ]+ q
載入RAM,bla..bla..bla.....最後完成開機。(以上的印象在wince or Linux皆適用。) m# I U- c+ S$ @% V$ \0 ?
% s$ Y+ U( ]7 ]0 t0 o: b" ~ K那麼before bootloader不就應該什麼也沒有? 因為通電後就跑bootloader了不是嗎?
: ^0 j6 i# b3 x# w4 G* {1 z+ G其實真實的過程並非如此單純,甚至還可以說相當複雜。& {8 G) \* b) ?, H: r& r7 l4 j
0 k3 w, E: o* O# \" y O/ d( H在進入到bootloader之前,大致上還可以細分成兩到三個& q$ [0 b6 }1 Y
# |0 P0 {) Y& R7 J1) Collect Hardware Information
7 s. k( K3 a z4 T) `2) Run BootROM D" h8 T: \- _4 d
3) Initialize Boot Device
- V+ i$ U. f& r; u: W# i: P) [& l5 ]0 Z4 v3 d+ I7 |( Y$ M. X6 w
1) 第一個動作是收集硬體的資訊,主要包含CPU跑多快?是哪種記憶體?跑多快?這個收集的
5 g+ O* w9 ^; I: Y) S: }" e+ N. C. y動作通常由硬體做,或者是固定的資料(因為板子layout好就固定,不需要改來改去),所以3 Q3 ?" P; {9 C* l6 ^2 Q" m7 b( \
通常非常快就結束。結束後,CPU這時候才會真正被通上電源。 |
評分
-
查看全部評分
|