【转】Kconfig,Makefile 和 .config
原文网址:http://blog.csdn.net/nxh_love/article/details/11846861
最新在做Sensor驱动移植的时候,发现了Android driver 中有Kconfig,Makefile文件。在查看编译后的文件时,又发现还存在.config文件。自己对这几个文件不明白,用度娘来整理下网友对这几个文件的理解。
分布在各目录下的Kconfig构成了一个分布式的内核配置数据库,每个Kconfig分别描述了所属目录源文件相关的内核配置菜单。在内核配置make menuconfig(或xconfig等)时,从Kconfig中读出配置菜单,用户配置完后保存到.config(在顶层目录下生成)中。在内核编译时,主Makefile调用这个.config,就知道了用户对内核的配置情况。Kconfig就是对应着内核的配置菜单。假如要想添加新的驱动到内核的源码中,可以通过修改Kconfig来增加对我们驱动的配置菜单,这样就有途径选择我们的驱动,假如想使这个驱动被编译,还要修改该驱动所在目录下的Makefile。
Kconfig
先来看下一个相对完整的Kconfig文件:
- menuconfig MISC_DEVICES
- bool "Misc devices"
- ---help---
- Say Y here to get to see options for device drivers from various
- different categories. This option alone does not add any kernel code.
- If you say N, all options in this submenu will be skipped and disabled.
- if MISC_DEVICES
- config ST_L3GD20_GYR
- tristate "L3GD20_GYR gyroscope sensor support"
- depends on I2C=y
- help
- If you say yes here you get support for ST's
- gyroscope sensors L3GD20_GYR.
- choice
- prompt "Preemption Model"
- depends on SENSORS_AFA750
- default CALI_NONE
- config CALI_NONE
- bool "None"
- help
- Say yes here to disable calibration function for AFA750
- config CALI_POSITIVE
- bool "positive calibration"
- help
- Say yes here when the afa750 and LCD are laid towared the same direction on your board
- endchoice
- config SENSORS_LSM303D
- tristate "LSM303 sensor driver"
- depends on I2C=y
- help
- Say yes here to support the sensor
- endif
1.语法:
config symbol
options
symbol是一个新的标记的菜单项,options是在这个新的菜单项下的属性和选项。
2.菜单结构:
配置文件描述了菜单选项,每行都是以一关键字开头(除了帮助信息)。下面的关键字结束一菜单选项:
- config
- menuconfig
- choice/endchoice
- comment
- menu/endmenu
- if/endif
- source
2.options类型定义:
每个config菜单项都要有类型定义:bool布尔类型、 tristate三态(内建、模块、移除)、 string字符串、 hex十六进制、 integer整型。
例如:
- config CALI_NONE
- bool "None"
bool类型的只能选中或不选中,tristate类型的菜单项多了编译成内核模块的选项,如果选择编译成内核模块,则会在.config中生成一个CONFIG_CALI_NONEE=m的配置,如果选择内建,就是直接编译成内核影响,就会在.config中生成一个CONFIG_CALI_NONE=y的配置.
3.依赖型定义depends on或requires
指此菜单的出现与否依赖于另一个定义
- config SENSORS_LSM303D
- tristate "LSM303 sensor driver"
- depends on I2C=y
这个例子表明SENSORS_LSM303D这个菜单项只I2C有效。
4.select与depends on是相反的逻辑关系。
A depends on B
那么只有在B选中才能选A
A select B
那么只要选中A就会选中B
5.帮助性定义
只是增加帮助用关键字help或者---help---,"---help---" 和 "help" 在实现的作用上没有区别,"---help---" 有助于将文件中的配置逻辑与给开发人员的提示分开。
6.prompt --输入提示
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文档:
- config SENSORS_LSM303D
- tristate "LSM303 sensor driver"
- depends on I2C=y
- help
- Say yes here to support the sensor
3:修改该目录下makefile文档。
添加code:
- obj-$(CONFIG_SENSORS_LSM303D) += lsm303d.o
从上述分析知道CONFIG_SENSORS_LSM303D 是从.config 中读出的。
4.配置kernel下configs/XXXX_defconfig文件
添加code:
- CONFIG_SENSORS_LSM303D=y
当您编译内核时,将会读取.config文档,当发现CONFIG_SENSORS_LSM303D=y,系统在调用/driver/misc下的makefile 时,将会把 lsm303d.o 加入到内核中。即可达到您的目的。
主要参考文章:http://blog.sina.com.cn/s/blog_4a377e150100c896.html
转载于:https://www.cnblogs.com/wi100sh/p/4613584.html
【转】Kconfig,Makefile 和 .config相关推荐
- Linux/Android Kconfig Makefile defconfig 和 .config关系
点击打开链接 在进行Android L->M升级时遇到打印: Root cause is probably that a dependancy declared in Kconfig is no ...
- 解析linux内核中makefile,.config以及Kconfig的作用
申明,下面这篇文章是原文,本文参考了这篇文章,这篇文章分析得比较透彻,下面是链接. https://zhuanlan.zhihu.com/p/28461589 首先我们要知道makefile文件是什么 ...
- Android(4.2) Sensors 学习——G-sensor,Gyroscope驱动移植
Android(4.2) Sensors 学习--G-sensor,Gyroscope驱动移植 目录(?)[-] Sensors 种类和功能 G-sensor驱动code G-sensor HAL 注 ...
- Linux嵌入式驱动开发02——驱动编译到内核
文章目录 全系列传送门 make menuconfig图形化配置界面 1. 怎么进入到make menuconfig图形化界面? 2. make menuconfig图形化界面的操作 3. 退出 4. ...
- .config 和 kconfig以及 makefile的关系
当我们编写完一个驱动后,我们要把它以模块形式编译或者直接编译进内核时,需要修改相关文件,其中最重要的便是kconfig ,makefile.主要是分析一下三者之间的关系,然后就其语法简要的谈一下.当我 ...
- linux内核kconfig objs,linux内核中Kconfig和Makefile 详解
内核源码树的目录下都有两个文档 Kconfig (2.4版本是Config.in)和Makefile.分布到各目录的Kconfig构成了一个分布式的内核配置数据库,每个Kconfig分别描述了所属目录 ...
- Android驱动中的Kconfig文件与Makefile文件
内核源码树的目录下都有两个文档Kconfig(2.4版本是Config.in)和Makefile.分布到各目录的Kconfig构成了一个分布式的内核配置数据库,每个Kconfig分别描述了所属目录源文 ...
- Linux Kconfig及Makefile学习
内核源码树的目录下都有两个文档 Kconfig (2.4版本是Config.in)和Makefile.分布到各目录的Kconfig构成了一个分布式的内核配置数据库,每个Kconfig分别描述了 所属目 ...
- linux内核makefile详解,linux kernel编译Makefile和Kconfig,make menuconfig详解
Sam需要看看2.6 kernel中USB Mouse的代码.顺便谈谈Kernel中Makefile和Kconfig文件的关系以及配合使用. 背景知识: 背景知识一:Kconfig介绍: 在#make ...
最新文章
- Java 理论与实践: 非阻塞算法简介——看吧,没有锁定!(转载)
- python获取页面隐藏元素_selenium操作隐藏的元素(python+Java)
- YII 规则rule 里面 min,max 提示错误信息
- [转]浅谈 python multiprocessing(多进程)下如何共享变量
- 计算机算法设计与分析 Huffman编码问题
- 扇贝有道180920每日一句
- 读取QQ ClientKey失败分析
- 计算机打字考试软件使用说明,电脑打字指法练习_学习使用电脑的基本知识打字,需要怎么练习?...
- 干掉卫星、无人机?只用气球就能获取10厘米分辨率遥感影像
- 子div 遮盖 父div
- 学习乐器的好处(1)
- 销售人员的月工资数量(月工资=基本工资+提成,提成=商品数*1.5)
- OSChina 周三乱弹 —— 啪啪啪是敲键盘的声音
- dhl寄件邮编错了_DHL国际快递寄错国家怎么办?
- cesium着色器学习系列2-Appearance对象
- 匿名函数(Lambda表达式)与箭头函数
- 216×4说说竖式每一步的意思_52除以4 说说每一步的意思
- ZENCART首页显示 Featured Categorie的方法
- 【Proteus仿真】步进电机转速数码管显示
- 关于音箱的鉴别与选择