• 2009-02-11

    u-boot编译过程二 - [uboot]

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://redboot.blogbus.com/logs/34991963.html

    接着上次,这次介绍make all的过程。
    首先,介绍一下生成的config.mk 和 config.h如何使用,得到正确配置的。

    config.mk直接被include到Makefile来,并使用其定义如下:
        include $(obj)include/config.mk
        export    ARCH CPU BOARD VENDOR SOC
    这样可以直接选择需要编译的模块,例如:
        LIBS += cpu/$(CPU)/$(SOC)/lib$(SOC).a
        LIBS += lib_$(ARCH)/lib$(ARCH).a
        LIBBOARD = board/$(BOARDDIR)/lib$(BOARD).a
    config.h被include/common.h所包含,而它有包含了相应硬件的头文件。
        common.h <--- config.h <--- smdk2410.h
    除了在源程序中,使用这些头文件的定义之外,uboot还有一个脚本通过解析common.h以及其包含的所有头文件信息,来生成配置信息如下形式:
        CONFIG_BAUDRATE=115200
        CONFIG_NETMASK="255.255.255.0"
        CONFIG_DRIVER_CS8900=y
        CONFIG_ARM920T=y
        CONFIG_RTC_S3C24X0=y
        CONFIG_CMD_ELF=y

    而头文件的定义的形式如下,对比可以看出脚本的工作原理。   
        #define CONFIG_BAUDRATE        115200
        #define CONFIG_NETMASK          255.255.255.0
        #define CONFIG_DRIVER_CS8900    1    /* we have a CS8900 on-board */
        #define CONFIG_ARM920T        1    /* This is an ARM920T Core    */
        #define    CONFIG_RTC_S3C24X0    1
        #define CONFIG_CMD_ELF

    通过这样,uboot可以自动得到一个模块选择的配置功能。如果我们需要添加什么定义或者功能,也可以在相应的头文件中加入定义实现。

    现在,配置已经得到,就看最后的编译流程。
    编译分为五大部分,分别如下:
        1. $(SUBDIRS) 工具,例子等,包括目录:tools examples api_examples
        2. $(OBJS)  启动模块 cpu/arm920t/start.o
        3. $(LIBBOARD) 板子支持模块 board/smdk2410/libsmdk2410.a
        4. $(LIBS)     其他模块,有诸如以下模块:
                cpu/arm920t/libarm920t.a
                cpu/arm920t/s3c24x0/libs3c24x0.a
                lib_arm/libarm.a
                fs/jffs2/libjffs2.a
                fs/yaffs2/libyaffs2.a
                net/libnet.a
                disk/libdisk.a
                drivers/bios_emulator/libatibiosemu.a
                drivers/mtd/libmtd.a
                drivers/net/libnet.a
                drivers/net/phy/libphy.a
                drivers/net/sk98lin/libsk98lin.a
                drivers/pci/libpci.a
                common/libcommon.a /

        5. $(LDSCRIPT) 链接脚本

    编译完成这五部分,链接成elf格式的u-boot文件,最后通过objcopy -O binary命令将elf格式转换成为raw binary格式的文件u-boot.bin就可以烧到板子上使用了。


    历史上的今天:


    收藏到:Del.icio.us