在对Android进行编译时,用的就是Linux下的Makefile和Kconfig编译系统,对整个系统进行编译。当然还包括很多配置命令,比如make defconfig, make oldconfig以及各种编译的脚本,共同构成Android的整个编译系统!

跟make menuconfig这个命令相关的文件,包括三类,包括.config,Kconfig,Makefile。为什么不说三个,而说三类呢?因为 Kconfig和Makefile是配合使用的,在很多的子目录都存在,而.config只存在于根目录中。这三个文件的作用分别是:

Kconfig:定义了配置项

**defconfig:对配置项进行赋值

Makefile:建立配置项的生成法则

看到这里,可能有人就头疼了,到底什么是配置项,什么是生成法则。这里要求具有理解Makefile的能力,如果不懂的话,可以去找Makefile的相关资料。

如果使用举例的话,比较容易理解。比如,我编写了一个新设备的驱动文件sprd_sim.c,这里不关心sprd_sim.c的内容。如果想把sprd_sim.c编译到Android系统中,需要按照以下的步骤来完成。

1)       将sprd_sim.c放到Android系统驱动中的一个相关目录中,这个目录只要求已存在Kconfig和Makefile中,比如源码kernel目录/kernel/driver/目录中。

2)       在这个目录的Kconfig中添加

[html] view plaincopy
  1. menu "SPRD_SIM support"
  2. config SPRD_SIM
  3. bool "Support for SPRD_SIM"
  4. help
  5. Say Y here to add support for leadexd SPRD_SIM
  6. if SPRD_SIM
  7. config SPRD_SIM_LEADEXCEED
  8. tristate "LEADEXD Sprd SIM Driver"
  9. depends on HAS_IOMEM
  10. help
  11. Leadexceed sprd SIM Driver implemented by Jobs-Hu.
  12. endif
  13. endmenu

3)       在Makefile中添加

[html] view plaincopy
  1. #
  2. #  Makefile for the sim detect device drivers.
  3. #
  4. # 16 May 2014, hu<Jobs.Hu@leadexd.com>
  5. #
  6. #  Object files in subdirectories
  7. obj-$(CONFIG_SPRD_SIM_LEADEXD)    += sprd_sim.o
  8. obj-y

4)       在.config中可以添加

[html] view plaincopy
  1. CONFIG_SPRD_SIM=y
  2. CONFIG_SPRD_SIM_LEADEXD=y

或者在执行make menuconfig时,找到显示名为MY_DRIVER的选项,使用空格选中。但是这个一般不需要我们自己去执行,一般执行相关的编译脚本后,这些配置信息便会

自动解析到相关的config文件里

5)在board.c中加入该设备

