Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 3812|回復: 1
打印 上一主題 下一主題

[經驗交流] Before Bootloader~

  [複製鏈接]
跳轉到指定樓層
1#
發表於 2009-11-28 00:44:58 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
最近相當忙,Blog也荒廢了好一陣子,利用一點時間上來澆澆水
) Q# d: U1 w: _* @* o4 h, {- _+ I) b7 [: e
如同標題所提示的3 S4 Z/ z% c8 y/ G
一個 ARM 的系統在bootloader之前究竟有沒有事情可以做?: e4 ^8 S0 g# Q+ `- }1 V
5 ~4 ?" g( \4 z
首先,一個系統必須先上電之後才會跑
0 _3 O0 `' V0 B6 k0 v那麼第一個跑到的程式碼是什麼?, K2 O2 q, D9 a# }' x' k

/ ?3 g" D8 b+ |$ Y刻板印象上,聽說CPU會跑去一個固定的位置去抓第一道指令,這個位置通常是一" w7 U% v$ k/ P
個flash ROM裡頭放著BIOS or bootloader,bootloader被執行之後,就會將kernel
; E" k6 l& K! d4 o7 C7 [6 A2 `3 w載入RAM,bla..bla..bla.....最後完成開機。(以上的印象在wince or Linux皆適用。)
2 u$ G: H% C! `+ I! v7 @% k$ ~5 r# b" N3 Y% G" K4 C- q% }5 ?  G; P
那麼before bootloader不就應該什麼也沒有? 因為通電後就跑bootloader了不是嗎?7 _+ U: `1 D. K8 \8 m8 W
其實真實的過程並非如此單純,甚至還可以說相當複雜。
2 q; u* v* i' y; l8 v9 A% g5 q' ?$ W  f' Y# m; J9 a
在進入到bootloader之前,大致上還可以細分成兩到三個( D# E2 ^# q3 {$ Q- g5 B
7 j0 N) l, k9 B6 @1 k
1) Collect Hardware Information
7 A; O4 [8 c0 a+ I. n: K2) Run BootROM- @5 ^( N; ^3 [2 x) L3 N( x
3) Initialize Boot Device
9 B# T) f2 q3 X' w5 g; {7 Q; A; N! e7 V! w
1) 第一個動作是收集硬體的資訊,主要包含CPU跑多快?是哪種記憶體?跑多快?這個收集的
( d( G% Q' N! L$ j' I動作通常由硬體做,或者是固定的資料(因為板子layout好就固定,不需要改來改去),所以
7 y7 K8 i% c& Z& S通常非常快就結束。結束後,CPU這時候才會真正被通上電源。

評分

參與人數 1感謝 +4 收起 理由
mobile2 + 4 這個議題, 在我剛開始接觸到一些CPU的時候, ...

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂1 踩 分享分享
2#
 樓主| 發表於 2009-11-28 00:45:23 | 只看該作者
2) 上電之後,CPU其實不是去外部的flash ROM拿資料,而是在那內部自己本身的一個ROM1 T$ t# O* L5 T$ Z2 F% R5 g; v
裡頭拿資料開始執行,這個ROM通常叫做BootROM。BootROM裡頭的程式就分析剛剛第一
' m. i  i" c+ y的動作收集到的資訊,去做對應的工作,可能的工作例如8 g3 Z% ^) F) Z) l) P
a) 設置程式執行的stack (需要用到CPU裡頭的SRAM or Cache)9 a9 d) E4 }- ?: Q& G- B: Q
b) 初始化DDR RAM,以便可以將bootloader執行使用(有些系統還是放在bootloader自己做)。( G  {' D$ J( G% p: z) p% I
' Z7 }! R, p0 |( {; A$ o7 R
3) 一開始的初始化結束後,接著就可以初始化可能放置bootloader的地方,例如/ O- D- U, U( E4 |8 V: t6 d
SATA/PCIE/外部FLASH ROM等等。這樣便可以到這幾個可能的位置去找到bootloader。) Z# R0 ?8 C. a+ M2 ^3 }

+ i. W( l" l1 v, A7 f以上就是在進入到bootloader可能的動作,CPU會支援這樣的功能,原因是希望可以讓CPU
1 s4 k) o) E  F支援更多種的開機方式,例如可以用SPI Flash,或是接SATA Disk等等,這樣客戶在使用/ _& o' s* `3 ]
這顆CPU的時候,可以選擇的boot device就比較多種類,甚至版子就可以省掉flash ROM% ^+ [, @& u& s8 ^: w
的cost直接把bootloader放到硬碟上。# k5 l+ _6 ^" A- C9 \& j. @5 g; p
/ {% _' ~! Z/ E4 a
以上粗略的解釋before bootloader的可能的動作,會說『可能』是因為各家做法多多少少3 N" h: f) F& g( d
有些差異,但其實想達到的目的都是差不多的。而且因為bootROM可能只能燒錄一次,所以0 \, j1 p9 O. y+ D/ q* E5 g) |/ _
增加一些彈性,可以避免以後無法重新燒錄,又需支援不同介面的窘況。
" Q- D- i  e: j3 n8 {9 B
6 L0 b; ]! V4 J9 Gblog link: http://gogojesseco.blogspot.com/2009/11/before-bootloader.html

評分

參與人數 1感謝 +2 收起 理由
mobile2 + 2 說明的很清楚, 感謝分享

查看全部評分

您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

首頁|手機版|Chip123 科技應用創新平台 |新契機國際商機整合股份有限公司

GMT+8, 2024-5-6 03:06 PM , Processed in 0.106006 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表