|
最近相當忙,Blog也荒廢了好一陣子,利用一點時間上來澆澆水
) Q# d: U1 w: _* @* o4 h, {- _+ I) b7 [: e
如同標題所提示的3 S4 Z/ z% c8 y/ G
一個 ARM 的系統在bootloader之前究竟有沒有事情可以做?: e4 ^8 S0 g# Q+ `- }1 V
5 ~4 ?" g( \4 z
首先,一個系統必須先上電之後才會跑
0 _3 O0 `' V0 B6 k0 v那麼第一個跑到的程式碼是什麼?, K2 O2 q, D9 a# }' x' k
/ ?3 g" D8 b+ |$ Y刻板印象上,聽說CPU會跑去一個固定的位置去抓第一道指令,這個位置通常是一" w7 U% v$ k/ P
個flash ROM裡頭放著BIOS or bootloader,bootloader被執行之後,就會將kernel
; E" k6 l& K! d4 o7 C7 [6 A2 `3 w載入RAM,bla..bla..bla.....最後完成開機。(以上的印象在wince or Linux皆適用。)
2 u$ G: H% C! `+ I! v7 @% k$ ~5 r# b" N3 Y% G" K4 C- q% }5 ? G; P
那麼before bootloader不就應該什麼也沒有? 因為通電後就跑bootloader了不是嗎?7 _+ U: `1 D. K8 \8 m8 W
其實真實的過程並非如此單純,甚至還可以說相當複雜。
2 q; u* v* i' y; l8 v9 A% g5 q' ?$ W f' Y# m; J9 a
在進入到bootloader之前,大致上還可以細分成兩到三個( D# E2 ^# q3 {$ Q- g5 B
7 j0 N) l, k9 B6 @1 k
1) Collect Hardware Information
7 A; O4 [8 c0 a+ I. n: K2) Run BootROM- @5 ^( N; ^3 [2 x) L3 N( x
3) Initialize Boot Device
9 B# T) f2 q3 X' w5 g; {7 Q; A; N! e7 V! w
1) 第一個動作是收集硬體的資訊,主要包含CPU跑多快?是哪種記憶體?跑多快?這個收集的
( d( G% Q' N! L$ j' I動作通常由硬體做,或者是固定的資料(因為板子layout好就固定,不需要改來改去),所以
7 y7 K8 i% c& Z& S通常非常快就結束。結束後,CPU這時候才會真正被通上電源。 |
評分
-
查看全部評分
|