在进行android L-》M升级时遇到打印:

Root cause is probably that a dependancy declared in Kconfig is not respected
or config was added in Kconfig but value not explicitly added to defconfig.
Recommanded method to generate defconfig is menuconfig tool instead of manual edit.

找了好多资料,上面的提示就是移植的时候将很多config配置项弄错了,有的没有定义的配置项弄到***defconfig中去了。

简单概要:
Makefile和Kconfig存在系统中的多个子目录中, Kconfig是定义配置项,Makefile是建立配置项生成法则。
.config存在根目录中,一般通过menuconfig生成。一般在/arm/configs/xxxxxx_defconfig目录下的文件是系统默认配置,android编译的时候会将这个文件生成.config文件,同时编译系统会根据各个Kconfig的配置项生成一个.config.old文件,如果这两个文件不冲突则编译继续进行,否则提示上面的错误。

所以,可以根据生成的 .config(在kernel根目录下)来修改xxxdefconfig文件,或者修改Kconfig中某些项的默认值或者定义规则。


在linux中和编译有关的配置文件有:
makefile:
Kconfig:
.config:全局的配置文件,由它决定makefile来编译哪些文件,一般是自动生成。
在实际判断使用哪些配置选项时,不会直接修改.config文件,而且通过使用图形化界面(menuconfig)来配置内核,并把配置的结果保存成.config文件。
在编译内核时,就根据makefile和.config选择编译哪些文件。

每个开发平台都有一个可供参考的配置文件,如arch/arm/configs/xxxxxx_defconfig目录下的文件,都是硬件厂商提供的,针对硬件平台的配置文件。
当我们执行make menuconfig就会读取源码目录下所有Kconfig内容,并生成界面中的选项菜单


关于kconfig的语法,在内核的开发文档中有详细的介绍,具体可以参看\Documentation\kbuild\kconfig-language.txt

Kconfig语法
menu/endmenu     生成一个菜单,以endmenu结束
menuconfig       定义一个配置选项,在这个选项下面还有一个子菜单
config           定义一个配置选项
choice/endchoice 定义一个选择项
source           调用子目录下的Kconfig,生成一个子菜单

菜单属性:
bool     y/n:
tristate y/n/M: M表示编译成模块
string
hex
int

配置选项之间的依赖关系:
depend on:某选项依赖于另外一个选项生成
select   :反向依赖关系,该选项选中时,同时选中select后面定义的那一项
requie
默认值: default(默认y/n/m等值)
输入提示:prompt
帮助信息:help

Makefile

1.顶层的Makefile文档读取 .config文档的内容,并总体上负责build内核和模块。
2.Arch Makefile则提供补充体系结构相关的信息。
3.scripts目录下的Makefile文档包含了任何用来根据kbuild Makefile 构建内核所需的定义和规则。
其中.config的内容是在make menuconfig的时候,通过Kconfig文档配置的结果,在/Documentation/kbuild目录下有详细的介绍有关kernel makefile的知识。
举个例子:

假设想把G-sensor LSM303D驱动code加载到工程中,配置内核时该怎么办呢?
1:将您写的lsm303d.c 文档添加到/driver/misc/ 目录下。
2:修改/driver/misc/ 目录下的kconfig文档:
[html] view plain copy

config SENSORS_LSM303D
tristate "LSM303 sensor driver"
depends on I2C=y
help
Say yes here to support the sensor

3:修改该目录下makefile文档。
添加code:
[html] view plain copy

obj-$(CONFIG_SENSORS_LSM303D)   += lsm303d.o

从上述分析知道CONFIG_SENSORS_LSM303D 是从.config 中读出的。
4.配置kernel下configs/XXXX_defconfig文件
添加code:
[html] view plain copy

CONFIG_SENSORS_LSM303D=y

当您编译内核时,将会读取.config文档,当发现CONFIG_SENSORS_LSM303D=y,系统在调用/driver/misc下的makefile 时,将会把 lsm303d.o 加入到内核中。即可达到您的目的。

1. 项目控制的 Android Board.mk 以device/qcom/sm6150/ Android Board.mk为例子 因为KERNEL_ DEF CONFIG 被定义为sdmsteppe-perf_ def conf... android 有个专门的make bootimage命令可以编译出刷机包boot.img,进入fastboot模式,执行fastboot flash boot boot.img就可以将修改后的kernel刷入,这是最快的kernel修改验证方式,不需要刷整个安卓系统。不过手机必须是解锁bootloader的,或者是刷的DEBUG版系统。今天主要来说一下怎么修改kernel的配置。 (一)首先找出默认的 config 文件 sourcebu... 正确地保存编译内核产生的. config 文件-使用make save def config ,一直以来保存编译内核生成的. config 文件都是cp . config arch/arm/ config s/xxx_ def config 来保存的。但是这其实是一个错误的方法。原因听我细细道来。  一直以为make old config 的作用是将利用当前的. config 覆盖 def config ,从而使下次运行make config /menu config 时的缺省设置成为当前. config 的设置,今天发现是个错误,需要澄清:1. 如果. config 不存在,运行make config /menu config 时的缺省设置由固化在各个K config 文件中各项目的缺省值决定。2. 如果. config 存在,运 linux kernel: def config 和. config _ARM- Linux -CSDN博客_kernel 生成de config [内核向] 论如何优雅的玩转 def config - AKR社区 def config 、 . config 、k config makefile 和make menu config 流程_你的灯在亮-CSDN博客_ def config 文件 kernel/uboot关于 def config 的几个问题? - llc_no1 - 博客园 什么是make config ,m... 1.内核的配置体系 内核是高度可裁剪的,开发产品时根据产品的需求将无用的模块裁剪掉,也就是不要编译进内核,这样编译出来的内核体积小,节省内存,还可以节约性能。由此就需要条件编译,但是内核的可选编译模块太多了,必须要用一套编译体系来管理。我们可以这样类比来理解为什么内核需要一套编译体系来进行配置:当工程只有一个a.c,我们可以直接"gcc a.c"进行编译,但是有1000个源文件,用这种方法就不可行了,于是我们用 Makefile 进行编译; Makefile 可以通过条件编译来让同一份代码在不同的平台上运行,假设