OpenWrt make menuconfig 构建过程
OpenWrt make menuconfig 构建过程
1.课题背景
之前在《20190614 OpenWrt如何添加驱动以及应用程序 谢艺华-遗留问题解答》文档的问题7中,承诺要写一个关于make menuconfig的构架过程。于是就决定花点时间熟悉一下流程,方便以后的工作。
2. 分析过程
2.1 OpenWrt目录下的Makefile
分析make menuconfig的过程也就是分析Makefile的过程,于是我们就从最上层的Makefile 开始。
我们看到它的目标是world,并且ifneq ($(OPENWRT_BUILD),1)成立,所以走的是上面的逻辑。如图:
通过分析,debug.mk,depends.mk,toplevel.mk。发现menuconfig的目标在topleve.mk中。debug.mk和depends.mk只是一些变量和函数的定义。所以我们重心就是在toplevel.mk上。
2.2 toplevel.mk
我们可以看到menuconfig的目标依赖和命令如下:
- scripts/config/mconf是该文件中一个目标,如图:
它的作用就是编译,再scripts/config目录下生成mconf可执行文件。
- prepare-tmpinfo是该文件中的一个目标,待会再陈述。
- FORCE作用是强制去执行,因为我们知道,Makefile的原理是,只有当依赖文件中比目标文件要新,才会去执行相应的命令。所以有FORCE,就一定会执行。
- 下面的shell语句:
if [ \! -e .config -a -e $(HOME)/.openwrt/defconfig ]; then \
cp $(HOME)/.openwrt/defconfig .config; \
fi
的意思是:当前目录下的.config不存在并且$(HOME)/.openwrt/defconfig存在,就将$(HOME)/.openwrt/defconfig拷贝一份为.config。由于我们不存在$(HOME)/.openwrt/defconfig。所以可以不用在意。
- $< Config.in中的$<是自动化变量,表示依赖中的第一个目标名,即scripts/config/mconf。
最终就是:scripts/config/mconf Config.in。你可以尝试再终端输入该命令,看一下是什么效果。
现在再来看一下prepare-tmpinfo这个目标。如图:
第一行命令似乎没有什么作用;我就不赘诉了。
重点是第三行和第四行,我们可知是调用了scan.mk生成了packageinfo和targetinfo文件,具体的内容,我们待会再说。
后面根据shell语句进行处理:
其中,-nt是newer than的意思,用于判断文件的新旧,若t比f新,则为真。metadata.pl是perl语言文件,具体作用不清楚,不过应该是根据f文件生成t。
后面的几句都是类似的了,都是用于生成一些临时文件。
2.3 scan.mk
scan.mk中的目标是all,如图:
其中,$(TMP_DIR)/.$(SCAN_TARGET)为依赖,因为scan.mk中的内容较多,大多是一些正则表达的内容,所以接下来我主要介绍思路,不会介绍过于详细,依赖如图:
命令中progress只是打印,不需要关心。其中-cat 表示出错也不提示,$(FILELIST)目标如下图:
其中FIND_L表示find -l,,命令行:
$(call FIND_L, $(SCAN_DIR)) $(SCAN_EXTRA) -mindepth 1 $(if $(SCAN_DEPTH),-maxdepth $(SCAN_DEPTH)) -name Makefile | xargs grep -aHE 'call $(GREP_STRING)' | sed -e 's#^$(SCAN_DIR)/##' -e 's#/Makefile:.*##' | uniq | awk -v of=$(OVERRIDELIST) -f include/scan.awk > $@
表示在$(SCAN_DIR)目录中进行搜索Makefile的文件,再将所有的Makefile以'call $(GREP_STRING)'字符串进行过滤,将其保存到$(FILELIST)中。
之前《如何在OpenWrt中添加应用程序和驱动程序》的ppt中介绍过,添加的每个Makefile在最后一句都是有
$(eval $(call BuildPackage,Packagename)),语句。因此在这里就会起到作用。由于篇幅关系,我们只要知道它会根据Package中的Makefile内容生成tmp/.packageinfo文件即可。其内容如图:
2.4 Config.in
在toplevel.mk中我们知道最终执行的是scripts/config/mconf Config.in。来生成图形界面,我们来看一下Config.in的内容:
从内容可知,Config.in的作用类似于一个配置文件,告诉mconf应该加载的文件路径。我们看一下tmp/.config-package.in里面的内容,如图:
有过linux内核开发经验的人可以看出,这里面的语法和linux 内核中Kconfig的语法一致。因此OpenWrt图形界面显示的语法和linux的是一样的,只不过是通过它的package机制进行了转化。
3 总结
通过上面的分析,我认为大致流程可概括如下:
- 顶层Makefile调用toplevel.mk,执行其中的menuconfig 目标。
- toplevel.mk的任务有以下几个:
- 编译script/config/mconf
- 调用scan.mk生成tmp/.packageinfo文件
- 使用metadata.pl脚本根据tmp/.packageinfo生成tmp/.config-package文件
- 调用script/config/mconf Config.in 生成图形配置界面
- scan.mk的作用就是扫描package和target目录下的Makefile,根据Makefile中的内容生成tmp/.packageinfo,供metadata.pl使用
- Config.in 只是配置文件,作为mconf的参数。
OpenWrt make menuconfig 构建过程相关推荐
- U-Boot 之四 构建过程(Kconfig 配置 + Kbuild 编译)详解
在之前的博文 Linux 之八 完整嵌入式 Linux 环境介绍及搭建过程详解 中我们说了要一步步搭建整个嵌入式 Linux 运行环境,今天继续介绍 U-Boot 相关的内容.我所使用的硬件平台及 ...
- 基于荔枝派Nano学习Buildroot的构建过程
文章目录 0. 声明 1. 前言 2. 开发环境以及工具准备 2.1 主机系统 2.2 编译工具链 3. 构建系统Buildroot 3.1 工程配置 (1)首次构建工具链的情况 (2)使用外部工具链 ...
- 客快物流大数据项目(十四):DockerFile介绍与构建过程解析
目录 DockerFile介绍与构建过程解析 一.什么是Dockerfile 1.介绍 2.Dockerfile构建步骤
- Environ. Microbiol. | 土壤pH和温度调节农业生态系统中丰富和稀有细菌群落的构建过程...
点击蓝字 关注我们 编译:陈春宏 校稿:黄昕瑜 论文ID 原名:Soil pH and temperature regulate assembly processes of abundant an ...
- MPB:南京湖泊所王建军组-群落构建过程的定量指标——扩散-生态位连续体指数...
为进一步提高<微生物组实验手册>稿件质量,本项目新增大众评审环节.文章在通过同行评审后,采用公众号推送方式分享全文,任何人均可在线提交修改意见.公众号格式显示略有问题,建议电脑端点击文末阅 ...
- Science-2018-微生物群落的构建过程具有趋简性
标题 Emergent simplicity in microbial community assembly 期刊 Science, 2018 第一作者 Joshua E. Goldford 通讯作者 ...
- FPGA的设计艺术(11)FPGA的构建过程
前言 本文讨论FPGA的构建过程,由于FPGA的过程太多了,恐怕会有歧义,这个过程,不是开发过程,不是开发流程,而是实实在在的FPGA编译的过程,使用编译恐怕不是太合适,但是大家都叫习惯了,也知道FP ...
- 关卡设计快速入门_6. 执行构建过程
到目前为止,您可以看到阴影中的 "预览" 标签和墙底下的漏光效果.这是因为场景中的所有光源都是静态的,并且使用预计算或烘焙光照,但是这个预计算光照还没有进行计算.那里的 " ...
- 《配置管理最佳实践》——2.10 建立构建过程
本节书摘来自异步社区<配置管理最佳实践>一书中的第2章,第2.10节,作者: [美]Bob Aiello , Leslie Sachs著,更多章节内容可以访问云栖社区"异步社区& ...
最新文章
- 转: Meshlab简介
- Dos 改动IP 地址
- 计算机组成原理怎么考察的,计算机组成原理课程考察报告(论文).doc
- 【杂谈】计算机视觉在人脸图像领域的十几个大的应用方向,你懂了几分?
- morningcat2018 LearningDocs
- 复利计算1.0-2.0-3.0
- 航空订票系统(javaweb项目)
- 8uftp,8uftp连接不上怎么办
- 【爬虫】从地理空间数据云上批量下载遥感影像
- idea 2018 3.3版本破解
- QQ第三方网站授权登陆深入分析及cookie的高级运用
- 小米计算机弹歌曲,趣味冷知识!小米的T9拨号键盘可以弹乐曲,没想到吧!快来试试!...
- “网络侦探”基础教程
- IDE和SATA双硬盘安装全攻略
- 解决金山词霸和有道词典不能对pdf文档屏幕取词的方法
- 汽车隔音DIY全攻略
- flask+vue+websocket+neo4j+torch模型项目常见报错
- GitHub统计代码量
- U极速v5.2.4官方正式版
- 无线充电宝怎么用?耐用的无线充电宝盘点
热门文章
- python 拟合直线_python matplotlib拟合直线的实现
- 玩了三天三夜探挽懒月,我掉进一个巨大无比的坑
- 访问量大为什么服务会崩溃,崩溃的本质是什么?
- C# CAD 二次开发(一) -前期搜集资料篇
- WarGame系列之Natas(Web安全)通关指北(初级篇0-10)详细版
- 多节点CDN缓存加速系统wdcdn2.2版本发布(20111115)
- 【科研分享】如何通过论文学习并评价研究问题的价值
- 最新各大网站基站查询调研-真实测试
- chrome 浏览器主页被锁定 搜狗网址导航
- HYSBZ 1862 GameZ游戏排名系统