Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[經驗交流] Before Bootloader~

  [複製鏈接]
跳轉到指定樓層
1#
發表於 2009-11-28 00:44:58 | 顯示全部樓層 回帖獎勵 |倒序瀏覽 |閱讀模式
最近相當忙,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這時候才會真正被通上電源。

評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂1 踩 分享分享
2#
 樓主| 發表於 2009-11-28 00:45:23 | 顯示全部樓層
2) 上電之後,CPU其實不是去外部的flash ROM拿資料,而是在那內部自己本身的一個ROM/ r, c4 |; v( B. O
裡頭拿資料開始執行,這個ROM通常叫做BootROM。BootROM裡頭的程式就分析剛剛第一
& O- N& B+ u( L2 _! k' d的動作收集到的資訊,去做對應的工作,可能的工作例如! h  a' T4 F/ X
a) 設置程式執行的stack (需要用到CPU裡頭的SRAM or Cache)& o# p4 ?  [  r" g4 S
b) 初始化DDR RAM,以便可以將bootloader執行使用(有些系統還是放在bootloader自己做)。! D1 y& h% @# U, e# G$ c, |) Q
8 E* [' K6 r  ?9 A( R3 {6 z3 H% q
3) 一開始的初始化結束後,接著就可以初始化可能放置bootloader的地方,例如
' X2 J- `0 p1 p2 w0 W+ }& v8 MSATA/PCIE/外部FLASH ROM等等。這樣便可以到這幾個可能的位置去找到bootloader。
$ P" ^, f" _+ R) c& t, Y( c- {7 P7 g8 ~6 @& S2 V$ y
以上就是在進入到bootloader可能的動作,CPU會支援這樣的功能,原因是希望可以讓CPU
$ h/ _! B/ [: @% R- V支援更多種的開機方式,例如可以用SPI Flash,或是接SATA Disk等等,這樣客戶在使用& j- s1 p3 @  o. L& y8 ~
這顆CPU的時候,可以選擇的boot device就比較多種類,甚至版子就可以省掉flash ROM+ N: c* X% f; n* A' C
的cost直接把bootloader放到硬碟上。
9 O% U* }$ [9 E3 a: I7 |
; o6 t4 B& ?( o: j# `$ I以上粗略的解釋before bootloader的可能的動作,會說『可能』是因為各家做法多多少少$ K, W& T7 ~  T' Q: k+ G" C
有些差異,但其實想達到的目的都是差不多的。而且因為bootROM可能只能燒錄一次,所以
9 a2 o2 t2 r4 P* |9 S  C( Z( E增加一些彈性,可以避免以後無法重新燒錄,又需支援不同介面的窘況。
' I2 Y; `" {2 M& E, B. T* K. N  ?1 B4 ]5 D8 ?* d! {
blog link: http://gogojesseco.blogspot.com/2009/11/before-bootloader.html

評分

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

查看全部評分

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

本版積分規則

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

GMT+8, 2024-6-6 09:51 AM , Processed in 0.115515 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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