您的位置:首页 > 移动开发 > Android开发

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



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的形式存在。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息