IT培训机构|91免费精品视频|专注编程培训|91免费精品|软件开发培训_91免费国产视频_华清远见教育


U-Boot編譯過程解析

分享到:
           

    解壓u-boot-2010.03.tar.bz2就可以得到全部U-Boot源程序。在頂層目錄下有29個子目錄,分別存放和管理不同的源程序。這些目錄中所要存放的文件有其規(guī)則,可以分為3類。

    ● 與處理器體系結(jié)構(gòu)或者開發(fā)板硬件直接相關(guān)。
    ● 一些通用的函數(shù)或者驅(qū)動程序。
    ● U-Boot的應(yīng)用程序、工具或者文件。

    表1.5列出了U-Boot頂層目錄下各級目錄的存放原則。

表1.5 U-Boot的源碼頂層目錄說明

目 錄 特 性 解 釋 說 明
board 平臺依賴 存放電路板相關(guān)的目錄文件,如RPXlite(mpc8xx)、smdk2410(arm920t)、sc520_cdp(x86) 等目錄
cpu 平臺依賴 存放了CPU相關(guān)的目錄文件,如mpc8xx、ppc4xx、arm720t、arm920t、xscale、i386等目錄
lib_ppc 平臺依賴 存放對PowerPC體系結(jié)構(gòu)通用的文件,主要用于實現(xiàn)PowerPC平臺通用的函數(shù)
lib_arm 平臺依賴 存放對ARM體系結(jié)構(gòu)通用的文件,主要用于實現(xiàn)ARM平臺通用的函數(shù)
lib_i386 平臺依賴 存放對X86體系結(jié)構(gòu)通用的文件,主要用于實現(xiàn)X86平臺通用的函數(shù)
lib_avr32 平臺依賴 存放對AVR32體系結(jié)構(gòu)通用的文件,主要用于實現(xiàn)AVR32平臺通用的函數(shù)
lib_blackfin 平臺依賴 存放對BLACKFIN體系結(jié)構(gòu)通用的文件,主要用于實現(xiàn)BLACKFIN平臺通用的函數(shù)
lib_m68k 平臺依賴 存放對M68K體系結(jié)構(gòu)通用的文件,主要用于實現(xiàn)M68K 平臺通用的函數(shù)
lib_microblaze 平臺依賴 存放對Microblaze體系結(jié)構(gòu)通用的文件,主要用于實現(xiàn)Microblaze平臺通用的函數(shù)
lib_mips 平臺依賴 存放對MIPS體系結(jié)構(gòu)通用的文件,主要用于實現(xiàn)MIPS平臺通用的函數(shù)
lib_nios 平臺依賴 存放對NIOS體系結(jié)構(gòu)通用的文件,主要用于實現(xiàn)NIOS平臺通用的函數(shù)
lib_nios2 平臺依賴 存放對NIOS體系結(jié)構(gòu)通用的文件,主要用于實現(xiàn)NIOS2平臺通用的函數(shù)
lib_sh 平臺依賴 存放對SH體系結(jié)構(gòu)通用的文件,主要用于實現(xiàn)SH平臺通用的函數(shù)
lib_sparc 平臺依賴 存放對SPARC體系結(jié)構(gòu)通用的文件,主要用于實現(xiàn)SPARC平臺通用的函數(shù)
libfdt 通用 支持設(shè)備樹的庫文件
api 通用 存放U-Boot提供的接口函數(shù)
common 通用 通用的代碼,涵蓋各個方面,以命令行處理為主
disk 通用 磁盤分區(qū)相關(guān)代碼
nand_spl 通用 NAND存儲器相關(guān)代碼
include 通用 頭文件和開發(fā)板配置文件,所有開發(fā)板的配置文件都在configs目錄下
common 通用 通用的多功能函數(shù)實現(xiàn)
lib_generic 通用 通用庫函數(shù)的實現(xiàn)
net 通用 存放網(wǎng)絡(luò)相關(guān)程序
fs 通用 存放文件系統(tǒng)相關(guān)程序
post 通用 存放上電自檢程序
drivers 通用 通用的設(shè)備驅(qū)動程序,主要有以太網(wǎng)接口的驅(qū)動
disk 通用 硬盤接口程序
examples 應(yīng)用例程 一些獨立運行的應(yīng)用程序的例子,如helloworld
tools 工具 存放制作S-Record或者U-Boot格式的鏡像等工具,如mkimage
doc 文檔 開發(fā)使用文檔
Rtc 通用 RTC的驅(qū)動程序

    U-Boot的源代碼包含對幾十種處理器、數(shù)百種開發(fā)板的支持。可是對于特定的開發(fā)板,配置編譯過程只需其中部分程序。這里以S3C2410處理器為例,具體分析S3C2410處理器和開發(fā)板所依賴的程序,以及U-Boot的通用函數(shù)和工具。

    U-Boot的源碼是通過gcc和Makefile組織編譯的。頂層目錄下的Makefile可以設(shè)置開發(fā)板的定義,然后遞歸地調(diào)用各級子目錄下的Makefile,后把編譯過的程序鏈接成U-Boot映像。

    1)頂層目錄下的Makefile

    Makefile負(fù)責(zé)U-Boot整體配置編譯,按照配置的順序閱讀其中關(guān)鍵的幾行。

    每一種開發(fā)板在Makefile下都需要有主板配置的定義。例如,smdk2410開發(fā)板的定義如下:

    smdk2410_config : unconfig
        @$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 samsung s3c24x0

    執(zhí)行配置U-Boot的命令make smdk2410_config,通過mkconfig腳本生成include/config.mk的配置文件,文件內(nèi)容正是根據(jù)Makefile對開發(fā)板的配置生成的。

    ARCH = arm
    CPU = arm920t
    BOARD = smdk2410
    VENDOR = samsung
    SoC = s3c24x0

    上面的include/config.mk文件定義了ARCH、CPU、BOARD、VENDOR、SoC這些變量,這樣,硬件平臺依賴的目錄文件可以根據(jù)這些定義來確定。SMDK2410平臺相關(guān)目錄如下:

    board/Samsung/smdk2410
    cpu/arm920t/
    cpu/arm920t/s3c24x0/
    lib_arm/
    include/configs/smdk2410.h

    再回到頂層目錄的Makefile文件開始的部分,其中,下列幾行包含了這些變量的定義:

     # load ARCH, BOARD, and CPU configuration
    include $(obj)include/config.mk
    export ARCH CPU BOARD VENDOR SOC

    Makefile的編譯選項和規(guī)則在頂層目錄的config.mk文件中定義,各種體系結(jié)構(gòu)通用的規(guī)則直接在這個文件中定義。通過ARCH、CPU、BOARD、VENDOR、SoC等變量為不同硬件平臺定義不同選項。不同體系結(jié)構(gòu)的規(guī)則分別包含在ppc_config.mk、arm_config.mk、mips_config.mk等文件中。

    頂層目錄的Makefile中還要定義交叉編譯器,以及編譯U-Boot所依賴的目標(biāo)文件
    ifeq (arm,$(ARCH))
        CROSS_COMPILE ?=arm-none-linux-gnueabi-
    # 交叉編譯器的前綴
    endif
    # load other configuration
    include $(TOPDIR)/config.mk
    # U-Boot objects....order is important (i.e. start must be first)
    OBJS = cpu/$(CPU)/start.o # 處理器相關(guān)的目標(biāo)文件
    …
    #定義依賴的目錄,每個目錄下先把目標(biāo)文件連接成*.a文件
    LIBS = lib_generic/libgeneric.a
    LIBS += lib_generic/lzma/liblzma.a
    LIBS += lib_generic/lzo/liblzo.a
    LIBS += $(shell if [ -f board/$(VENDOR)/common/Makefile ];
    Then echo "board/$(VENDOR)/common/lib$(VENDOR).a"; fi)
    LIBS += cpu/$(CPU)/lib$(CPU).a
    ifdef SOC
    LIBS += cpu/$(CPU)/$(SOC)/lib$(SOC).a
    endif
    ifeq ($(CPU),ixp)
    LIBS += cpu/ixp/npe/libnpe.a
    endif
    LIBS += lib_$(ARCH)/lib$(ARCH).a
    …

    還有U-Boot鏡像編譯的依賴關(guān)系如下:

    ALL += $(obj)u-boot.srec $(obj)u-boot.bin $(obj)System.map $(U_BOOT_NAND)
    $(U_BOOT_ONENAND)
    all: $(ALL)
    $(obj)u-boot.hex: $(obj)u-boot
            $(OBJCOPY) ${OBJCFLAGS} -O ihex $< $@
    $(obj)u-boot.srec: $(obj)u-boot
        $(OBJCOPY) -O srec $< $@
    $(obj)u-boot.bin: $(obj)u-boot
      $(OBJCOPY) ${OBJCFLAGS} -O binary $< $@
    $(obj)u-boot.ldr: $(obj)u-boot
            $(CREATE_LDR_ENV)
            $(LDR) -T $(CONFIG_BFIN_CPU) -c $@ $< $(LDR_FLAGS)
    $(obj)u-boot.ldr.hex: $(obj)u-boot.ldr
            $(OBJCOPY) ${OBJCFLAGS} -O ihex $< $@ -I binary
    $(obj)u-boot.ldr.srec: $(obj)u-boot.ldr
            $(OBJCOPY) ${OBJCFLAGS} -O srec $< $@ -I binary
    $(obj)u-boot.img: $(obj)u-boot.bin
            ./tools/mkimage -A $(ARCH) -T firmware -C none \
            -a $(TEXT_BASE) -e 0 \
            -n $(shell sed -n -e 's/.*U_BOOT_VERSION//p' $(VERSION_FILE) | \
                sed -e 's/"[ ]*$$/ for $(BOARD) board"/') \-d $< $@
    $(obj)u-boot.imx: $(obj)u-boot.bin
            $(obj)tools/mkimage -n $(IMX_CONFIG) -T imximage \
            -e $(TEXT_BASE) -d $< $@
    $(obj)u-boot.kwb: $(obj)u-boot.bin
            $(obj)tools/mkimage -n $(KWD_CONFIG) -T kwbimage \
            -a $(TEXT_BASE) -e $(TEXT_BASE) -d $< $@
    $(obj)u-boot.sha1: $(obj)u-boot.bin
            $(obj)tools/ubsha1 $(obj)u-boot.bin
    $(obj)u-boot.dis: $(obj)u-boot
            $(OBJDUMP) -d $< > $@

    Makefile默認(rèn)的編譯目標(biāo)為all,包括u-boot.srec、u-boot.bin和System.map。u-boot.srec和u-boot.bin就是通過ld命令按照U-Boot.map地址表把目標(biāo)文件組裝成U-Boot的。其他Makefile內(nèi)容就不再詳細(xì)分析了,通過上述代碼分析應(yīng)該可以為讀者閱讀代碼提供一些線索。

    2)開發(fā)板配置頭文件

    除了編譯過程Makefile以外,還要在程序中為開發(fā)板定義配置選項或者參數(shù)。這個頭文件是include/configs/<board_name>.h。<board_name>用相應(yīng)的BOARD定義代替。

    這個頭文件中主要定義了兩類形式的參數(shù)。

    一類形式的參數(shù)用來選擇處理器、設(shè)備接口、命令、屬性等,以及定義總線頻率、串口波特率、Flash地址等參數(shù)。

    大部分參數(shù)前綴是CONFIG_,例如:

    #define CONFIG_ARM920T 1
    #define CONFIG_KGDB_BAUDRATE 115200
    #define CONFIG_CS8900
    #define CONFIG_KGDB_BAUDRATE 115200

    另一類形式的參數(shù)為:

    #define PHYS_FLASH_SIZE 0x00100000
    #define USE_920T_MMU 1

    根據(jù)對Makefile的分析,編譯分為兩步。第1步是配置,如make smdk2410_config;第2步是編譯,執(zhí)行make就可以了。

    編譯完成后,可以得到U-Boot各種格式的映像文件和符號表,如表1.6所示。

