【说明】
继续前一节的内容,这节我们介绍编译的过程,这个其实是Makefile 的执行分析,而不是说编译的原理。还记得我们上一节生成的几个文件吗,在这一节就会用到。
【Makefile 分析】
由于Makefile 比较长,我们只需要关注一些重要的地方就可以了,我们的顺序当然是从文件开始到文件结束了
首先贴出我们在前一节生成的config.mk
读入 config.mk
选择交叉编译器
定义OBJS ,,+=表示追加,我只截图一部分
定义一堆需要编译的库
这个就是我们直接make 的时候的入口目标,显然我们比较关注这个u-boot.bin
找到u-boot.bin的依赖
其中 u-boot (依赖部分)指的是ELF格式的U-BOOT,而u-boot.bin 指的是二进制的U-boot
找到u-boot的依赖(不是u-boot.bin),一堆乱七八糟的,看不懂,怎么办?
我们直接执行make 不就行了吗,最后一行肯定就是这个乱七八糟扩展开以后的东西了。。
make 最后一步。。。+_+
整理一下发现是这样的,哈哈,和我们平时的也擦不多啊,就多了一个sed命令处理字符串嘛。。哈哈
【链接脚本】
我们从上边知道了编译的大体过程,现在我们需要知道看看链接脚本,从而了解U-BOOT.bin 的结构。
实际上我们在分析上边的编译过程最后一步发现其实指定了链接地址0XC7E00000
下面的0再加上 0XC7E00000 才是开始的链接地址
和我们裸机的一样,先指定几个需要放前面的,其他随便扔进来
.got段一般是动态链接用的,,这里我也不晓得有什么用。。难道U-BOOT里还用动态链接?不可能吧
下面2个是u-boot 自己定义的段,一个专门放命令的数据,一个专门放MMU用的数据
【自己定义链接地址】
那个0XC7E00000 的链接地址是哪里定义的呢?
在borad/samsung/mini6410 下的config.mk 里面有定义
如果想要改变U-BOOT在内存的起始地址就改动这个就可以了