|
最近相當忙,Blog也荒廢了好一陣子,利用一點時間上來澆澆水/ c1 H/ b9 L" M, }
/ l5 D' u/ [0 N9 V
如同標題所提示的
( s/ F }! r* a7 C# |) B4 U# m( ]7 q一個 ARM 的系統在bootloader之前究竟有沒有事情可以做?
P: z- l$ c9 C" v' _7 [! z$ _! m* o: m9 ?' t
首先,一個系統必須先上電之後才會跑
( U- {; ]2 s4 k8 [/ a+ s5 a7 z那麼第一個跑到的程式碼是什麼?
8 X3 t/ |8 E: `, \, c
% Z5 r& _# ?6 F7 B% S. p刻板印象上,聽說CPU會跑去一個固定的位置去抓第一道指令,這個位置通常是一. f. u5 {/ G5 ~- z
個flash ROM裡頭放著BIOS or bootloader,bootloader被執行之後,就會將kernel
. y, c) u8 c, _' [' S; \( c# v+ r載入RAM,bla..bla..bla.....最後完成開機。(以上的印象在wince or Linux皆適用。)
^. ^5 a1 Y/ V1 l7 Z( X6 p! B {5 J ~; g, R% Z
那麼before bootloader不就應該什麼也沒有? 因為通電後就跑bootloader了不是嗎? N) {$ S* m/ F' V
其實真實的過程並非如此單純,甚至還可以說相當複雜。 }/ Z! B: }) G0 q2 C- r3 u
4 E! w( r& W! |7 R
在進入到bootloader之前,大致上還可以細分成兩到三個7 X! V8 J) g+ s; \. E' {& m
2 y% v% S0 z. M: N0 N: k
1) Collect Hardware Information3 U8 y4 \) p" z" T
2) Run BootROM
# f) I' z: ]+ U! n3) Initialize Boot Device* h+ u0 M9 M( m
5 T" e" v+ g( b! f, t& b
1) 第一個動作是收集硬體的資訊,主要包含CPU跑多快?是哪種記憶體?跑多快?這個收集的0 |! _8 e& Y# }6 {' v
動作通常由硬體做,或者是固定的資料(因為板子layout好就固定,不需要改來改去),所以
- o# t. H. x: L. b5 [通常非常快就結束。結束後,CPU這時候才會真正被通上電源。 |
評分
-
查看全部評分
|