參考來源
http://gogojesseco.blogspot.com/2009/11/before-bootloader.html


一個 ARM 的系統在 Bootloader 之前究竟有沒有事情可以做?

首先,一個系統必須先上電之後才會跑,那麼第一個跑到的程式碼是什麼?

印象中,CPU啟動後會跑去一個固定的位置去抓第一道指令,

這個位置通常是一個Flash ROM,裡頭放著Bootloader,

Bootloader被執行之後,就會自己將kernel載入...最後完成開機。(以上在wince or Linux皆適用。)

那麼 before Bootloader 不就應該什麼也沒有?因為通電後就跑 Bootloader 了不是嗎?

其實真實的過程並非如此單純,甚至還可以說相當兇險。

在進入到bootloader之前,大致上還可以細分成兩到三個

1. Collect Hardware Information
2. Run BootROM
3. Initialize Boot Device

1) 第一個動作是收集硬體的資訊,主要包含CPU跑多快?是哪種記憶體?跑多快?
   這個收集的動作通常由硬體做,或者是固定的資料,所以通常非常快就結束。
   結束後,CPU這時候才會真正被通上電源。

2) 上電之後,CPU其實不是去外部的Flash ROM拿資料,
   而是在自己本身內部的一個ROM裡頭拿資料開始執行,這個ROM通常叫做BootROM。
   BootROM裡頭的程式就分析剛剛第一的動作收集到的資訊,去做對應的工作,
   可能的工作例如
   a) 設置程式執行的stack(需要用到CPU裡頭的SRAM or Cache)
   b) 初始化DDR RAM(有些系統還是放在Bootloader做)。

3) 一開始的初始化結束後,接著就可以初始化可能放置Bootloader地方的device,
   例如SATA/PCIE/外部FLASH ROM等等。這樣便可以到這幾個可能的位置去找到Bootloader。

以上就是在進入到 Bootloader 可能的動作,
CPU 會支援這樣的功能,原因是希望可以讓CPU支援更多種的開機方式。
例如可以用 SPI Flash,或是接 SATA Disk 等等,
這樣客戶在使用這顆CPU的時候,可以選擇的 Boot device 就比較多種類,
甚至版子就可以省掉 Flash ROM 的cost直接把 Bootloader 放到硬碟上。

以上粗略的解釋 before Bootloader 的可能的動作,
會說『可能』是因為各家做法多多少少有些差異,
但其實想達到的目的都是差不多的。

arrow
arrow
    全站熱搜

    BB 發表在 痞客邦 留言(1) 人氣()