目录
u-boot中的代码可裁剪
u-boot支持的功能很多,代码量也是很庞大,有的应用场景因为内存资源的限制,需要对其进行必要的裁剪。
本文将介绍一下,uboot中代码实现可裁剪性的方法。
核心思路
利用条件编译,通过改变条件来改变是否将目标代码编译进u-boot。
目标
将我们自己实现的一个命令,加上条件编译,然后可以通过make menuconfig进行配置。
自己添加u-boot命令,可以参考笔者上一篇博客“u-boot中添加自己的命令”,这里不再赘述。
1.源代码和函数申明处添加上宏定义
在需要裁减的部分添加上条件编译选项,格式如下
#ifdef CONFIG_XXX
代码段
#endif
意为,当CONFIG_XXX被定义的时候,代码段被编译。
注意:使用到CONFIG_XXX的代码,需要包含头文件#include <common.h>,这个头文件最后会包含CONFIG_XXX的文件。
2.配置宏定义
代码中加入了条件编译,那么就可以使用CONFIG_XXX来控制目标代码是否编译了。
实现这个功能,需要做两件事情。
第一:添加编译条件,在配置文件中,添加或者删除你的条件编译的条件
第二:修改Makefile,修改目标代码中的Makefile,以实现条件编译
添加编译条件
两种方法
- 直接在xxx_defconfig手动添加
- 通过make menuconfig添加
直接在xxx_defconfig手动添加
在编译u-boot的时候,会使用make xxx_defconfig,所以可以在这个文件中加入你的条件编译的条件。
通过make menuconfig添加
上述方式较为简单粗暴,在配置项少的情况下可以使用,但是配置项目多的话,层次就比较模糊,显得比较混乱。这里u-boot提供一种图形化配置的方式,make menuconfig,来管理众多的配置选项。
修改Makefile
修改目标代码所在层级的Makefile文件,如下图。
修改目标代码所在层级的Kconfig文件,如下图。
汇总
流程概述
- 首先代码中需要CONFIG_MY_TEST宏被定义了才会被编译连接
- 为了方便配置,使用make menuconfig进行管理,这个操作依赖于相应目录下的Kconfig文件。
- 在Kconfig文件里面添加自己的配置项
3.测试
在make menuconfig中配置,保存并退出,然后编译。
对比加入和不加入目标代码生成的u-boot.bin文件,可以看到最终的u-boot.bin大小发生了变化。