Linux之uboot入门(三)---make

上一篇我们分析了make config的具体过程。

那么第二条指令就是make。

在make的过程中,服务器做了哪些编译呢?

 

还是分析Makefile,

首先找到all, 这是make的终极目标。

第242行可以找到all,他的依赖文件是240行的  

$(obj)u-boot.srec $(obj)u-boot.bin $(obj)System.map $(U_BOOT_NAND)

我们看到其中之一是u_boot.bin

那么接着往下找u_boot.bin的依赖:

250行是u_boot.bin的依赖关系,依赖的是u_boot(elf格式)。

263行是u_boot的依赖。到这里我们有两种分析方式,

第一种,顺着下面的编译条件一路查找下去。

第二种,make后肯定会生成u_boot.bin,打印信息可以看到和263行相关部分的信息。

这里我们选择第二种,看起来会方便一点。

这里我们可以看到和263行相关的部分。

依次展开:

UNDEF_SYM=`arm-linux-objdump -x 
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 |sed  -n -e 's/.*\(__u_boot_cmd_.*\)/-u\1/p'|sort|uniq`;\


cd /home/book/windows_share/u_boot_1.1.6/u-boot-1.1.6 && 
arm-linux-ld -Bstatic -T 
/home/book/windows_share/u_boot_1.1.6/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  \

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

我们可以看到在链接脚本中,u_boot.lds 的BASE_ADDR是0x33F80000。

那么我们从这个u_boot.lds开始分析入手。

从这里可以看到,

最先放置的是代码段(text),而在代码段中,最先放置的是start.o和boot_init.o。

那么说明star.o和boot_init.o的源文件是入口代码。

紧接着是其他所有代码段地址(*.text),

只读数据段地址(*.rodata)

数据段地址(*.data)

...

等等。

所以接下来分析的话需要先从start.S和boot_init.S开始入手分析u_boot的源码开始。

总结一下u_boot的编译流程:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值