uboot的编译及配置浅析

转载 2012年03月26日 18:31:06

U-Boot的源码是通过GCCMakefile组织编译的。顶层目录下的Makefile首先可以设置开发板的定义,然后递归地调用各级子目录下的Makefile,最后把编译过的程序链接成U-Boot映像。

1.顶层目录下的Makefile

它负责U-Boot整体配置编译。按照配置的顺序阅读其中关键的几行。

每一种开发板在Makefile都需要有板子配置的定义。例如smdk2410开发板的定义如下。

smdk2410_config :   unconfig

     @./mkconfig $(@:_config=) arm arm920t smdk2410 NULL s3c24x0

执行配置U-Boot的命令make smdk2410_config,通过./mkconfig脚本生成include/config.
mk
的配置文件。文件内容正是根据Makefile对开发板的配置生成的。

ARCH   = arm

CPU    = arm920t

BOARD = smdk2410

SOC    = s3c24x0

上面的include/config.mk文件定义了ARCHCPUBOARDSOC这些变量。这样硬件平台依赖的目录文件可以根据这些定义来确定。SMDK2410平台相关目录如下。

board/smdk2410/

cpu/arm920t/

cpu/arm920t/s3c24x0/

lib_arm/

include/asm-arm/

include/configs/smdk2410.h

再回到顶层目录的Makefile文件开始的部分,其中下列几行包含了这些变量的定义。

# load ARCH, BOARD, and CPU configuration

include include/config.mk

export      ARCH CPU BOARD VENDOR SOC

Makefile的编译选项和规则在顶层目录的config.mk文件中定义。各种体系结构通用的规则直接在这个文件中定义。通过ARCHCPUBOARDSOC等变量为不同硬件平台定义不同选项。不同体系结构的规则分别包含在ppc_config.mkarm_config.mkmips_config.mk等文件中。

顶层目录的Makefile中还要定义交叉编译器,以及编译U-Boot所依赖的目标文件。

ifeq ($(ARCH),arm)

CROSS_COMPILE = arm-linux-          //交叉编译器的前缀

#endif

export CROSS_COMPILE

# U-Boot objects....order is important (i.e. start must be first)

OBJS = cpu/$(CPU)/start.o                  //处理器相关的目标文件

LIBS = lib_generic/libgeneric.a            //定义依赖的目录,每个目录下先把目标文件连接成*.a文件。

LIBS += board/$(BOARDDIR)/lib$(BOARD).a

LIBS += cpu/$(CPU)/lib$(CPU).a

ifdef SOC

LIBS += cpu/$(CPU)/$(SOC)/lib$(SOC).a

endif

LIBS += lib_$(ARCH)/lib$(ARCH).a

然后还有U-Boot映像编译的依赖关系。

ALL = u-boot.srec u-boot.bin System.map

all:        $(ALL)

u-boot.srec:    u-boot

          $(OBJCOPY) ${OBJCFLAGS} -O srec $< $@

u-boot.bin: u-boot

          $(OBJCOPY) ${OBJCFLAGS} -O binary $< $@

……

