1. fixdep 工具
fixdep <depfile> <target> <cmdline>
作用:查找实现目标所用的命令、源码、头文件等全部信息。
参数1:<depfile>编译产生的依赖文件*.d
参数2:<target>编译生成的目标
参数3:<cmdline>编译使用的命令
返回:实现目标所用的命令、源码、头文件等全部信息
编译时,编译器会根据选项-MD
自动生成依赖文件.*.d
,用fixdep
更新.*.d
文件生成新的依赖文件.*.cmd
。
fixdep被两个地方调用:
- rule_cc_o_c:编译u-boot自身的%.c文件时,rule_cc_o_c调用fixdep去更新生成的%.c的依赖文件.%.cmd。
- if_changed_dep:适用于除了上述的rule_cc_o_c外的其他目标依赖文件的生成,例如生成主机上执行的程序、处理dts文件、处理汇编文件生成*.o(或生成*.s、*.lst)等。
2. conf 工具
conf <input_mode> <name>
作用1:配置时,将配置文件和Kconfig
文件中的相应信息写入到根目录下.config
中(生成)。
作用2:编译时,
- 检查并分析系统中各个
Kconfig
文件,- 同配置时生成的
.config
比较,更新.config
文件,- 生成下列文件供下一步编译使用:
include/generated/autoconf.h
include/config/auto.conf.cmd
include/config/tristate.conf
include/config/auto.conf
参数1:<input_mode>输入模式
参数2:<name>文件名
conf
由conf.o
和zconf.tab.o
链接而来,其中conf.c
生成conf.o
,是整个应用的主程序;zconf.tab.c
生成zconf.tab.o
,完成具体的词法和语法分析任务。
zconf.tab.c :用于读取并分析整个Kconfig
系统的文件,较为复杂,也比较枯燥。
conf.c :是conf
主程序的文件,通过分析main
函数可以大致了解操作流程:解析参数,不同的参数有不同的流程:
流程1: 参数1:–defconfig=arch/…/configs/rpi_3_32b_defconfig 、 参数2:Kconfig
- 从
$(srctree)
目录下依次查找名为Kconfig
的文件,然后将取得的信息存放到链表中- 读取指定的配置文件
arch/../configs/rpi_3_32b_defconfig
- 将读取到的所有配置写入
.config
文件中流程2: 参数1:syncconfig、 参数2:Kconfig
- 检查顶层目录下的
.config
文件是否存在- 读取生成的
.config
- 检查
.config
是否被改动过,并检查各项设置的有效性- 更新以下文件:
include/generated/autoconf.h
include/config/auto.conf.cmd
include/config/tristate.conf
include/config/auto.conf
3. pkg-config 工具
pkg-config [options] [libsname]
作用:将配置文件和Kconfig文件中的相应信息写入到.config
中。
参数1:options【- -cflags】:查看头文件信息
参数1:options【- - libs】:查看库信息
参数1:options【- - libs-all】:模块的所有信息
参数2:libsname:查询的库
返回值:返回我们已经安装库的信息的工具,比如库的头文件在哪里,链接它又需要到哪里等等信息。
4. mconf 工具
配置系统主要包含Makefile、Kconfig和配置工具,可以生成配置界面。其中,配置界面是通过配置工具来生成的,配置工具通过Makefile编译执行,配置界面中的选项则是通过各级的Kconfig(老版本也称Config.in)和Makefile(老版本也称Kbuild)文件定义。
scripts目录下提供了各种内核配置工具,表1是这些工具的说明。。
- zconf.tab.c :实现了解析Kconfig文件和配置主要函数;
- Zconf.tab.c :直接包括了下列一些C程序,这样各种配置功能都包含在zconf.tab.o目标文件中了;
2.1 lex.zconf.c:实现 lex 语法解析器;
2.2 util.c :实现配置工具;
2.3 confdata.c :实现 .config 等相关数据文件保存;
2.4 expr.c :实现表达式函数;
2.5 symbol.c :实现变量处理函数;
2.6 menu.c :实现菜单控制函数;
例如:通过 mconf 程序去解析 Kconfig 文件,然后生成对应的配置文件.config
。