|
最近相當忙,Blog也荒廢了好一陣子,利用一點時間上來澆澆水5 ~: f% s5 [( d& ~1 c
2 d6 t' {/ F0 x" n7 F+ `如同標題所提示的3 T: e7 [, F v* t$ \! D
一個 ARM 的系統在bootloader之前究竟有沒有事情可以做?
5 n% i6 R- C: \, m: @# b* G9 O C$ _* x% A6 ^& Q
首先,一個系統必須先上電之後才會跑
* v4 F1 R* g) w& |, {1 \那麼第一個跑到的程式碼是什麼?' r5 ~9 d( G# s7 b8 i$ t
, i# m1 G% O2 r3 T6 k: S9 t: a
刻板印象上,聽說CPU會跑去一個固定的位置去抓第一道指令,這個位置通常是一* n" k1 b6 [; J
個flash ROM裡頭放著BIOS or bootloader,bootloader被執行之後,就會將kernel% P$ c' ~, A- R9 o8 y7 ?9 [" V
載入RAM,bla..bla..bla.....最後完成開機。(以上的印象在wince or Linux皆適用。)
! {! p4 r" {2 I6 ]% ?' F& v
" l* x" Y' _! z那麼before bootloader不就應該什麼也沒有? 因為通電後就跑bootloader了不是嗎?7 l) ~. u8 K& a3 `" ]) M
其實真實的過程並非如此單純,甚至還可以說相當複雜。9 r) e, ~: i$ U! A
: E4 I" d1 C: Y/ G" M5 _2 ~, u/ E在進入到bootloader之前,大致上還可以細分成兩到三個% q$ l) o& ~7 l6 m
3 j. W, M% X% M$ J4 V: J( ?% b+ ]% e0 o
1) Collect Hardware Information
2 l; E" {( t$ L2) Run BootROM' I' ?4 Y8 b l7 }2 \/ q
3) Initialize Boot Device* _% X$ @$ S9 U! b& @
8 t ] B8 C" `9 O1 N' W
1) 第一個動作是收集硬體的資訊,主要包含CPU跑多快?是哪種記憶體?跑多快?這個收集的1 }9 t3 [8 g- V8 i5 g# k! @ n
動作通常由硬體做,或者是固定的資料(因為板子layout好就固定,不需要改來改去),所以
8 W% P- n$ a: _9 E1 K通常非常快就結束。結束後,CPU這時候才會真正被通上電源。 |
評分
-
查看全部評分
|