Linux 内核中的 kconfig 原理

转载:https://blog.csdn.net/qqliyunpeng/article/details/50858075
内核源码中是怎么实现menuconfig

1、第一步:配置生成.conf
当执行make menuconfig时,调用的是scripts/Kconfig/Makefile文件中对menuconfig的定义

menuconfig: $(obj)/mconf
$< $(silent) $(Kconfig)
展开启动的符号和一些变量

menuconfig: scripts/kconfig/mconf
scripts/kconfig/mconf -s Kconfig
逻辑是这样的:
1、menuconfig
2、检查scripts/kconfig/mconf文件是否存在
3、如果不存在,用Makefile中的依赖关系,生成mconf文件
4、如果存在,执行mconf Kconfig

执行的结构是输出图形界面。配置完成之后,在linux的家目录下生成.config隐藏文件
其中的内容:

CONFIG_ARM=Y
CONFIG_MIGHT_HAVE_PCI=Y
...
很明显,这些配置是不能使用的,内核在使用的时候其实是使用的根据配置文件生成的autoconf.h文件

2、autoconf.h文件的生成

这个文件位于include/config/generated/
文件的生成是最顶层的makefile中的这一句:

$(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig
展开:

@/bin/make -f scripts/kconfig/Makefile silentoldconfig
解释:进入scripts/kconfig/Makefile执行make silentoldconfig
此命令执行的是这样一句话:

conf --silentoldconfig Kconfig
他会检查,配置选项中是不是有 (new) 项,如果没有,便会在 include/ 目录下两个文件 conf、generated。如果有,可能会编译错误,因此,这里一定要注意配置中不能有新的配置项。
include/
├── config
│ ├── auto.conf
│ ├── auto.conf.cmd
│ ├── gen
│ │ └── choice1.h
│ ├── ledon.h
│ ├── num
│ │ ├── param2.h
│ │ └── param.h
│ ├── string
│ │ └── param.h
│ ├── tristate
│ │ └── param.h
│ └── tristate.conf
└── generated
└── autoconf.h

其中的 generated/autoconf.h 便是我们用图形界面配置的宏了,在普通工程中使用,只需要在文件的头部inlcude进 autoconf.h 即可。

猜你喜欢

转载自www.cnblogs.com/Ocean-Star/p/9235812.html
今日推荐