|
最近相當忙,Blog也荒廢了好一陣子,利用一點時間上來澆澆水$ A1 k1 w+ K/ G5 Y) [0 g9 W+ a0 A
( ^# @& S# m: K9 v: u3 ^( `
如同標題所提示的
6 ?# C9 Q, g) M% T% o* b一個 ARM 的系統在bootloader之前究竟有沒有事情可以做?& u: s0 y, ]' t$ t9 E: g% y' }
z, C/ G( C% V) l% S4 s; r- @/ ]
首先,一個系統必須先上電之後才會跑
$ y0 [! }. s) v! H' z- `那麼第一個跑到的程式碼是什麼?* ]: u0 j" K4 `6 o p
H* A; m1 ?5 z3 ?5 M% l0 P刻板印象上,聽說CPU會跑去一個固定的位置去抓第一道指令,這個位置通常是一
* X5 F( y5 y* }0 I% g0 d' f個flash ROM裡頭放著BIOS or bootloader,bootloader被執行之後,就會將kernel
$ o2 R& C! a' I, y載入RAM,bla..bla..bla.....最後完成開機。(以上的印象在wince or Linux皆適用。)
N5 X: ]; |1 G2 J$ M. s' Y
$ N5 P- _0 M- c$ ^那麼before bootloader不就應該什麼也沒有? 因為通電後就跑bootloader了不是嗎?0 K( g3 b" F. x. Z$ ]
其實真實的過程並非如此單純,甚至還可以說相當複雜。9 a) r+ ^7 j/ M- ^, B
" O8 j" G7 R9 I& [8 g
在進入到bootloader之前,大致上還可以細分成兩到三個! q+ W2 s! p8 h* ~$ S4 P
5 g1 I; p& R8 T4 K8 e7 x1 k1) Collect Hardware Information
O t \6 @( P+ d. a: r2) Run BootROM0 B/ l: `. ]) h3 q8 `
3) Initialize Boot Device$ d6 D, C/ l" z* f7 Z' U0 j, \ X
9 X2 G% {5 D' S/ W
1) 第一個動作是收集硬體的資訊,主要包含CPU跑多快?是哪種記憶體?跑多快?這個收集的# I5 d& b: W/ _; u7 R) {0 m& _' N, k
動作通常由硬體做,或者是固定的資料(因為板子layout好就固定,不需要改來改去),所以
+ B; ? {- O, f" ]. C& K1 H通常非常快就結束。結束後,CPU這時候才會真正被通上電源。 |
評分
-
查看全部評分
|