|
最近相當忙,Blog也荒廢了好一陣子,利用一點時間上來澆澆水! S5 k, v C3 a/ {
7 D. h, ]4 K8 Z如同標題所提示的
1 }: U% I4 }7 K: D; j/ l4 b一個 ARM 的系統在bootloader之前究竟有沒有事情可以做?
& O& K; q1 r) d2 \6 f/ G1 ]- G0 E
首先,一個系統必須先上電之後才會跑& M+ w: ~$ ]" }/ M1 Y# ]/ q# i# b
那麼第一個跑到的程式碼是什麼?
8 x+ _, ^$ \- V5 o. m2 u2 U" q! f0 c! o
刻板印象上,聽說CPU會跑去一個固定的位置去抓第一道指令,這個位置通常是一
- `7 u7 \% _/ F# A$ [, K7 G' G8 U" t! L個flash ROM裡頭放著BIOS or bootloader,bootloader被執行之後,就會將kernel. w" X& u* W' s& {
載入RAM,bla..bla..bla.....最後完成開機。(以上的印象在wince or Linux皆適用。)
( \. Q# h6 n6 v. X8 r* e+ P1 V) @
那麼before bootloader不就應該什麼也沒有? 因為通電後就跑bootloader了不是嗎?
/ m/ [- c% y6 h3 g! `其實真實的過程並非如此單純,甚至還可以說相當複雜。
, A$ T6 j1 }& v8 h8 c
2 N( ~. i) |- ^ c' k+ ~在進入到bootloader之前,大致上還可以細分成兩到三個
" Y; @0 a' H. T: L/ w0 H* b+ q* Z
8 t) o* v: _1 y' K \6 @6 k1) Collect Hardware Information: C, A, ]2 S1 g* g. I
2) Run BootROM. X6 P( U6 k1 N: e9 |! v x
3) Initialize Boot Device
" z! W$ u- n& H; z4 y
$ x. b5 s/ ]. z1) 第一個動作是收集硬體的資訊,主要包含CPU跑多快?是哪種記憶體?跑多快?這個收集的' Y G0 u, d# o
動作通常由硬體做,或者是固定的資料(因為板子layout好就固定,不需要改來改去),所以4 ]6 c' w0 ~" U) K6 c) _9 |
通常非常快就結束。結束後,CPU這時候才會真正被通上電源。 |
評分
-
查看全部評分
|