u-boot:         depend $(SUBDIRS) $(OBJS) $(LIBS) $(LDSCRIPT)

          UNDEF_SYM='$(OBJDUMP) -x $(LIBS) \

          |sed -n -e 's/.*\(__u_boot_cmd_.*\)/-u\1/p'|sort|uniq`;\

          $(LD) $(LDFLAGS) $$UNDEF_SYM $(OBJS) \

              --start-group $(LIBS) $(PLATFORM_LIBS) --end-group \

              -Map u-boot.map -o u-boot

Makefile缺省的编译目标为all,包括u-boot.srecu-boot.binSystem.mapu-boot.srecu-boot.bin又依赖于U-BootU-Boot就是通过ld命令按照u-boot.map地址表把目标文件组装成u-boot

其他Makefile内容就不再详细分析了,上述代码分析应该可以为阅读代码提供了一个线索。

2.开发板配置头文件

除了编译过程Makefile以外,还要在程序中为开发板定义配置选项或者参数。这个头文件是include/configs/<board_name>.h<board_name>用相应的BOARD定义代替。

这个头文件中主要定义了两类变量。

一类是选项,前缀是CONFIG_,用来选择处理器、设备接口、命令、属性等。例如:

#define   CONFIG_ARM920T        1

#define   CONFIG_DRIVER_CS8900 1

另一类是参数,前缀是CFG_,用来定义总线频率、串口波特率、Flash地址等参数。例如:

#define     CFG_FLASH_BASE      0x00000000

#define CFG_PROMPT         "=>"

3.编译结果

根据对Makefile的分析,编译分为2步。第1步配置,例如:make smdk2410_config;第2步编译,执行make就可以了。

编译完成后,可以得到U-Boot各种格式的映像文件和符号表,如表6.3所示。

6.3                                                  U-Boot编译生成的映像文件

   

    

   

    

System.map

U-Boot映像的符号表

u-boot.bin

U-Boot映像原始的二进制格式

u-boot

U-Boot映像的ELF格式

u-boot.srec

U-Boot映像的S-Record格式

U-Boot3种映像格式都可以烧写到Flash中,但需要看加载器能否识别这些格式。一般u-boot.bin最为常用,直接按照二进制格式下载,并且按照绝对地址烧写到Flash中就可以了。U-Bootu-boot.srec格式映像都自带定位信息。

4U-Boot工具

tools目录下还有些U-Boot的工具。这些工具有的也经常用到。表6.4说明了几种工具的用途。

6.4                                                              U-Boot的工具

   

    

   

    

bmp_logo

制作标记的位图结构体

img2srec

转换SREC格式映像

envcrc

校验u-boot内部嵌入的环境变量

mkimage

转换U-Boot格式映像

gen_eth_addr

生成以太网接口MAC地址

updater

U-Boot自动更新升级工具

这些工具都有源代码,可以参考改写其他工具。其中mkimage是很常用的一个工具,Linux内核映像和ramdisk文件系统映像都可以转换成U-Boot的格式。

相关文章推荐

u-boot配置和编译过程详解

备注:分析的是OK210开发板自带的uboot_smdkv210,可能有些部分和其他版本不太一样,但是原理都类似。编译u-boot的步骤make forlinx_linux_config make首先...

uboot配置和编译过程详解

uboot主Makefile分析1 1、uboot version确定(Makefile的24-29行) (1)uboot的版本号分3个级别: VERSION:主板本号 PATCHLEVEL:次版本号...

uboot开篇 — arm-linux-gcc安装及编译uboot

最近由于工作的原因需要研究下uboot在2440上的移植,于是乎今天开始着手。首先下载了uboot的源码(源码下载官网http://www.icdev.com.cn/batch.viewlink.ph...

2014.4新版uboot启动流程分析

2014.4最新版本uboot启动过程详解 在网上搜索讲uboot启动过程的文章,大多都是比较老的版本,于是决定将新版uboot启动过程记录下来,以备后用。 2014.4版本uboot启动至命令行几个...

uboot系列之----Uboot配置过程详细分析

继上篇博客,详细的分析顶层目录下的mkconfig文件 APPEND=no         # Default: Create new config file BOARD_NAME="" ...

MPC8313ERDB从NAND FLASH中启动系统

MPC8313ERDB从NAND FLASH中启动系统 mpc8313erdb的linux系统,存放于Nor Flash中,而Nor Flash只有8M,最近在root目录里面加了一点东西,结果Ram...

【原】移植uboot到MPC8313E-RDB---【一】MPC8313ERDB.h文件的配置

平台:mpc8313。 u-boot版本:uboot1.3.0。 DDR2:128MB:位于0x00000000。 启动nor-flash:型号,AM29LV040B-90JD,512Kx8BI...

MPC8313ERDB在Linux从NAND FLASH读取UBoot环境变量的代码分析

MPC8313ERDB在Linux从NAND FLASH读取UBoot环境变量的代码分析 Yao.GUET@2014-05-19 一。故事起因 因为文件系统的增大,已经大大的超出了8MB的NOR...

uboot 配置文件

一、配置文件名称和目录    这个配置文件的名称为   开发板名称.txt。  这个配置文件的目录为   include/configs/  目录。 二、宏定义 整个文件的内容使用条件宏...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)