zoukankan      html  css  js  c++  java
  • 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中添加

    [html] view plaincopy在CODE上查看代码片派生到我的代码片
    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.   
    7. if SPRD_SIM  
    8. config SPRD_SIM_LEADEXCEED  
    9.     tristate "LEADEXD Sprd SIM Driver"  
    10.     depends on HAS_IOMEM  
    11.     help  
    12.      Leadexceed sprd SIM Driver implemented by Jobs-Hu.  
    13.   
    14. endif  
    15. endmenu  


    3)       在Makefile中添加

    [html] view plaincopy在CODE上查看代码片派生到我的代码片
    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在CODE上查看代码片派生到我的代码片
    1. CONFIG_SPRD_SIM=y  
    2. CONFIG_SPRD_SIM_LEADEXD=y  

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

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

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

    [html] view plaincopy在CODE上查看代码片派生到我的代码片
    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


  • 相关阅读:
    docker 批量删除
    ML
    hdu 1465:不容易系列之一(递推入门题)
    sdut 2162:The Android University ACM Team Selection Contest(第二届山东省省赛原题,模拟题)
    sdut 2163:Identifiers(第二届山东省省赛原题,水题)
    hdu 2108:Shape of HDU(计算几何,判断多边形是否是凸多边形,水题)
    hrbustoj 1545:基础数据结构——顺序表(2)(数据结构,顺序表的实现及基本操作,入门题)
    hdu 1312:Red and Black(DFS搜索,入门题)
    hrbustoj 1429:凸多边形(计算几何,判断点是否在多边形内,二分法)
    poj 1113:Wall(计算几何,求凸包周长)
  • 原文地址:https://www.cnblogs.com/LoongEmbedded/p/5298360.html
Copyright © 2011-2022 走看看