Android编译系统中的Kconfig,Makefile,.config编译系统浅析
在对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中添加
- menu "SPRD_SIM support"
- config SPRD_SIM
- bool "Support for SPRD_SIM"
- help
- Say Y here to add support for leadexd SPRD_SIM
- if SPRD_SIM
- config SPRD_SIM_LEADEXCEED
- tristate "LEADEXD Sprd SIM Driver"
- depends on HAS_IOMEM
- help
- Leadexceed sprd SIM Driver implemented by Jobs-Hu.
- endif
- endmenu
3) 在Makefile中添加
- #
- # Makefile for the sim detect device drivers.
- #
- # 16 May 2014, hu<Jobs.Hu@leadexd.com>
- #
- # Object files in subdirectories
- obj-$(CONFIG_SPRD_SIM_LEADEXD) += sprd_sim.o
- obj-y
4) 在.config中可以添加
- CONFIG_SPRD_SIM=y
- CONFIG_SPRD_SIM_LEADEXD=y
或者在执行make menuconfig时,找到显示名为MY_DRIVER的选项,使用空格选中。但是这个一般不需要我们自己去执行,一般执行相关的编译脚本后,这些配置信息便会
自动解析到相关的config文件里
5)在board.c中加入该设备
- static struct platform_device *devices[] __initdata = {
- #ifdef CONFIG_ION
- &sprd_ion_dev,
- #endif
- &sprd_emmc_device,
- &sprd_sdio0_device,
- &sprd_sim_device,
- ....
总而言之,就是如果需要向系统内核中添加一个功能,那么首先定义一个配置项对应于这个功能,添加到特定的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编译系统浅析相关推荐
- Android驱动中的Kconfig文件与Makefile文件
内核源码树的目录下都有两个文档Kconfig(2.4版本是Config.in)和Makefile.分布到各目录的Kconfig构成了一个分布式的内核配置数据库,每个Kconfig分别描述了所属目录源文 ...
- android bp文件_Android编译系统中的Android.bp【转】
本文转载自: 转自:http://note.qidong.name/2017/08/android-blueprint/ Android编译系统中的Android.bp.Blueprint与Soong ...
- android.bp 编译,Android编译系统中的Android.bp
Android.bp,是用来替换Android.mk的配置文件. 它使用Blueprint框架来解析,最终转换成Ninja文件. 与Android.mk不同的是,Android.bp是纯粹的配置文件, ...
- Linux/Android Kconfig Makefile defconfig 和 .config关系
点击打开链接 在进行Android L->M升级时遇到打印: Root cause is probably that a dependancy declared in Kconfig is no ...
- Android 驱动(13)---Makefile, Kconfig和.config关联关系
Makefile, Kconfig和.config关联关系 Makefile, Kconfig和.config关联关系 第一步,明确Kconfig是配置文件,现在比如要加入新的内核配置,必须在相关Kc ...
- android内核中Kconfig及如何加自己的驱动
2019独角兽企业重金招聘Python工程师标准>>> 内核的源码树目录下一般都会有两个文文:Kconfig和Makefile.分布在各目录下的Kconfig构成了一个分布式的内核配 ...
- 了解一下,Android 10中镜像文件的制作
缘起 写<深入理解Android Java虚拟机ART>一书的时候,我自己做了基于模拟器使用的系统镜像,供我学习ART使用.编译系统镜像的步骤是这样的: 先创建一个avd设备,取个名字,比 ...
- 编写Android.mk中的LOCAL_SRC_FILES,使其自动查找源文件,不需要手动添加
在使用NDK编译C/C++项目的过程中,免不了要编写Android.mk文件,其中最重要的就是android.mk源文件列表. cpp文件位于android项目下的的不同文件夹和子文件夹下 按照通常的 ...
- 【转】Update: Android.mk 中的 LOCAL_SRC_FILES, LOCAL_C_INCLUDES
看原文请移步:Update: Android.mk 中的 LOCAL_SRC_FILES, LOCAL_C_INCLUDES 我在先前的两篇post 编写Android.mk中的LOCAL_SRC_F ...
最新文章
- Nagios监控部署(四)--被监控主机配置
- Python flask出现jinja2.exceptions.TemplateNotFound错误(修复host就好了???)
- Nand分区及nand erase简解
- 排错之网络映射缓存凭证记录导致备份计划任务失败
- 【机器学习笔记四】分类算法 - 逻辑回归
- @Springboot搭建项目controller层接收json格式的对象失败
- 非递归遍历二叉树(算法导论第三版第十章10.4-5)
- xaml语言建立首个win8 Metro应用,rss阅读器
- ASP.NET笔记(三)
- 适用于Linux的Windows子系统WSL
- python List中元素两两组合
- java lang报错_java.lang.UnsupportedClassVersionError:JDK版本不一致报错
- ajax.request提交,ajax request 请求
- 后台传html样式展示无效_Dcat Admin v1.5.0 发布,对后端开发者高颜值后台系统构建工具...
- dubbo常用类和路径
- 和平精英怎么玩?智能找图、鼠标滚轮宏按键玩吃鸡还能匹配手机?
- Windows屏幕保护程序的制作
- Visual Studio 2015(C#)编写实现TCP调试助手(服务端+客户端一体)-新手
- java excel checkbox_在Java窗体表格中插入复选框
- cad打开卡死_在打开cad文件的时候会出现死机的状态
热门文章
- 国内一线互联网公司内部面试题库
- MySQL数据库:编码
- 大文件做分割处理的方法——winRAR压缩分割法
- python b站 礼物_[我叫以赏]Python获取B站UP主粉丝数
- java提供密码加密的实现
- cmake交叉编译android,CMake Android 交叉编译
- linux关闭硬件蜂鸣器,Linux Tips: 如何关闭系统的蜂鸣器
- java contions_Java基础---数组总结
- 武汉linux驱动培训转让,linux驱动培训靠谱吗
- mysql 表结构关系_mysql 表关系 与 修改表结构