2009年2月12日 星期四

[引]關於 U-Boot 的程式整體進入點

關於 U-Boot 的程式整體進入點

http://www.jollen.org/blog/2007/01/u-boot_entry_point.html

jollen 發表於 January 30, 2007 11:41 PM

關於 U-Boot 的程式進入點,我以 SMDK2410 平臺為例來說明。首先,在每張 board 的目錄下,都會有一個 linker script,程式的整體進入點可以閱讀此檔案得知。以 SMDK2410 來說,我們應該由 /board/smdk2410/u-boot.lds 檔案看起,以下是其內容節錄:

ENTRY(_start)
SECTIONS
{
. = 0x00000000;

. = ALIGN(4);
.text :
{
cpu/arm920t/start.o (.text)
*(.text)
}

在 linker script 的 SECTIONS 命令區塊中,.text section 一開始被放進 /cpu/arm920t/start.o 檔,所以能了解到此檔案是整個 U-Boot 程式的進入點。因此,「整體的 U-Boot 啟動流程,是由 /cpu/arm920t/start.o 檔案開始的」,start.o 是 U-Boot for ARM9 整個程式碼中,唯一的 assembly code,其原始程式的檔名為 start.S

所以,由 /cpu/arm920t/start.S 開始研讀,是了解 U-Boot 整個執行過程的起始點。另外,附帶一提,

就概念上來說,start.S 最主要的工作是:

  • 設定中斷向量表
  • 設定 processor
  • Initialization Sequence
  • Relocation

因此,我們把 start.S 也稱為「hardware bring-up code」,而且是「前期」的硬體帶動碼(bring-up code)。在 U-Boot 的 cpu/ 目錄下,可以看到 U-Boot 為各種不同的處理器所撰寫的 bring-up code,可見 U-Boot 真的是一個「萬用 bootloader」。

沒有留言:

張貼留言