谁唤醒了 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跟踪相关推荐

  1. 跟踪分析Linux内核5.0系统调用处理过程

    跟踪分析Linux内核5.0系统调用处理过程 学号384 原创作业转载请注明出处+中国科学技术大学孟宁老师的Linux操作系统分析 https://github.com/mengning/linuxk ...

  2. 实验三 Linux的启动与关闭,实验三:跟踪分析Linux内核的启动过程

    Ubuntu 16.04下搭建MenuOS的过程: 1.下载内核源代码编译内核 1 # 下载内核源代码编译内核 2 cd ~/LinuxKernel/ 3 wget https://www.kerne ...

  3. linux内核make menuconfig执行过程

    近两年一直有着写linux内核相关的想法,比如从Makefile执行 make menuconfig.make,到x86架构的引导启动过程.由于网上有较多相关的文章,便有些羞涩于自己动手写.现在想着无 ...

  4. I.MX6 make menuconfig OTG to slave only mode

    /******************************************************************************* I.MX6 make menuconf ...

  5. 举例跟踪分析Linux内核5.0系统调用处理过程

    学号最后三位编号:094 原创作品转载请注明出处 + https://github.com/mengning/linuxkernel/ 0.实验内容 编译内核5.0 qemu -kernel linu ...

  6. 跟踪分析Linux5.0系统调用过程

    学号210 原创作品转载请注明出处 + https://github.com/mengning/linuxkernel/ 一.实验要求 二 二.实验环境 Ubuntu18 gcc 7 三.编译环境 1 ...

  7. Melis4.0[D1s]:1.启动流程(与adc按键初始化相关部分)跟踪笔记

    文章目录 1.启动流程 1.1 最先进入的文件:head_s.S 1.2 start_kernel()函数所在的文件:init.c 1.3 input_init()函数所在文件:sys_input.c ...

  8. 应用调试之使用strace命令跟踪系统调用

    一.安装: 1.解压:tar xvf strace-4.5.15.tar.bz2 2.打补丁:cd strace-4.5.15 patch -p1 < ../strace-fix-arm-bad ...

  9. make menuconfig简介

    Y--将该功能编译进内核  N--不将该功能编译进内核 M--将该功能编译成可以在需要时动态插入到内核中的模块   如果你是使用的是 make xconfig,那使用鼠标就可以选择对应的选项.这里使用 ...

最新文章

  1. 宝马无人车体验:把司机彻底干掉,有必要吗?
  2. 把一个目录文件设为临时内存目录文件,以加快读写速度
  3. python爬虫 小白轻松从0到1_小白学 Python 爬虫(1):开篇
  4. 绘图: Python matplotlib简介
  5. Windows 7防火墙阻止了远程桌面连接的解决方法
  6. 用API实现串口异步读写
  7. 转-Android仿微信气泡聊天界面设计
  8. 力扣-1290 二进制链表转整数
  9. idea装vue插件之后没有代码提示怎么办呢
  10. 信用报告OCR服务 助力授信审核快人一步
  11. html5 微信播放语音,html5的audio实现高仿微信语音播放效果
  12. Android隐藏桌面图标,不显示应用图标
  13. 隐藏文件ipynb_checkpoints引起错误
  14. 自定义Dialog去除白色背景 + Dialog其他用法
  15. 谈 DevOps 自动化时,也应该考虑到 SOX 等法案
  16. 二台电脑之间数据库文件进行备份
  17. Hadoop的脚本语言Pig应用
  18. python-matplotlib-箱线图为不同的箱体设置不同颜色
  19. TeamViewer挂了?用这几种方式依然可以实现Windows远程连接Linux
  20. 最新各大CMS采集资源站解析网址合集

热门文章

  1. 基于xxx答题系统程序流程图
  2. sqlalchemy(数据库炼金术)
  3. DC电源插座DC-002特征,DC插座图纸
  4. iPad全面屏适配问题
  5. 心里窝火无语的图片_对自己无语的说说、句子及图片
  6. 人身保险的误区(一)
  7. android危险权限分组,Android 中的危险权限详细整理
  8. 101种在家就能做的网上生意
  9. php一个中文占几个字节,php中一个字符占用几个字节?
  10. c++中extern用法总结