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