uboot学习——Makefile结构分析

要想了解uboot的众多文件是怎么链接和编译的最好的办法就是去分析它的makefile。在之前的文章中我们看到了,uboot编译过程中发挥关键作用的两步配置和编译,下面就结合makefile分析一下这两步到底做了什么。

1、分析配置过程

首先在uboot根目录下找到并打开makefile。配置过程中使用了 make 100ask24x0_config命令,在makefile中查找100ask24x0_config。

分析这一条命令。

查找MKCONFIG,说明在源码目录下有mkconfig文件。

$@指的是目标文件,在这就是100ask24x0_config,_config此处无定义被目标文件替换。

综上这一条命令相当于 :mkconfig 100ask24x0_config arm arm920t 100ask24x0 NULL s3c24x0。

 

打开uboot根目录下的mkconfig进行进一步分析。

可以看出mkconfig文件的作用是对mkconfig 100ask24x0_config arm arm920t 100ask24x0 NULL s3c24x0这条命令传入的参数进行分析。

这条命令共有7个参数大于0个,第一个参是arm不含--、-a、-n、*,因此APPEND=no, BOARD_NAME=arm,终端回显输出Configuring for ${BOARD_NAME} board...

判断SRCTREE和OBJTREE是否相等。

搜索makefile 

BUILD_DIR未定义,所以SRCTREE和OBJTREE都等于CURDIR,执行else分支。

进入include目录删除原有的asm文件,建立链接指向asm-arm的链接文件asm。

删除asm-arm/arch目录

判读$6参数是否为空或者不存在,进入else分支。LNPREFIX未定义,相当于执行在arch目录下建立指向arch-s3c24x0的asm-arm文件的命令。

$2参数等于arm,执行在proc目录下建立指向proc-armv的asm-arm文件的命令。

 

创建config.mk文件,并将"ARCH   = arm"写入文件;

在文件中追加"CPU    = arm920t";

在文件中追加"BOARD    = 100ask24x0";

$6存在且不为空,在文件中追加"SOC    = s3c24x0"。

最终config.mk的内容为:

ARCH   = arm

CPU    = arm920t

BOARD    = 100ask24x0

SOC    = s3c24x0

 

APPEND = no进入else分支,创建config.h。

追加"/* Automatically generated - do not edit */" 到config.h;

追加"#include <configs/$1.h>" 到config.h;

exit(0):正常运行程序并退出程序。

2、分析编译过程

分析makefile

这里将之前配置时生成的配置文件包含了进去。

此处OBJS=arm920t。

lib文件是将相应目录下编译好的文件进行打包。

make时不指定目标就自动指向第一个目标 ,所以all依赖于ALL。

uboot.bin依赖于uboot.elf。

uboot.elf依赖于上图的文件。直接分析makefile可能比较麻烦,我们可以make之后看后几行echo。

cd /home/book/Desktop/u-boot-1.1.6 && arm-linux-ld -Bstatic -T /home/book/Desktop/u-boot-1.1.6/board/100ask24x0/u-boot.lds -Ttext 0x33F80000  $UNDEF_SYM cpu/arm920t/start.o \
        --start-group lib_generic/libgeneric.a board/100ask24x0/lib100ask24x0.a cpu/arm920t/libarm920t.a cpu/arm920t/s3c24x0/libs3c24x0.a lib_arm/libarm.a fs/cramfs/libcramfs.a fs/fat/libfat.a fs/fdos/libfdos.a fs/jffs2/libjffs2.a fs/reiserfs/libreiserfs.a fs/ext2/libext2fs.a net/libnet.a disk/libdisk.a rtc/librtc.a dtt/libdtt.a drivers/libdrivers.a drivers/nand/libnand.a drivers/nand_legacy/libnand_legacy.a drivers/usb/libusb.a drivers/sk98lin/libsk98lin.a common/libcommon.a --end-group -L /work/tools/gcc-3.4.5-glibc-2.3.6/lib/gcc/arm-linux/3.4.5 -lgcc \
        -Map u-boot.map -o u-boot

可以分析出:

    1、链接时第一个文件是cpu/arm920t/start.S
    2、链接地址=borad/100ask24x0/u-boot.lds  +  TEXT_BASE

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值