09课u-boot-1.1.6分析之makefile结构分析
cdsn用的不爽,图片显示不了,发表一遍文章还要等待审核;于是,转到博客园接着写;
作为一个菜鸟,这里只是每个晚上的笔记记录;为了记忆,总结,和以后查阅,写点什么,所以从这里开始吧.....
继续分析源码树里面的mkconfig 脚本

-z :测试字符串是否为空;
-o; 网上没查到,感觉应该是逻辑与的意思; 这里就是判断第6个参数是不是为空和是不是等于"NULL"
我们这里不是;所以只需else; LNPREFIX没有定义,所以就相当于 ln -s arch-s3c24x0 asm-arm/arch
就是在asm-arm目录下面建立一个arch(连接文件或者目录),它指向arch-s3c24x0

条件成立,继续创建连接文件 ln -s proc-armv asm-arm/proc
这里总结下:asm 是asm-arm的链接文件
arch-s3c24x0是在哪个目录,是在asm目录下面
proc-armv 是在哪个目录下面? 也是在asm目录下面
然后在asm-arm目录下面 建立了2个文件,proc arch2个目录链接
所以说呢;就是建立2个链接目录
继续往下走

这里生成一个config.mk文件
里面的内容就是:
ARCH =arm
CPU =arm920t
BOARD=100ask24x0

第5个参数存在,并且第5个参数不等于NULL,就再追加内容
这里是NULL 所以不用加了

第6个参数不为空,并且不等于NULL ,这里要追加SOC=s3c24x0
if [ "$APPEND" = "yes" ] # Append to existing config file
then
echo >> config.h
else
> config.h # Create new config file
fi
这里APPEND=no # Default: Create new config file,所以条件不成立
执行的就是这句话> config.h
> 代表新建一个文件
里面有什么内容;就是下面这2句话
echo "/* Automatically generated - do not edit */" >>config.h
echo "#include <configs/$1.h>" >>config.h
$1是什么,是100ask24x0.h
显然100ask24x0.h 这个就是我们的配置文件
-----------------------------------------------
再来分析一下编译过程,上面是分析配置过程
我们编译是怎么编译的呢,直接执行make 命令,所以还要分析这个makefile

看这句话,它包含了include下面的config.mk文件了
这个文件不是我们刚才分析配置过程,生成的文件嘛
所以配置过程,编译过程就是这么融合在一起的

这里呢?如果是arm架构,就采用arm-linux-(gcc) 来编译

这里看到很多LIBS ,其实就是把目录下设置的文件都编译了,然后打包成.a库

我们执行make 的时候;如果没有指定目标
它就会生成makefile里面的第一个目标,这里就是all
而all依赖什么?依赖ALL
我们的目的是想生成u-boot.bin,而它又依赖于什么呢?

这个的依赖u-boot是ELF格式的Uboot,u-boot.bin是二进制格式的uboot
\
__OBJS:所有的.o文件
—LIBS:所有的库
可以展开来看下,这里其他的我看不懂,有另外一个方法不用去完全展开来搞明白
也可以知道上面的这话是干嘛的,我们怎么做?直接make命令,看打印消息嘛
在make命令的最后面,肯定是连接命令

从这里可以看到 -T 后面指定了连接脚本, -Ttext 指定了代码段的基地址
第一个文件是哪个 cpu/arm920t/start.o
然后很多的.o 和库组织成uboot
这么多原材料,是怎么排放的,谁放在最前面?
我们就要看连接脚本

. 是代表当前地址,然后这个地址要加上-Ttext指定的33f80000, 从这个地址开始排放
可以看到,先是放start.0的代码段,再排放boot_init.o的代码段,再放所有文件的代码段

这里的.u_boot_cmd显然是uboot自己定义的;一般的文件没有
我们分析uboot的时候 就是从第一个文件开始分析的,从头读到尾,start.s是一个汇编文件;
大概就知道uboot的流程是什么样子了

浙公网安备 33010602011771号