在对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
plain
copy

  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
plain
copy

  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
plain
copy

  1. CONFIG_SPRD_SIM=y
  2. CONFIG_SPRD_SIM_LEADEXD=y

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

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

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

[html] view
plain
copy

  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系统中常用JAVA类源码浅析之HashMap

    由于是浅析,所以我只分析常用的接口,注意是Android系统中的JAVA类,可能和JDK的源码有区别. 首先从构造函数开始, /** * Min capacity (other than zero) ...

  3. 关于Android应用中图片占用内存浅谈

    从事过移动端应用开发的童鞋应该都清楚,内存是非常宝贵的资源.如果能很好的利用有限的内存,对应用性能的提升会有很大的帮助.在实际应用开发中图片内存占整个应用非常大的比重,我们只有了解图片是如何加载到内存 ...

  4. Android编译系统中的Android.bp【转】

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

  5. 【总结】嵌入式linux内核中Makefile、Kconfig、.config的关系及增加开机Hello World【转】

    本文转载自:http://blog.csdn.net/fengyuwuzu0519/article/details/73772109 为了弄清内核的组织结构,我们先来实现下面这个简单的例子. 一.增加 ...

  6. ubuntu——Kconfig、.config、Makefile的关系

    原文地址:http://blog.csdn.net/estate66/article/details/5886816 ,本人对此文有改进. 当我们编写完一个驱动后,我们要把它以模块形式编译或者直接编译 ...

  7. 浅谈内核的Makefile、Kconfig和.config文件

    Linux内核源码文件繁多,搞不清Makefile.Kconfig..config间的关系,不了解内核编译体系,编译修改内核有问题无从下手,自己写的驱动不知道怎么编进内核,不知道怎么配置内核,这些问题 ...

  8. openwrt编译系统制作ubi镜像时会使用系统自带的ubinize还是openwrt编译系统中编译的ubinize

    答:使用openwrt编译系统中编译的ubinize,那么这个工具在哪个目录下?在staging_dir/host/bin目录下

  9. 关于Android NDK中调用第三方的动态库

    因为最近在整合Android 上RTSP播放器的网络库,因需要调用自己编译的网络库,调用一直出现问题,开始时是直接在Android.mk 中加入LOCAL_SHARED_LIBRARIES := li ...

随机推荐

  1. PGM:贝叶斯网的参数估计2

    http://blog.csdn.net/pipisorry/article/details/52599321 没时间看了,下次再看... 具有共享参数的学习模型 全局参数共享 局部参数共享 具有 共 ...

  2. java获取ip的方式,注意多级代理的方式获取

    public String getIP() { String clientIP = ServletActionContext.getRequest().getHeader("x-forwar ...

  3. 给定一个实数数组,按序排列(从小到大),从数组从找出若干个数,使得这若干个数的和与M最为接近,描述一个算法,并给出算法的复杂度。

    有N个正实数(注意是实数,大小升序排列) x1 , x2 ... xN,另有一个实数M. 需要选出若干个x,使这几个x的和与 M 最接近. 请描述实现算法,并指出算法复杂度. #define M 8 ...

  4. Android中Snackbar的介绍以及使用

    Android中Snackbar的介绍以及使用 介绍 Snackbar可以说是Toast的升级版,不仅有显示信息的功能,还可以添加一个Action,实现点击功能,可以右滑删除. 效果图 Snackba ...

  5. UIKit视图动画的微扩展

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 好久没写blog了,还不快快写来- ;] 我们知道在UIKit ...

  6. 统计处理包Statsmodels: statistics in python

    http://blog.csdn.net/pipisorry/article/details/52227580 Statsmodels Statsmodels is a Python package ...

  7. maven的UnsupportedClassVersionError

    问题描述 我安装了maven3.3.3,配置好了M2_HOME和path环境变量之后,执行mvn -v报错:java.lang.UnsupportedClassVersionError: -. : U ...

  8. RocketMQ,JStorm与Tair使用笔记

    关于RocketMQ 启动mq nohup sh mqnamesrv -n 10.150.0.94:9876 &  nohup sh mqbroker -n 10.150.0.94:9876 ...

  9. 从二进制数据流中构造GDAL可以读取的图像数据

    在很多时候,我们的图像数据往往都不是文件方式存储在磁盘上,而是可能从网络或者数据库中获取的是二进制的图像数据流.最简单的方式和最容易想到的方式就是将这个文件流保存到磁盘上形成一个文件,然后再使用GDA ...

  10. 高斯函数 --> 高斯分布(正态分布)

    具有如下形式的函数就是高斯函数. 其中a,b,c都是实数常数,a大于0 .由于在博客中写数学公式比较麻烦,还是直接放照片吧. 字写的很难看,不过应该可以看清楚.:(