make menuconfig跟踪
谁唤醒了 menuconfig
在茫茫的编译的目标中,是谁唤醒了这个沉睡着的menuconfig? 那就让我来找一找吧。
首先我想到的就是搜这个关键字,总有个target叫这个名字吧。恩,终于皇天不负有心人,被我找到了。
在scripts/kconfig/Makefile,有这么个目标。
menuconfig: $(obj)/mconf
$< $(Kconfig)
不过这个已经是很底层了,那这个怎么也得有上层调用到才好。然后又回到主Makefile,搜kconfig关键字。
怎么着,主Makefile也得include kconfig中的什么东东吧,或者间接include?
话说我还真运气好,还找到了。 主Makefile中有这么两个target。
include $(srctree)/arch/$(SRCARCH)/Makefile
export KBUILD_DEFCONFIG KBUILD_KCONFIG
config: scripts_basic outputmakefile FORCE
$(Q)mkdir -p include/linux include/config
$(Q)$(MAKE) $(build)=scripts/kconfig $@
%config: scripts_basic outputmakefile FORCE
$(Q)mkdir -p include/linux include/config
$(Q)$(MAKE) $(build)=scripts/kconfig $@
那这个 build 变量又是什么个东西?同文件中没有定义这个变量, 没办法,再找include的文件。
还好,这次第一个就找到了。 在scripts/Kbuild.include 中,有这么个。
###
# Shorthand for $(Q)$(MAKE) -f scripts/Makefile.build obj=
# Usage:
# $(Q)$(MAKE) $(build)=dir
build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj
原来就是个缩写。。。 那我打出上面两个命令来看看究竟是怎么执行的吧。
mkdir -p include/linux include/config
make -f scripts/Makefile.build obj=scripts/kconfig menuconfig
哦,原来是这么调用的。 那就是要看 scripts/Makefile.build了。
恩,又是一顿狂找,最后发现,原来是在scripts/Makefile中有这个。。。
src := $(obj)
# The filename Kbuild has precedence over Makefile
kbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src))
kbuild-file := $(if $(wildcard $(kbuild-dir)/Kbuild),$(kbuild-dir)/Kbuild,$(kbuild-dir)/Makefile)
include $(kbuild-file)
哈,是不是发现了什么。 obj是作为变量传入的,这个时候obj 等于 scripts/kconfig 。
然后确定kbuild-dir是哪个目录,再确定kbiuld-file是哪个文件,也就是很多文档中写的,
如果有Kbuild就用kbuild,如果没有就用Makefile。
在scripts/kconfig中,只有Makefile, 那就包含了进来。
这个时候真相就大白于天下了。 终于见到了我们最初遇见的 scripts/kconfig/Makefile。
你是不是也明白了呢?
揭开menuconfig 的面目
我们终于找到了那个深藏在地底的menuconfig,将它唤醒到了地面。那就让我们来看看他究竟长什么样子吧。
接着上面的顺序,menuconfig是在 scripts/kconfig/Makefile 中被唤醒的。
menuconfig: $(obj)/mconf
$< $(Kconfig)
将这句话展开,
menuconfig: scripts/kconfig/mconf
scripts/kconfig/mconf Kconfig
原来是个叫mconf的东东藏在了scripts/kconfig目录里。 在scripts/kconfig/Makefile中,略微这么一搜,发现了
好东西。
lxdialog := lxdialog/checklist.o lxdialog/util.o lxdialog/inputbox.o
lxdialog += lxdialog/textbox.o lxdialog/yesno.o lxdialog/menubox.o
mconf-objs := mconf.o zconf.tab.o $(lxdialog)
ifeq ($(MAKECMDGOALS),menuconfig)
hostprogs-y += mconf
endif
mconf是一个host目标,也就是一个用户空间的应用程序。 他由 上面一共8个文件组成。
啊,不错,原来这就是个应用程序呢。那他究竟做了点什么呢?
make menuconfig跟踪相关推荐
- 跟踪分析Linux内核5.0系统调用处理过程
跟踪分析Linux内核5.0系统调用处理过程 学号384 原创作业转载请注明出处+中国科学技术大学孟宁老师的Linux操作系统分析 https://github.com/mengning/linuxk ...
- 实验三 Linux的启动与关闭,实验三:跟踪分析Linux内核的启动过程
Ubuntu 16.04下搭建MenuOS的过程: 1.下载内核源代码编译内核 1 # 下载内核源代码编译内核 2 cd ~/LinuxKernel/ 3 wget https://www.kerne ...
- linux内核make menuconfig执行过程
近两年一直有着写linux内核相关的想法,比如从Makefile执行 make menuconfig.make,到x86架构的引导启动过程.由于网上有较多相关的文章,便有些羞涩于自己动手写.现在想着无 ...
- I.MX6 make menuconfig OTG to slave only mode
/******************************************************************************* I.MX6 make menuconf ...
- 举例跟踪分析Linux内核5.0系统调用处理过程
学号最后三位编号:094 原创作品转载请注明出处 + https://github.com/mengning/linuxkernel/ 0.实验内容 编译内核5.0 qemu -kernel linu ...
- 跟踪分析Linux5.0系统调用过程
学号210 原创作品转载请注明出处 + https://github.com/mengning/linuxkernel/ 一.实验要求 二 二.实验环境 Ubuntu18 gcc 7 三.编译环境 1 ...
- Melis4.0[D1s]:1.启动流程(与adc按键初始化相关部分)跟踪笔记
文章目录 1.启动流程 1.1 最先进入的文件:head_s.S 1.2 start_kernel()函数所在的文件:init.c 1.3 input_init()函数所在文件:sys_input.c ...
- 应用调试之使用strace命令跟踪系统调用
一.安装: 1.解压:tar xvf strace-4.5.15.tar.bz2 2.打补丁:cd strace-4.5.15 patch -p1 < ../strace-fix-arm-bad ...
- make menuconfig简介
Y--将该功能编译进内核 N--不将该功能编译进内核 M--将该功能编译成可以在需要时动态插入到内核中的模块 如果你是使用的是 make xconfig,那使用鼠标就可以选择对应的选项.这里使用 ...
最新文章
- 宝马无人车体验:把司机彻底干掉,有必要吗?
- 把一个目录文件设为临时内存目录文件,以加快读写速度
- python爬虫 小白轻松从0到1_小白学 Python 爬虫(1):开篇
- 绘图: Python matplotlib简介
- Windows 7防火墙阻止了远程桌面连接的解决方法
- 用API实现串口异步读写
- 转-Android仿微信气泡聊天界面设计
- 力扣-1290 二进制链表转整数
- idea装vue插件之后没有代码提示怎么办呢
- 信用报告OCR服务 助力授信审核快人一步
- html5 微信播放语音,html5的audio实现高仿微信语音播放效果
- Android隐藏桌面图标,不显示应用图标
- 隐藏文件ipynb_checkpoints引起错误
- 自定义Dialog去除白色背景 + Dialog其他用法
- 谈 DevOps 自动化时,也应该考虑到 SOX 等法案
- 二台电脑之间数据库文件进行备份
- Hadoop的脚本语言Pig应用
- python-matplotlib-箱线图为不同的箱体设置不同颜色
- TeamViewer挂了?用这几种方式依然可以实现Windows远程连接Linux
- 最新各大CMS采集资源站解析网址合集