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