![]() |
|
U-Boot編譯過程詳解 |
|
早,DENX軟件工程中心的Wolfgang Denk基于8xxrom的源碼創建了PPCBOOT工程,并且不斷添加處理器的支持。后來,Sysgo Gmbh把PPCBOOT移植到ARM平臺上,創建了ARMBOOT工程。然后以PPCBOOT工程和ARMBOOT工程為基礎,創建了U-Boot工程。 現在,U-Boot已經能夠支持PowerPC、ARM、X86、MIPS體系結構的上百種開發板,已經成為功能多、靈活性強并且開發積極的開放源碼Bootloader。U-Boot的源碼包可以從sourceforge網站下載,還可以訂閱該網站活躍的U-Boot Users郵件論壇,這個郵件論壇對于U-Boot的開發和使用都很有幫助。 U-Boot軟件包下載網站://sourceforge.net/project/U-Boot。 解壓U-Boot-1.3.4.tar.bz2就可以得到全部U-Boot源程序。在頂層目錄下有18個子目錄,分別存放和管理不同的源程序。這些目錄中所要存放的文件有其規則,可以分為3類。 ·與處理器體系結構或者開發板硬件直接相關。 表1.1列出了U-Boot頂層目錄下各級目錄的存放原則。 表1.1 U-Boot的源碼頂層目錄說明 U-Boot的源代碼包含對幾十種處理器、數百種開發板的支持。可是對于特定的開發板,配置編譯過程只需要其中部分程序。這里具體以S3C2410處理器為例,具體分析S3C2410處理器和開發板所依賴的程序,以及U-Boot的通用函數和工具。 U-Boot的源碼是通過gcc和Makefile組織編譯的。頂層目錄下的Makefile首先可以設置開發板的定義,然后遞歸地調用各級子目錄下的Makefile,后把編譯過的程序鏈接成U-Boot映像。 (1)頂層目錄下的Makefile 它負責U-Boot整體配置編譯。按照配置的順序閱讀其中關鍵的幾行。 每一種開發板在Makefile都需要有板子配置的定義。例如,smdk2410開發板的定義如下。 執行配置U-Boot的命令make smdk2410_config,通過./mkconfig腳本生成include/config.mk的配置文件。文件內容正是根據Makefile對開發板的配置生成的。 ARCH = arm 上面的include/config.mk文件定義了ARCH、CPU、BOARD、SoC這些變量。這樣硬件平臺依賴的目錄文件可以根據這些定義來確定。SMDK2410平臺相關目錄如下: ·board/smdk2410/ 再回到頂層目錄的Makefile文件開始的部分,其中,下列幾行包含了這些變量的定義。 # load ARCH, BOARD, and CPU configuration Makefile的編譯選項和規則在頂層目錄的config.mk文件中定義。各種體系結構通用的規則直接在這個文件中定義。通過ARCH、CPU、BOARD、SoC等變量為不同硬件平臺定義不同選項。不同體系結構的規則分別包含在ppc_config.mk、arm_config.mk、mips_config.mk等文件中。 頂層目錄的Makefile中還要定義交叉編譯器,以及編譯U-Boot所依賴的目標文件。 ifeq ($(ARCH),arm) 然后還有U-Boot鏡像編譯的依賴關系。 ALL = U-Boot.srec U-Boot.bin System.map Makefile默認的編譯目標為all,包括U-Boot.srec、U-Boot.bin、System.map。U-Boot.srec和U-Boot.binU-Boot就是通過ld命令按照U-Boot.map地址表把目標文件組裝成U-Boot。其他Makefile內容就不再詳細分析了,上述代碼分析應該可以為閱讀代碼提供了一個線索。 (1)開發板配置頭文件 除了編譯過程Makefile以外,還要在程序中為開發板定義配置選項或者參數。這個頭文件是include/configs/ 這個頭文件中主要定義了兩類變量。 一類是選項,前綴是CONFIG_,用來選擇處理器、設備接口、命令、屬性等。例如: #define CONFIG_ARM920T 1 另一類是參數,前綴是CFG_,用來定義總線頻率、串口波特率、Flash地址等參數。例如: #define CFG_Flash_BASE 0x00000000 根據對Makefile的分析,編譯分為兩步。第1步是配置,如make smdk2410_config;第2步是編譯,執行make就可以了。 編譯完成后,可以得到U-Boot各種格式的映像文件和符號表,如表1.2所示。 表1.2 U-Boot編譯生成的鏡像文件 U-Boot的3種映像格式都可以燒寫到Flash中,但需要看加載器能否識別這些格式。一般U-Boot.bin為常用,直接按照二進制格式下載,并且按照絕對地址燒寫到Flash中就可以了。U-Boot和U-Boot.srec格式映像都自帶定位信息。 熱點鏈接:
1、ARM處理器是什么
|