Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[經驗交流] Before Bootloader~

  [複製鏈接]
跳轉到指定樓層
1#
發表於 2009-11-28 00:44:58 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
最近相當忙,Blog也荒廢了好一陣子,利用一點時間上來澆澆水
( `) n7 L, M/ ~' ]' P* r9 `  Q
' |9 C  T7 p. `. ~如同標題所提示的1 u& g8 t7 l- i5 J" s: ]
一個 ARM 的系統在bootloader之前究竟有沒有事情可以做?+ A* M; g( z* T) Z$ F
) `2 e; G5 B: E) \: ]! z+ g  N3 |- J
首先,一個系統必須先上電之後才會跑
* l. S# l0 r, L8 ]7 y, x那麼第一個跑到的程式碼是什麼?
8 {" B0 g* y8 ~. n0 e+ U) @; }; y+ F) E2 L1 {! a: E" u2 [. v
刻板印象上,聽說CPU會跑去一個固定的位置去抓第一道指令,這個位置通常是一
4 Q( Q/ ]8 }% _' r) N! u個flash ROM裡頭放著BIOS or bootloader,bootloader被執行之後,就會將kernel
) f" [: B+ E! z- z7 z! U' V載入RAM,bla..bla..bla.....最後完成開機。(以上的印象在wince or Linux皆適用。)
* v, Q/ u3 y' J& S2 w- \8 ^
: e8 y4 l- U. }8 A% y6 j- a  o那麼before bootloader不就應該什麼也沒有? 因為通電後就跑bootloader了不是嗎?1 g. n9 n+ e5 z; j0 W+ T: y
其實真實的過程並非如此單純,甚至還可以說相當複雜。% q$ q5 K' k( F; B+ T

6 g+ }& `8 ^7 W8 ~3 u在進入到bootloader之前,大致上還可以細分成兩到三個
% Z# U' N( I4 V& |- ^- s, B0 o- A6 p* ~& x+ j* Z. V: e' F" K: A( D, E
1) Collect Hardware Information, m9 k. G4 j( }2 `' R
2) Run BootROM
) n' p0 `) v$ O3) Initialize Boot Device
& g% O4 r( p, o6 y: |
  }- E! D/ ^* u/ q6 J1) 第一個動作是收集硬體的資訊,主要包含CPU跑多快?是哪種記憶體?跑多快?這個收集的
! `: y! |! h. U) @' j. ?) g動作通常由硬體做,或者是固定的資料(因為板子layout好就固定,不需要改來改去),所以
' ?3 B" x, ?  ]8 h- @通常非常快就結束。結束後,CPU這時候才會真正被通上電源。

評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂1 踩 分享分享
2#
 樓主| 發表於 2009-11-28 00:45:23 | 只看該作者
2) 上電之後,CPU其實不是去外部的flash ROM拿資料,而是在那內部自己本身的一個ROM- F: n( I+ e3 ^' [1 \$ H
裡頭拿資料開始執行,這個ROM通常叫做BootROM。BootROM裡頭的程式就分析剛剛第一6 R- W: _8 U! I: M
的動作收集到的資訊,去做對應的工作,可能的工作例如4 {4 ~" j2 l9 P3 u
a) 設置程式執行的stack (需要用到CPU裡頭的SRAM or Cache)! v5 U8 ^* z9 J3 v$ }
b) 初始化DDR RAM,以便可以將bootloader執行使用(有些系統還是放在bootloader自己做)。
2 U- v/ R* A8 U) ^& I5 K
7 z6 H& Y! X9 h0 I3) 一開始的初始化結束後,接著就可以初始化可能放置bootloader的地方,例如
$ k$ p( g* y3 r2 w: rSATA/PCIE/外部FLASH ROM等等。這樣便可以到這幾個可能的位置去找到bootloader。; P" g4 z# D' K/ q8 t+ g
* o) }( ]1 T9 r: b
以上就是在進入到bootloader可能的動作,CPU會支援這樣的功能,原因是希望可以讓CPU1 Y- `( }9 c- H- ]
支援更多種的開機方式,例如可以用SPI Flash,或是接SATA Disk等等,這樣客戶在使用
) e- G) J; S# i$ e這顆CPU的時候,可以選擇的boot device就比較多種類,甚至版子就可以省掉flash ROM+ Y  s  a; O& u5 t# K% r) ]
的cost直接把bootloader放到硬碟上。/ H- ~- s/ k: N  f# w6 L& y
7 G6 l: @( e# R- D5 |" x
以上粗略的解釋before bootloader的可能的動作,會說『可能』是因為各家做法多多少少
4 k& R. H$ {8 }4 Q6 u$ y3 |; w, `有些差異,但其實想達到的目的都是差不多的。而且因為bootROM可能只能燒錄一次,所以
+ }$ a( X0 ]1 y增加一些彈性,可以避免以後無法重新燒錄,又需支援不同介面的窘況。 . y- b8 N8 L/ |
! m9 O; b, |& R0 U
blog link: http://gogojesseco.blogspot.com/2009/11/before-bootloader.html

評分

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

查看全部評分

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

本版積分規則

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

GMT+8, 2024-9-28 05:12 AM , Processed in 0.162009 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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