Jollen's email: jollen # jollen.org

more: Jollen's Consulting | Jollen's Wiki

« U-Boot:Porting a new Board(如何在 U-Boot 裡新增自己的 board) | Home | Linux/PowerPC 新世代《序幕》 »

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

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

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

ENTRY(_start)
SECTIONS
{
        . = 0x00000000;

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

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

所以,由 <U-Boot>/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」。

下篇日記,我將會分享 start.S 的研讀筆記,歡迎對 U-Boot 有興趣的朋友來信指教。

--jollen

引用通告

如果您想引用這篇文章到您的Blog,
請複製下面的鏈接,並放置到您發表文章的相應界面中。

http://www.jollen.org/cgi-bin/mt3/mt-tb.cgi/343

評論 (2)

匿名:

寫得真好. Thank you.

lcm82:

謝謝您無私的分享,
我是個初學者,
剛剛學 u-boot,
不過對您說的有點疑問,
跟據 ld 的 manual (http://sourceware.org/binutils/docs/ld/Entry-Point.html#Entry-Point)
似乎不一定是第一個 .text 就是進入點,
就您的例子來說,好像是 _start symbol 的地方
不知您的看法呢?
謝謝!

發表一個評論

(您發表的意見將被立即接受,但需要一點時間與後端伺服器做同步,您的留言才會顯示在網站上。為避免 spam 攻撃,按「發表」後請輸入帳號密碼。使用者帳號:「nospam」、密碼:「nospam」。)

[Top] Copyright (C) 2006,2010 www.jollen.org.
All rights reserved. All content licensed under Creative Commons License.