Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[經驗交流] Before Bootloader~

  [複製鏈接]
跳轉到指定樓層
1#
發表於 2009-11-28 00:44:58 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
最近相當忙,Blog也荒廢了好一陣子,利用一點時間上來澆澆水1 [, ~: E8 D/ m0 q1 ~3 s
/ }2 W0 Q% |# A. F* i8 b
如同標題所提示的8 d4 ~. Q! _! X. a" M1 V/ }9 X
一個 ARM 的系統在bootloader之前究竟有沒有事情可以做?
. q+ A2 m, g+ m3 O
0 U6 M7 n8 a  B& {& m首先,一個系統必須先上電之後才會跑" ]1 h& p6 q$ H+ f- Q6 U
那麼第一個跑到的程式碼是什麼?
4 T4 i8 w7 J" N( Z* h: O4 }- U
5 C! U6 F; t1 o6 m, H6 V- @2 L刻板印象上,聽說CPU會跑去一個固定的位置去抓第一道指令,這個位置通常是一
. F$ m& H3 ]" J' x$ k2 w個flash ROM裡頭放著BIOS or bootloader,bootloader被執行之後,就會將kernel  H/ ?' H' i% ]+ q
載入RAM,bla..bla..bla.....最後完成開機。(以上的印象在wince or Linux皆適用。)  m# I  U- c+ S$ @% V$ \0 ?

% s$ Y+ U( ]7 ]0 t0 o: b" ~  K那麼before bootloader不就應該什麼也沒有? 因為通電後就跑bootloader了不是嗎?
: ^0 j6 i# b3 x# w4 G* {1 z+ G其實真實的過程並非如此單純,甚至還可以說相當複雜。& {8 G) \* b) ?, H: r& r7 l4 j

0 k3 w, E: o* O# \" y  O/ d( H在進入到bootloader之前,大致上還可以細分成兩到三個& q$ [0 b6 }1 Y

# |0 P0 {) Y& R7 J1) Collect Hardware Information
7 s. k( K3 a  z4 T) `2) Run BootROM  D" h8 T: \- _4 d
3) Initialize Boot Device
- V+ i$ U. f& r; u: W# i: P) [& l5 ]0 Z4 v3 d+ I7 |( Y$ M. X6 w
1) 第一個動作是收集硬體的資訊,主要包含CPU跑多快?是哪種記憶體?跑多快?這個收集的
5 g+ O* w9 ^; I: Y) S: }" e+ N. C. y動作通常由硬體做,或者是固定的資料(因為板子layout好就固定,不需要改來改去),所以3 Q3 ?" P; {9 C* l6 ^2 Q" m7 b( \
通常非常快就結束。結束後,CPU這時候才會真正被通上電源。

評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂1 踩 分享分享
2#
 樓主| 發表於 2009-11-28 00:45:23 | 只看該作者
2) 上電之後,CPU其實不是去外部的flash ROM拿資料,而是在那內部自己本身的一個ROM' U; {* p' J* P: Y2 w
裡頭拿資料開始執行,這個ROM通常叫做BootROM。BootROM裡頭的程式就分析剛剛第一
6 {5 P  K1 h* B. O7 ]4 g的動作收集到的資訊,去做對應的工作,可能的工作例如9 b$ z; p' ^2 O/ h; v+ e& b( r' {
a) 設置程式執行的stack (需要用到CPU裡頭的SRAM or Cache)- h+ _* N; r: Z' |: F- B0 q4 u3 }
b) 初始化DDR RAM,以便可以將bootloader執行使用(有些系統還是放在bootloader自己做)。) E& j# R, U. I& x

" e& e6 P' y! [' p2 V% ]3) 一開始的初始化結束後,接著就可以初始化可能放置bootloader的地方,例如
) w+ A- G  m  D$ q5 tSATA/PCIE/外部FLASH ROM等等。這樣便可以到這幾個可能的位置去找到bootloader。
* a* N! f- f; W5 Y* T6 j2 t" ^
1 ~5 ~* o" G9 z* h4 H7 k6 J% S以上就是在進入到bootloader可能的動作,CPU會支援這樣的功能,原因是希望可以讓CPU: @- e. v2 x/ W0 N# q: p  K% A6 h9 P
支援更多種的開機方式,例如可以用SPI Flash,或是接SATA Disk等等,這樣客戶在使用
- p9 r$ o* D* F; s這顆CPU的時候,可以選擇的boot device就比較多種類,甚至版子就可以省掉flash ROM
$ o- S. L9 J) ^" b1 y. n7 X* [( e的cost直接把bootloader放到硬碟上。
" R  ]5 p# P) A6 W- i' J9 v1 E1 @: q+ q0 ]! g: N% X/ y5 i6 c6 x
以上粗略的解釋before bootloader的可能的動作,會說『可能』是因為各家做法多多少少
7 Y7 ]8 P0 g$ K6 r有些差異,但其實想達到的目的都是差不多的。而且因為bootROM可能只能燒錄一次,所以/ d9 w. i) g2 T! F# i  o. ^/ p
增加一些彈性,可以避免以後無法重新燒錄,又需支援不同介面的窘況。
% r/ z- @& a4 H3 V! y; u; z( t$ w5 v7 l" p' B5 z
blog link: http://gogojesseco.blogspot.com/2009/11/before-bootloader.html

評分

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

查看全部評分

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

本版積分規則

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

GMT+8, 2024-11-16 12:58 PM , Processed in 0.151009 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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