|
最近相當忙,Blog也荒廢了好一陣子,利用一點時間上來澆澆水
( `) n7 L, M/ ~' ]' P* r9 ` Q
' |9 C T7 p. `. ~如同標題所提示的1 u& g8 t7 l- i5 J" s: ]
一個 ARM 的系統在bootloader之前究竟有沒有事情可以做?+ A* M; g( z* T) Z$ F
) `2 e; G5 B: E) \: ]! z+ g N3 |- J
首先,一個系統必須先上電之後才會跑
* l. S# l0 r, L8 ]7 y, x那麼第一個跑到的程式碼是什麼?
8 {" B0 g* y8 ~. n0 e+ U) @; }; y+ F) E2 L1 {! a: E" u2 [. v
刻板印象上,聽說CPU會跑去一個固定的位置去抓第一道指令,這個位置通常是一
4 Q( Q/ ]8 }% _' r) N! u個flash ROM裡頭放著BIOS or bootloader,bootloader被執行之後,就會將kernel
) f" [: B+ E! z- z7 z! U' V載入RAM,bla..bla..bla.....最後完成開機。(以上的印象在wince or Linux皆適用。)
* v, Q/ u3 y' J& S2 w- \8 ^
: e8 y4 l- U. }8 A% y6 j- a o那麼before bootloader不就應該什麼也沒有? 因為通電後就跑bootloader了不是嗎?1 g. n9 n+ e5 z; j0 W+ T: y
其實真實的過程並非如此單純,甚至還可以說相當複雜。% q$ q5 K' k( F; B+ T
6 g+ }& `8 ^7 W8 ~3 u在進入到bootloader之前,大致上還可以細分成兩到三個
% Z# U' N( I4 V& |- ^- s, B0 o- A6 p* ~& x+ j* Z. V: e' F" K: A( D, E
1) Collect Hardware Information, m9 k. G4 j( }2 `' R
2) Run BootROM
) n' p0 `) v$ O3) Initialize Boot Device
& g% O4 r( p, o6 y: |
}- E! D/ ^* u/ q6 J1) 第一個動作是收集硬體的資訊,主要包含CPU跑多快?是哪種記憶體?跑多快?這個收集的
! `: y! |! h. U) @' j. ?) g動作通常由硬體做,或者是固定的資料(因為板子layout好就固定,不需要改來改去),所以
' ?3 B" x, ? ]8 h- @通常非常快就結束。結束後,CPU這時候才會真正被通上電源。 |
評分
-
查看全部評分
|