Linux 内核中的 kconfig 原理
linux中的 make menuconfig 出来的图形界面来配置内核,这种方法很是方便,今天我们就来分析下内核源码中是怎么实现它的。
关于本项目的链接:http://git.oschina.net/qqliyunpeng/menuconfig
1. 第一步:配置生成 .conf
当我们执行 make menuconfig 的时候,调用的是 scripts/kconfig/Makefile 文件中对 menuconfig 的定义:
menuconfig: $(obj)/mconf
$< $(silent) $(Kconfig)
展开其中的符号和一些变量:
menuconfig: scripts/kconfig/mconf
scripts/kconfig/mconf -s Kconfig
逻辑是这样的:
- menuconfig
- 检查 scripts/kconfig/mconf 文件存不存在
- 如果不存在,用Makefile中的依赖关系,生成 mconf 文件
- 如果存在,执行 mconf Kconfig
执行的结果是输出图形界面。配置完成后,在linux的家目录下回生成 .conf 这个文件,注意,这个文件是隐藏文件。
其中的内容是这样的:
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 即可。
更多推荐
所有评论(0)