小白视角看uboot makefile
要了解uboot的结构,最好的办法就是看uboot根目录下的Makefile。作为小白,第一次看Makefile时简直如同天书,下面内容是我看了韦东山uboot视频教程,以及makefile规则教程后写下的。
uboot源码中许多可以直接编译的开发板,型号存在./board中,以smdk2410开发板为例。(后续内容均将uboot根目录定为当前目录)
生成uboot.bin文件我们需要执行两条命令:
make smdk2410_config
make
第一条将它称为配置
第二条则是编译
先来看第一条 配置
1. make smdk2410_config
打开在uboot根目录下的Makefile文件,搜索smdk2410_config,找到如下两行
smdk2410_config : unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 samsung s3c24x0
预习一下makefile教程后,大概知道这两行所做的事情:
- smdk2410_config是一个标签入口,依赖于unconfig目标
- 搜索unconfig,找到unconfig做了什么:
unconfig:
@rm -f $(obj)include/config.h $(obj)include/config.mk \
$(obj)board/*/config.tmp $(obj)board/*/*/config.tmp \
$(obj)include/autoconf.mk $(obj)include/autoconf.mk.dep
unconfig 会删除一些文件,这些文件应该是每次make xxx_config
都会生成的,清理这些上次生成文件,为当前这次做准备
-
回到
@$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 samsung s3c24x0
这一行
这其实是一句命令,解析之后其实就是:
mkconfig smdk2410 arm arm920t smdk2410 samsung s3c24x0
也就是执行mkconfig命令,后面跟着6个参数 -
mkconfig应该是个可执行文件,在uboot根目录下搜索,果然发现了mkconfig文件,打开查看里面内容
mkconfig文件中前半部分为一大堆判断语句,大概是用来分析参数是否合法输入。
重点在后半段:
#
# Create include file for Make
#
echo "ARCH = $2" > config.mk #ARCH = (传入的第二个参数) 新建config.mk并写入
echo "CPU = $3" >> config.mk #CPU = (传入的第二个参数) 写入到config.mk
echo "BOARD = $4" >> config.mk #BOARD = (传入的第三个参数) 写入到config.mk
...
...
果然涉及到了上面unconfig
所删除的文件,确认了make smdk2410_config
这句话最终会生成一些文件
那我们执行一遍make smdk2410_config
,验证猜测
./include/config.mk
ARCH = arm
CPU = arm920t
BOARD = smdk2410
VENDOR = samsung
SOC = s3c24x0
./include/config.h
/* Automatically generated - do not edit */
#include <configs/smdk2410.h>
#include <asm/config.h>
结果和mkconfig中所做的一致。
到这里,make smdk2410_config
命令就结束了,解析出来做了两句话:unconfig
和
mkconfig smdk2410 arm arm920t smdk2410 samsung s3c24x0
unconfig
会删除一些上次残留的文件,另一句则会根据传入参数自动生成 ./include/config.mk 和 ./include/config.h等文件
其实就是做了配置工作,选中了下一步编译中用到的 CPU架构、种类、名字等等
第一条命令分析完了,再来看第二条
2. make
根据makefile规则,直接执行make命令,就会在执行Makefile文件中第一个标签的内容
在行终于找到第一个标签all:
待续...