|
最近相當忙,Blog也荒廢了好一陣子,利用一點時間上來澆澆水8 Z$ t1 E' |, O) B
7 `: S7 v* J3 X+ P7 E W) ? n
如同標題所提示的
/ q2 |& N4 }+ V# P% t+ u一個 ARM 的系統在bootloader之前究竟有沒有事情可以做?
8 L8 ?# E8 r8 n2 T9 m
$ r* {- c" i, J, Y1 s$ _首先,一個系統必須先上電之後才會跑
4 D' q8 W& V! B; E0 x$ Q+ x" h那麼第一個跑到的程式碼是什麼?; W) h, w# M. X
$ o. q" I7 A4 @/ ~2 w刻板印象上,聽說CPU會跑去一個固定的位置去抓第一道指令,這個位置通常是一
6 `' C; W5 Y" c% }9 K7 ~% O個flash ROM裡頭放著BIOS or bootloader,bootloader被執行之後,就會將kernel
6 I0 m) e% x% L# Y* m( q3 p載入RAM,bla..bla..bla.....最後完成開機。(以上的印象在wince or Linux皆適用。)
/ d$ x/ [! m. e4 G- y- C4 ]6 s3 \
& g- [) |& p% h5 Q+ T那麼before bootloader不就應該什麼也沒有? 因為通電後就跑bootloader了不是嗎?
3 s+ M( S8 F5 E: O' r其實真實的過程並非如此單純,甚至還可以說相當複雜。
7 Z6 |- [. {8 E& \: s. b( r. h* W7 u; M, z0 C
在進入到bootloader之前,大致上還可以細分成兩到三個
8 {: {' g' y( X) D" H8 q
( R: W- |" m2 Y. C! ^9 v+ t. P9 p: ~1) Collect Hardware Information
. X* }& S# C6 B8 k5 T+ D0 g2) Run BootROM
0 i9 l0 L2 Q* k6 g# Z0 D/ q+ {3) Initialize Boot Device
/ A. G$ n& @' ?1 X- Q+ M% x j* X: N9 _5 ^- h+ O6 A* K8 |
1) 第一個動作是收集硬體的資訊,主要包含CPU跑多快?是哪種記憶體?跑多快?這個收集的
0 k- C) L$ A4 X- s8 m動作通常由硬體做,或者是固定的資料(因為板子layout好就固定,不需要改來改去),所以6 H) ]( ]. T+ `" I
通常非常快就結束。結束後,CPU這時候才會真正被通上電源。 |
評分
-
查看全部評分
|