自动化依赖的linux配置系统(基于menuconfig)
目的:将繁琐的menuconfig最大化避免重复,对一个长期项目,最大化减轻人力成本。
需要:
(1) mini_defconfig
(2) project.setup 文件, 保存两列,第一列为功能名称,第二列为选中与否(Y/N)
(3) function_config 文件,保存enable 该function必要的config设置,用于追加到mini_defconfig中;
1. 建立一个mini_defconfig, 此mini_defconfig 中是最小配置,即能保证系统启动后进入shell, 及最小linux命令。
这个最小defconfig将作为日后增加功能的baseline.
2. 以功能为导向,即以app为导向,每个功能app对应一个function config文件,里面保存着enable这个功能需要配置的config。
这些配置追加到mini_defcocnfig后,再make mini_defconfig, 会得到顺序调整过的.config,此时的.config即为增加了这个功能的defconfig.
3. 对于每一个project, 都会对应一个project setup配置文件,选中这个项目的功能,执行脚本时,脚本会把选中的功能对应的配置追加到mini_defconfig中,最后运行make mini_defconfig, 生成的.config中即该project 对应的config.
利用这种方式生成的系统,不需要额外做system size裁剪,这是正向按需求添加功能。而从一个别的项目拷贝过来的配置,却需要做配置的增减。
系统搭建需要完成的工作:
(1) 制作mini_defconfig
(2) 单独添加每一个功能,制作function_config 文件,目录名有function名字
(3) 制作 project.setup的选项全为N的baseline.
(4) 编写脚本:
(1) 解析project.setup中的功能,和project名;
(2) 拷贝mini_defconfig 为project_defconfig;
(3)从config_dir中搜索对应支持功能的function_config,并依次追加到project_defconfig。
(4)source 编译环境后,make project_defconfig, 生成对应.config, 并将.config 拷贝为project_defconfig.
优点:
(1)基于一个最小defconfig 来做功能添加,每个功能的config 依赖仅需要制作一次;
(2)各个功能的添加彼此独立,理论上,如果项目配置正确,config 在顶层可能会有重复选中的,但make project_defconfig后会梳理一遍;
(3)以后各个项目的系统大小裁剪工作被根据需求选择function来代替;即人工的事情,只重复一次,以后即可自动化配置;
注: 功能指二进制可执行文件,可按如下分类:
(1)系统功能app
(2)unit test
(3)debug 工具
(4)其余支持的linux 命令