以下内容源于朱有鹏嵌入式课程的学习,如有侵权,请告知删除。

1、Kconfig的格式

(1)Kconfig按照一定的格式来书写,menuconfig程序可以识别这种格式,然后从中提取出有效信息组成menuconfig中的菜单项。

(2)将来在做驱动移植等工作时,有时需要自己添加Kconfig中的一个配置项来将某个设备驱动添加到内核的配置项目中,这时候就需要对Kconfig的配置项格式有所了解。

(3)#开头的行是注释行。

(4)menuconfig表示菜单(本身属于一个菜单中的项目,但是其又有子菜单项目)、config表示菜单中的一个配置项(本身并没有子菜单下的项目)。

(5)menuconfig或者config后面用空格隔开的大写字母,表示的就是这个配置项的配置项名字。这个字符串前面添加CONFIG_后就构成了.config中的配置项名字。

(6)一个menuconfig后面跟着的所有config项就是这个menuconfig的子菜单。这就是Kconfig中表示的目录关系。

(7)内核源码目录树中每一个Kconfig都会source引入其所有子目录下的Kconfig,从而保证了所有的Kconfig项目都被包含进menuconfig中。

  • 如果在linux内核中添加一个文件夹,一定要在这个文件夹下创建一个Kconfig文件,然后在这个文件夹的上一层目录的Kconfig中source引入这个文件夹下的Kconfig文件。

2、tristate和bool的含义

tristate意思是三态(3种状态,对应Y、N、M三种选择方式),bool是要么真要么假(对应Y和N)。

  • tristate的意思就是这个配置项可以有三种选择;
  • bool的意思是这个配置项只能有2种选择。

3、depends的含义

(1)本配置项依赖于另一个配置项。

  • 如果那个依赖的配置项为Y或者M,则本配置项才有意义;如果依赖的哪个配置项本身被设置为N,则本配置项根本没有意义。

(2)depends项目会导致make menuconfig的时候找不到一些配置项。

  • 所以在menuconfig中如果找不到一个选项,但是这个选项在Kconfig中却是有的,则可能的原因就是这个配置项依赖的一个配置项是不成立的。

(3)depends并不要求依赖的配置项一定是一个,可以是多个,而且还可以有逻辑运算。此时只要依赖项目运算式子的逻辑结果为真则依赖就成立。

4、help

帮助信息,告诉我们这个配置项的含义,以及如何去配置他。

5、Kconfig和.config文件和Makefile三者的关联

(1)配置项被配置成Y、N、M会影响.config文件中的CONFIG_XXX变量的配置值。

(2).config中的配置值(=y、=m、没有)会影响最终的编译链接过程。

  • 如果=y则会被编入(built-in),如果=m会被单独连接成一个ko模块,如果没有则对应的代码不会被编译。这是怎么实现的?都是通过makefile实现的。

(3)obj-$(CONFIG_DM9000) += dm9000.o

  • 如果CONFIG_DM9000变量值为y,则obj += dm9000.o,因此dm9000.c会被编译;
  • 如果CONFIG_DM9000变量未定义,则dm9000.c不会被编译。
  • 如果CONFIG_DM9000变量的值为m,则会被连接成ko模块。
  • 这些都是在linux内核的Makefile中定义的规则。

总结:把menuconfig中的菜单项、Kconfig中的配置项、.config中的一行、 Makefile中的一行,这4个东西结合起来理解。