[html] view plaincopy
  1. static struct platform_device *devices[] __initdata = {
  2. #ifdef CONFIG_ION
  3. &sprd_ion_dev,
  4. #endif
  5. &sprd_emmc_device,
  6. &sprd_sdio0_device,
  7. &sprd_sim_device,
  8. ....

总而言之,就是如果需要向系统内核中添加一个功能,那么首先定义一个配置项对应于这个功能,添加到特定的Kconfig文件中。然后在Makefile 里,定义这个配置项需要编译哪些文件。最后就可以通过make menuconfig或者直接修改.config来使能这个配置项。

其实,.config就是将执行make menuconfig后,对配置项的修改保存到一个文件中而已。当然,各个公司会按照自己的工作需要,加入一些编译脚本,执行新的编译指令,也会生成.config文件,如果没有.config时,make menuconfig会按照默认值来显示。
参考文档:http://blog.chinaunix.net/uid-24227137-id-3277449.html
http://shunfengwei.blog.163.com/blog/static/17522511720123494332301/
http://blog.csdn.net/estate66/article/details/5886816

http://blog.csdn.net/dianhuiren/article/details/6917132

Android编译系统中的Kconfig,Makefile,.config编译系统浅析相关推荐

  1. Android驱动中的Kconfig文件与Makefile文件

    内核源码树的目录下都有两个文档Kconfig(2.4版本是Config.in)和Makefile.分布到各目录的Kconfig构成了一个分布式的内核配置数据库,每个Kconfig分别描述了所属目录源文 ...

  2. android bp文件_Android编译系统中的Android.bp【转】

    本文转载自: 转自:http://note.qidong.name/2017/08/android-blueprint/ Android编译系统中的Android.bp.Blueprint与Soong ...

  3. android.bp 编译,Android编译系统中的Android.bp

    Android.bp,是用来替换Android.mk的配置文件. 它使用Blueprint框架来解析,最终转换成Ninja文件. 与Android.mk不同的是,Android.bp是纯粹的配置文件, ...

  4. Linux/Android Kconfig Makefile defconfig 和 .config关系

    点击打开链接 在进行Android L->M升级时遇到打印: Root cause is probably that a dependancy declared in Kconfig is no ...

  5. Android 驱动(13)---Makefile, Kconfig和.config关联关系

    Makefile, Kconfig和.config关联关系 Makefile, Kconfig和.config关联关系 第一步,明确Kconfig是配置文件,现在比如要加入新的内核配置,必须在相关Kc ...

  6. android内核中Kconfig及如何加自己的驱动

    2019独角兽企业重金招聘Python工程师标准>>> 内核的源码树目录下一般都会有两个文文:Kconfig和Makefile.分布在各目录下的Kconfig构成了一个分布式的内核配 ...

  7. 了解一下,Android 10中镜像文件的制作

    缘起 写<深入理解Android Java虚拟机ART>一书的时候,我自己做了基于模拟器使用的系统镜像,供我学习ART使用.编译系统镜像的步骤是这样的: 先创建一个avd设备,取个名字,比 ...

  8. 编写Android.mk中的LOCAL_SRC_FILES,使其自动查找源文件,不需要手动添加

    在使用NDK编译C/C++项目的过程中,免不了要编写Android.mk文件,其中最重要的就是android.mk源文件列表. cpp文件位于android项目下的的不同文件夹和子文件夹下 按照通常的 ...

  9. 【转】Update: Android.mk 中的 LOCAL_SRC_FILES, LOCAL_C_INCLUDES

    看原文请移步:Update: Android.mk 中的 LOCAL_SRC_FILES, LOCAL_C_INCLUDES 我在先前的两篇post 编写Android.mk中的LOCAL_SRC_F ...

最新文章

  1. Nagios监控部署(四)--被监控主机配置
  2. Python flask出现jinja2.exceptions.TemplateNotFound错误(修复host就好了???)
  3. Nand分区及nand erase简解
  4. 排错之网络映射缓存凭证记录导致备份计划任务失败
  5. 【机器学习笔记四】分类算法 - 逻辑回归
  6. @Springboot搭建项目controller层接收json格式的对象失败
  7. 非递归遍历二叉树(算法导论第三版第十章10.4-5)
  8. xaml语言建立首个win8 Metro应用,rss阅读器
  9. ASP.NET笔记(三)
  10. 适用于Linux的Windows子系统WSL
  11. python List中元素两两组合
  12. java lang报错_java.lang.UnsupportedClassVersionError:JDK版本不一致报错
  13. ajax.request提交,ajax request 请求
  14. 后台传html样式展示无效_Dcat Admin v1.5.0 发布,对后端开发者高颜值后台系统构建工具...
  15. dubbo常用类和路径
  16. 和平精英怎么玩?智能找图、鼠标滚轮宏按键玩吃鸡还能匹配手机?
  17. Windows屏幕保护程序的制作
  18. Visual Studio 2015(C#)编写实现TCP调试助手(服务端+客户端一体)-新手
  19. java excel checkbox_在Java窗体表格中插入复选框
  20. cad打开卡死_在打开cad文件的时候会出现死机的状态

热门文章

  1. 国内一线互联网公司内部面试题库
  2. MySQL数据库:编码
  3. 大文件做分割处理的方法——winRAR压缩分割法
  4. python b站 礼物_[我叫以赏]Python获取B站UP主粉丝数
  5. java提供密码加密的实现
  6. cmake交叉编译android,CMake Android 交叉编译
  7. linux关闭硬件蜂鸣器,Linux Tips: 如何关闭系统的蜂鸣器
  8. java contions_Java基础---数组总结
  9. 武汉linux驱动培训转让,linux驱动培训靠谱吗
  10. mysql 表结构关系_mysql 表关系 与 修改表结构