|
最近相當忙,Blog也荒廢了好一陣子,利用一點時間上來澆澆水! r/ M! o5 Y1 u. {% K6 p
( l5 c% R. U: H. L- m9 x7 l2 s8 _
如同標題所提示的
' y! n; d1 a2 e: D一個 ARM 的系統在bootloader之前究竟有沒有事情可以做?
! |5 ]9 K, @# X. i: z" o+ H# G$ F( U F$ J& E) F
首先,一個系統必須先上電之後才會跑" {3 i5 t( M& c s! e
那麼第一個跑到的程式碼是什麼?
7 J# S& @& o8 J! k7 I7 d; x6 g
: |* i/ c9 s |( R% V4 X刻板印象上,聽說CPU會跑去一個固定的位置去抓第一道指令,這個位置通常是一. Y" v9 r$ _$ U( ]2 a R# R& i$ u
個flash ROM裡頭放著BIOS or bootloader,bootloader被執行之後,就會將kernel8 R$ A, C4 L9 V8 Q" Q
載入RAM,bla..bla..bla.....最後完成開機。(以上的印象在wince or Linux皆適用。)
; x% F* X1 s7 [/ W% ^# Q
; V& K, u9 I0 I7 z& Q4 C7 c那麼before bootloader不就應該什麼也沒有? 因為通電後就跑bootloader了不是嗎?( j# Z( f* W9 V, l7 a0 g* f5 T* ^5 N
其實真實的過程並非如此單純,甚至還可以說相當複雜。. T1 r! f; |: H7 L% _- ]/ @8 k3 p* q
4 `, T6 b. K' o! _, d( W% y在進入到bootloader之前,大致上還可以細分成兩到三個6 v, @, z e, `% _* n- c/ J- y) A
. A2 N3 ]2 r+ d7 x, \6 g
1) Collect Hardware Information
) q. b, R4 m- m2) Run BootROM
* v4 _6 @, d5 H/ g1 \3) Initialize Boot Device! {- s i, W% h
( `$ A9 g) ?+ P( I
1) 第一個動作是收集硬體的資訊,主要包含CPU跑多快?是哪種記憶體?跑多快?這個收集的6 p" ]; X9 S. ]' a. J4 z% E, m
動作通常由硬體做,或者是固定的資料(因為板子layout好就固定,不需要改來改去),所以 F" @, t7 h0 @$ h
通常非常快就結束。結束後,CPU這時候才會真正被通上電源。 |
評分
-
查看全部評分
|