Kconfig文件详解相关推荐

  1. linux 内核编译 Kconfig文件详解

    Kconfig的格式 下面截取/drivers/net下的Kconfig文件中的部分内容, # Network device configuration menuconfig NETDEVICESde ...

  2. Linux中/proc目录下文件详解

    Linux中/proc目录下文件详解(一) 声明:可以自由转载本文,但请务必保留本文的完整性. 作者:张子坚 email:zhangzijian@163.com 说明:本文所涉及示例均在fedora ...

  3. Mybatis复习笔记3:映射文件详解

    映射文件详解 参数处理(#和$的区别) #{}:可以获取map中的值或者实体对象属性的值: ${}:可以获取map中的值或者实体对象属性的值: select * from person where i ...

  4. Android - Manifest 文件 详解

    Manifest 文件 详解 本文地址: http://blog.csdn.net/caroline_wendy/article/details/20899281 Manifest可以定义应用程序及其 ...

  5. javaweb web.xml文件详解

    web.xml文件详解 前言:一般的web工程中都会用到web.xml,web.xml主要用来配置,可以方便的开发web工程.web.xml主要用来配置Filter.Listener.Servlet等 ...

  6. oracle控制文件都一样么,Oracle控制文件详解

    一.Oracle控制文件 为二进制文件,初始化大小由CREATEDATABASE指定,可以使用RMAN备份 记录了当前数据库的结构信息,同时也包含数据文件及日志文件的信息以及相关的状态,归档信息等等 ...

  7. linux /proc目录文件详解

    Linux中/proc目录下文件详解(一) /proc文件系统下的多种文件提供的系统信息不是针对某个特定进程的,而是能够在整个系统范围的上下文中使用.可以使用的文件随系统配置的变化而变化.命令proc ...

  8. STM32(Cortex-M3)启动过程+IAR中xcl及icf文件详解

    一:STM32(Cortex-M3)启动过程(入口地址) ARM7和ARM9启动时从绝对地址0X00000000开始执行复位中断程序,即固定了复位后的起始地址,但中断向量表的位置是可变的. Corte ...

  9. /etc/passwd 文件详解

    /etc/passwd  文件详解 /etc/passwd  保存了系统中每一个用户的信息 /etc/passwd 中每个用户的信息占用了一行,也就是说这个文件有多少行,系统就有多少个用户. 要查看系 ...

最新文章

  1. 今天浅谈功能测试基础
  2. alibaba面试题
  3. CUDA and cudnn 历史版本归档地址
  4. (翻译)为你的MVC应用程序创建自定义视图引擎
  5. oracle rds 运维服务_RDS oracle数据库运维方案
  6. 实现当前月记录,下12个月发送提醒。蛋疼的2月.
  7. 二进制空间权重矩阵_空间计量:空间权重矩阵的构建
  8. 杰瑞·卡普兰:人工智能并不可怕 未来将带来两大影响
  9. centos host在哪 local_centos怎么查看hostid
  10. Ubuntu 查看IP、网关及DNS
  11. php的微信登录示例代码,关于微信用户注册登录实例代码汇总
  12. 服务器gpu卡型号V100,NVIDIA GPU服务器升级:16块450W Tesla V100
  13. 如何在Debian 9上安装和使用Docker
  14. N1 从 armbian 刷回 webpad 方法
  15. 未来的全能保姆机器人作文_未来的保姆机器人650字作文
  16. 【对比+转载】麦子:我奋斗了18年才和你坐在一起喝咖啡清华大学硕士: 我奋斗了18年,不是为了和你一起喝咖啡
  17. SQL Server数据库实操 第一波 数据查询
  18. HDOJ HDU 1850 Being a Good Boy in Spring Festival
  19. 毕业设计-基于微信小程序的课堂考勤管理系统
  20. Arduino与Proteus仿真实例-DS1307实时时钟驱动仿真

热门文章

  1. C# 反射 (Reflect)
  2. 面向对象的接口类 以及鸭子类型
  3. 从github clone文件: Failed to receive SOCKS4 connect request ack.
  4. 20150103--SQL连接查询+视图-02
  5. 设计模式之开放封闭原则
  6. Django syncdb mysql error on localhost - (1045, Access denied for user 'ODBC'@'
  7. 2017年秋招-广联达面试及思考
  8. dotty编译器语法特性之一交叉类型,联合类型和文本单例类型
  9. jquery UI集合
  10. linux 系统监控脚本