Android环境下关于kconfig,.config的解读及meneconfig 相关符号说明[M],{*},< >,-*-
2017-07-03 20:17
543 查看
kconfig的作用
Kconfig 文件是用来管理哪个文件或哪一行(需要用宏包含起来的)需要编译,是linux可裁剪特性的主要实现方式。(ps:makefile的作用是用来管理文件之间的依赖关系的)
kconfig是如何实现上面的神奇功能的
linux源码根目录下的script文件夹中是实现makemenuconfig等配置工具的源码。其次在linux源码的各个目录中都有一个kconfig文件,这些文件定义了一些宏定义及其状态选项,为menuconfig提供框架结构。在执行make menuconfig时会依次读取各个目录中的kconfig文件,生成配置树框架,再读取arch/arm/configs/xxxdefconfig 文件中的默认配置值,为之前的配置树赋值,然后生成.config及autoconf.h文件。生成的这两个文件是关键点!我们来看一下这两个文件的内容:(本文使用android编译环境,并非纯粹的linux编译环境)
下面以himax 触摸屏的驱动为例进行介绍:
out\target\product\msm8953_64\obj\KERNEL_OBJ\.config
![](https://img-blog.csdn.net/20170703201359119?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvUmFkaWFuY2VCbGF1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
out\target\product\msm8953_64\obj\KERNEL_OBJ\include\generated\autoconf.h
![](https://img-blog.csdn.net/20170703201441022?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvUmFkaWFuY2VCbGF1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
可见autoconf.h被源码中各个文件所包含就可以实现对其中宏的控制了,这个比较简单,那如果希望整个.c文件都不要参与编译呢?这就用到上面一个.config文件了,当然还需要makefile文件的配合,来看一下himax驱动文件夹的makefile文件内容。
\kernel\drivers\input\touchscreen\hx852xf\makefile
![](https://img-blog.csdn.net/20170703201514612?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvUmFkaWFuY2VCbGF1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
通过obj-$(CONFIG_TOUCHSCREEN_HIMAX_I2C) 的方式引用.config中的配置,实现控制文件是否参与编译。
就是这样.config可以控制全局,决胜千里!
Android编译kernel时make menuconfig是没有作用的
Android 中编译时会以arch/arm64/configs/xxxdefconfig和各级kconfig文件生成到out\target\product\msm8953_64\obj\KERNEL_OBJ\.config。
执行完Make menuconfig 在对android进行全编,menuconfig的操作是无效的,因为android下编译脚本去out\target\product\msm8953_64\obj\KERNEL_OBJ\目录寻找.config 文件,而menuconfig生成在kernel根目录,除非将menuconfig生成的.config替换掉arch/arm64/configs/xxxdefconfig文件。
defconfig和perf_defconfig
$(CONFIG_XXXXX)的开关是在kernel/arm/arm64/config/msmxxx_defconfig里面定义的
我们一个项目通常对应两个msmxxx_defconfig,一个是msmxxx_defconfig一个是msmxxx-perf_defconfig
msmxxx_defconfig里面有很多debug开关是打开的,msmxxx-perf_defconfig是user版本默认的配置的,所以提交配置两个文件通常都需要提交。
而对于选择哪个defconfig是定义在device/qcom/msmXXX/AndroidBoard.mk里面
![](https://img-blog.csdn.net/20170704174332224?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvUmFkaWFuY2VCbGF1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
meneconfig相关符号说明
在 make menuconfig产生的菜单中会看到 [ ], { }, ( ),<
>等符号,它们的意思如下:
[ ] :在方括号里,只能选择 * (built-in)和不选择。
( ) :在圆括号里,允许输入相关参数。 (对应于 Kconfig中的
string, int hex)
{ } :在花括号里,只能选择 M (以模块方式)和
* (built-in)。
< > :在尖括号里,可以有 3态选择 (tristate),即
M , *和不选。
另外,还会看到 -*- 这样形式的符号,比如:
-*- GPIO Support --->
它表示该项只能以 built-in的形式存在。
Kconfig 文件是用来管理哪个文件或哪一行(需要用宏包含起来的)需要编译,是linux可裁剪特性的主要实现方式。(ps:makefile的作用是用来管理文件之间的依赖关系的)
kconfig是如何实现上面的神奇功能的
linux源码根目录下的script文件夹中是实现makemenuconfig等配置工具的源码。其次在linux源码的各个目录中都有一个kconfig文件,这些文件定义了一些宏定义及其状态选项,为menuconfig提供框架结构。在执行make menuconfig时会依次读取各个目录中的kconfig文件,生成配置树框架,再读取arch/arm/configs/xxxdefconfig 文件中的默认配置值,为之前的配置树赋值,然后生成.config及autoconf.h文件。生成的这两个文件是关键点!我们来看一下这两个文件的内容:(本文使用android编译环境,并非纯粹的linux编译环境)
下面以himax 触摸屏的驱动为例进行介绍:
out\target\product\msm8953_64\obj\KERNEL_OBJ\.config
out\target\product\msm8953_64\obj\KERNEL_OBJ\include\generated\autoconf.h
可见autoconf.h被源码中各个文件所包含就可以实现对其中宏的控制了,这个比较简单,那如果希望整个.c文件都不要参与编译呢?这就用到上面一个.config文件了,当然还需要makefile文件的配合,来看一下himax驱动文件夹的makefile文件内容。
\kernel\drivers\input\touchscreen\hx852xf\makefile
通过obj-$(CONFIG_TOUCHSCREEN_HIMAX_I2C) 的方式引用.config中的配置,实现控制文件是否参与编译。
就是这样.config可以控制全局,决胜千里!
Android编译kernel时make menuconfig是没有作用的
Android 中编译时会以arch/arm64/configs/xxxdefconfig和各级kconfig文件生成到out\target\product\msm8953_64\obj\KERNEL_OBJ\.config。
执行完Make menuconfig 在对android进行全编,menuconfig的操作是无效的,因为android下编译脚本去out\target\product\msm8953_64\obj\KERNEL_OBJ\目录寻找.config 文件,而menuconfig生成在kernel根目录,除非将menuconfig生成的.config替换掉arch/arm64/configs/xxxdefconfig文件。
defconfig和perf_defconfig
$(CONFIG_XXXXX)的开关是在kernel/arm/arm64/config/msmxxx_defconfig里面定义的
我们一个项目通常对应两个msmxxx_defconfig,一个是msmxxx_defconfig一个是msmxxx-perf_defconfig
msmxxx_defconfig里面有很多debug开关是打开的,msmxxx-perf_defconfig是user版本默认的配置的,所以提交配置两个文件通常都需要提交。
而对于选择哪个defconfig是定义在device/qcom/msmXXX/AndroidBoard.mk里面
meneconfig相关符号说明
在 make menuconfig产生的菜单中会看到 [ ], { }, ( ),<
>等符号,它们的意思如下:
[ ] :在方括号里,只能选择 * (built-in)和不选择。
( ) :在圆括号里,允许输入相关参数。 (对应于 Kconfig中的
string, int hex)
{ } :在花括号里,只能选择 M (以模块方式)和
* (built-in)。
< > :在尖括号里,可以有 3态选择 (tristate),即
M , *和不选。
另外,还会看到 -*- 这样形式的符号,比如:
-*- GPIO Support --->
它表示该项只能以 built-in的形式存在。
相关文章推荐
- 关于web.config中<customErrors>节点说明
- 关于web.config中<customErrors>节点说明
- 关于web.config中<customErrors>节点说明
- 关于web.config中<customErrors>节点说明
- 关于web.config中<customErrors>节点说明
- 关于web.config中<customErrors>节点说明
- 关于web.config中<customErrors>节点说明
- 关于web.config中<customErrors>节点说明
- 关于web.config中<customErrors>节点说明
- Spring配置项<context:annotation-config/>解释说明
- <Android入门笔记>第一章 搭建Android开发环境
- android.graphics.Bitmap.Config<ALPHA_8, ARGB_4444,ARGB_8888,RGB_565>
- Spring配置项<context:annotation-config/>解释说明
- 学习android(一)搭建android开发环境相关说明
- Android大环境杂谈<待续中>
- android.graphics.Bitmap.Config<ALPHA_8, ARGB_4444,ARGB_8888,RGB_565>
- android.graphics.Bitmap.Config<ALPHA_8, ARGB_4444,ARGB_8888,RGB_565>
- 3G之Android学习第一章节<<开发环境搭建>>
- Arcengine中关于符号相关类和接口的说明
- <2012 12 20> Gcc/ARM/Linux Kernel关于浮点运算的一些说明(很有用!)