第三課 Boot Loader 移植(U-boot)之一

來源:互聯網
上載者:User

Linux
有許多Boot Loader可用,比較常見的有U-boot,vivi,RedBoot等,本課程介紹U-boot的版級移植,對應的硬體平台是S3C2440。
   嵌入式
系統中,系統上電或複位後,CPU通常從地址0X00000000處讀取第一條指令開始執行,而Boot Loader就放置與此,他比較類似PC機的Bios。他的工作非常重要:初始化硬體裝置、建立記憶體空間映像圖,將硬體環境帶到一個合適的狀態。
     一般我們可以把U-boot的啟動過程分為兩個階段,階段一和階段二,第一階段一般用彙編編寫,第二階段一般用C編寫,具體如下
    階段一:

          初始化基本的硬體裝置(中斷、關閉處理器的指令、資料Cache)

          初始化系統記憶體

          設定堆棧

          跳轉到第二階段的C語言程式進入點。

   階段二:

          初始化本階段使用的硬體(串口、乙太網路口等)

          檢測系統記憶體映射

          將核心鏡像和根檔案系統從Flash讀到記憶體中。

          為核心設定啟動參數。

          調用核心,將系統控制權交給核心。


    下面我們來分析U-boot的原始碼。ftp://ftp.denx.de/pub/u-boot/




    下載U-boot 1.2.0
壓縮包u-boot-1.2.0.tar.bz2
通過SSH上傳到使用者的跟目錄/home/21iee
下,解壓:

           
tar -jxvf u-boot-1.2.0.tar.bz2

     通過SSH我們可以看到U-Boot原始碼結構,




u-boot.jpg


(62.46 KB)

2008-5-14 11:08

   U-Boot的原始碼高度模組化。其中我們關心的主要目錄有:

  • Board:U-boot
    支援的開發板相關程式原代碼。其中board/SMDK
    2410目錄包含了三星官方SMDK2410開發板的源檔案。

  • Common:
    與體系無關的檔案。

  • cpu:
    包含U-Boot所支援的所以CPU的原始碼。S3C2440A屬於ARM920T家族,所以只需要關心cpu/arm920t目錄,其中start.S檔案最終會成為u-boot.bin檔案的第一段代碼。

  • Drivers:
    通用裝置驅動程式,如串口,網口,usb等

  • Doc:
    說明文檔。

  • fs:
    U-Boot支援的檔案系統。

  • include:
    包含的標頭檔目錄。其中include/configs/board_name.h中定義了所以和開發板相關的硬體資源配置參數,如網卡地址、核心啟動參數、實體記憶體映射等。

  • lib_arm:
    與arm體繫結構有關的一些公用介面代碼。

  • net:
    網路相關代碼。

  • tools:
    編譯相關工具。

      

  在動手操作前,不管三七二十一,先編譯一把
(我用的是GCC3.3.2的環境用3.4.1有一個error,可根據第二課內容更改bashrc檔案修改)

   



make 2410.jpg


(7.35 KB)

2008-5-14 11:51

命令為:Make smdk2410_config
//smdk2410_config 是目標平台。

             然後通過 make all
命令編譯,幾分鐘後如果提示



uboot_2410_ok.jpg


(8.6 KB)

2008-5-14 11:51

說明U-Boot已經建立完成。

-----------------------------------------------------------------------------------------------------------------------

U-Boot移植到新的S3C2440A平台上,首先在board目錄下增加一個新的開發板目錄。

1.建立開發板目錄,我取名為hztour2440A

     在u-boot-1.2.0/board/
下建立目錄 hztour2440A
,該目錄下需要幾個基本檔案:config.mk、flash.c、Makefile、mensetup.S、u-boot.lds
,以及以開發板命名的hztour2440A.c
檔案。

 

cd board/
cp -arv smdk2410 hztour2440A  
//我們2440和2410類似,所以我們複雜smdk2410下的所有檔案

mv hztour2440A/smdk2410.c hztour2440A/hztour2440A.c   
//重新命名為hztour2440A.c






2.
在include/configs/
目錄下建立目標板配置標頭檔。

 

cd include/configs

cp smdk2410.h hztour2440A.h   //複製smdk2410.h標頭檔

 

3.修改Makefile檔案,添加編譯項

 

hztour2440A_config: unconfig
    @$(MKCONFIG) $(@:_config=) arm arm920t hztour2440A NULL s3c24x0




這裡hztour2440A與board/目錄下目標板檔案夾名稱hztour2440A一致。

4.確認編譯環境(可選)


  該Makefile
中定義了CROSS_COMPILE的值,用於在交叉編譯時間指定交叉編譯器,預設為


ifeq ($(ARCH),arm)

CROSS_COMPILE = arm-linux-    //預設的
交叉編譯器名的首碼,如果用crosstool生產的編譯器,首碼該是

arm-9tdmi-linux-gnu-

endif                         //也可以直接寫路徑

5.修改board/hztour2440A
下的Makefile



  



COBJS    := hztour2440A.o
flash.o

 

6.測試編譯

 

make hztour2440A_config
     




//出現Configuring for hztour2440A board...提示,說明配置成功


make                        //測試編譯

到這裡為止,我們編譯出來的這個u-boot還不
能真正適用於我們的目標板,只是實現了對新目標板的定義,接下來我們還要根據新的目標板的特性來移植,請關注 第四課 Boot Loader 移植(U-boot)之二的內容


                作者:hztour  轉載請註明出處


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.