表1.6 U-Boot編譯生成的映像文件

文 件 名 稱 說 明 文 件 名 稱 說 明
System.map U-Boot映像的符號表 u-boot.bin U-Boot映像原始的二進(jìn)制格式
u-boot U-Boot映像的ELF格式 u-boot.srec U-Boot映像的S-Record格式

    U-Boot的3種映像格式都可以燒寫到Flash中,但需要看加載器能否識別這些格式。一般u-boot.bin為常用,直接按照二進(jìn)制格式下載,并且按照絕對地址燒寫到Flash中就可以了。U-Boot和u-boot.srec格式映像都自帶定位信息。

    本文選自華清遠(yuǎn)見嵌入式培訓(xùn)教材《從實踐中學(xué)嵌入式Linux應(yīng)用程序開發(fā)》

   熱點鏈接:

   1、U-Boot源代碼下載地址
   2、Bootloader的種類
   3、配置主機(jī)交叉開發(fā)環(huán)境
   4、搭建嵌入式交叉編譯環(huán)境
   5、構(gòu)建嵌入式Linux交叉開發(fā)環(huán)境

更多新聞>> 

主站蜘蛛池模板: 武汉办公室装修公司-展厅装修_湖北今泰装饰工程有限公司官网_今泰装饰 | 全自动码垛机械手,码垛机器人,拆包机,缠绕机,开箱封箱装箱机厂家-山东昊宇自动化设备有限公司 | 企业宣传片制作公司-广告宣传片拍摄-专题片,tvc广告制作-拍摄微电影影视公司-艺虎文化 | 清扫器-聚氨酯清扫器-合金清扫器-四连杆自动纠偏-机械纠偏-锥辊纠偏-衡水涌泉机械科技有限公司 | 弯箍机_钢筋弯箍机_全自动钢筋弯箍机_数控弯箍机-建科智能装备制造(天津)股份有限公司 | 曙海培训-仿真培训Linux培训html5培单片机培训PCB培训python培训PLC培训C语言培训android培训物联网培训无线电培训欧姆龙培训工业机器人培训5G培训Hadoop培训CFD培训项目外包开发咨询 | 郑州空调维修_郑州中央空调维修_空调清洗维保-郑州大晟机电设备安装工程有限公司 | 一次性妇科用品_一次性医疗用品_一次性口腔器械盒_天津市双利医疗器械有限责任公司 | 网咖网址导航,网咖分类目录,网址目录,免费收录国内外、各行业优秀网站网站。 | 镗铣头-铣头-数控铣头-高密市振飞机械制造有限公司 | 全开式真空干燥机_全开耙式真空干燥机_全开式动态真空干燥机,江阴千峰机械制造有限公司 | 科衣洛定制衣柜,书柜,厨柜,衣帽间,电视柜,酒柜,餐厅柜,门厅柜,鞋柜——科衣洛全屋定制官网 | 墙板_户外墙板_ASA共挤户外墙板-康亿家生态木业集团 | 煤粉喷枪_高炉喷煤枪_陶瓷喷煤枪-北京耐默公司 | 天然气车船展、氢能装备展、氢燃料汽车展、核电装备展、国防信息化装备展---北京企发展览服务有限公司 | 长沙变频器维修,变频器维修,ABB变频器维修,西门子变频器维修,施耐德变频器维修,伺服驱动器维修,工业机器人维修,20年专业工控电气维修,长沙文铖电气设备有限公司_长沙文铖电气设备有限公司 | 深圳起重机,龙门吊,天车起重工程,电动葫芦,液压升降货梯-深圳市德力起重机械有限公司 | 南洋电缆_南洋电线电缆_广州南洋电缆集团有限公司 | 上海海外置业展_2024海外置业移民留学展_4月5-7日_企业参展处/免费领门票 | 自动_链条式_电动推杆_电动开窗器厂家_山东鑫宏玺智能科技有限公司 | 南京人才网_南京招聘网_南京人才市场最新招聘信息 | 呼吸家官网|肺功能检测仪生产厂家|国产肺功能仪知名品牌|肺功能检测仪|肺功能测试仪|婴幼儿肺功能仪|弥散残气肺功能仪|肺功能测试系统|广州红象医疗科技有限公司|便携式肺功能仪|大肺功能仪|呼吸康复一体机|儿童肺功能仪|肺活量计|医用简易肺功能仪|呼吸康复系统|肺功能仪|弥散肺功能仪(大肺)|便携式肺功能检测仪|肺康复|呼吸肌力测定肺功能仪|肺功能测定仪|呼吸神经肌肉刺激仪|便携式肺功能 | 三机一体除湿干燥机,色母机,称重式拌料机,工业冻水机,中央集中供料-东莞市瑞达机械科技有限公司(瑞达国际) | 铜陵耐火砖|铜陵耐火浇注料|铜陵耐火材料|铜陵市金钟物资经营部【官网】 | 软文营销推广-新闻稿发布-软文撰写-百科词条编辑-品牌全案策划推广网络营销传播-喜尚传媒 | 罗茨鼓风机价格_三叶罗茨鼓风机厂家-山东锦工有限公司 | 体育馆木地板厂家_篮球木地板价格_舞台木地板品牌-欧氏地板 | 五金冲压厂家_五金冲压件加工_微细孔加工-深圳市浩鑫精密五金制品有限公司 | 淮南网站制作丨淮南做网站丨淮南网络公司丨淮南哪家网络公司好丨淮南智讯网络 | 频闪仪,便携式频闪仪厂家_灯管,频闪仪之父-杭州品拓电子技术有限公司 | 小程序定制,小程序开发,北京小程序公司,网站建设,网站制作,北京网站建设,北京网站制作 | 聚丙烯酰胺,聚合氯化铝,重金属捕捉剂,污泥调理剂,活性氧化铝,生石灰,反渗透阻垢剂,工业葡萄糖,硫酸铝,果壳活性炭,柱状活性炭,蜂窝活性炭,石英砂,锰砂-北京雁归来环保科技有限公司-以真诚为立足之本,以质量为生存之本,愿与海内外同仁共创双赢。雁归来人一路走来,气贯长虹,勇锐盖过怯弱,进取压倒苟安!我们紧扣时代脉搏,专注水处理、继往开来! | 宁波公司注册_宁波注册公司_宁波代理记账_宁波做内账|安隆会计专业服务机构 | 微机继电保护测试仪,单相继电保护测试仪,三相继电保护测试仪,六相继电保护测试仪,介质损耗测试仪,氧化锌避雷器测试仪,无线核相仪-扬州豪泰电力科技有限公司 | 真石漆生产厂家|外墙水包水|水包砂-新佳官网 | 环球医网 | 带来健康生活...| 湖南视频会议设备厂家|长沙视频会议设备安装型号齐全找湖南日恒智能工程有限公司 | 鸿茗商务-杭州鸿茗商务咨询有限公司 | 扬州市德友线缆有限公司-业从事高端特种线缆研发、制造、销售与服务。 | 泰州阳光会计服务有限公司官网-泰州公司注册|泰州代理记账 | 精密电动平移台|光学隔振平台|手动位移台|隔振平台|电动滑台-北京集科仪器 |