当执行make menuconfig时会出现内核的配置界面,所有配置工具都是通过读取"arch/$(ARCH)Kconfig"文件来生成配置界面,这个文件就是所有配置的总入口,它会包含其他目录的Kconfig

Kconfig的作用:Kconfig用来配置内核,它就是各种配置界面的源文件,内核的配置工具读取各个Kconfig文件,生成配置界面供开发人员配置内核,最后生成配置文件.config

Kconfig的语法可以参考“Documentation/kbuild/kconfig-language.txt”

Kconfig文件的基本要素:

1. config条目(entry)

config TMPFS_POSIX_ACL

bool "Tmpfs POSIX Access Control Lists"

depends on TMPFS

select GENERIC_ACL

help

POSIX Access Control Lists (ACLs) support permissions for users and

groups beyond the owner/group/world scheme.

To learn more about Access Control Lists, visit the POSIX ACLs for

Linux website <http://acl.bestbits.at/>.

If you don't know what Access Control Lists are, say N.

解析:

config是关键字,表示一个配置选项的开始;紧跟着的TMPFS_POSIX_ACL是配置选项的名称,省略了前缀"CONFIG_"

bool表示变量类型,即"CONFIG_ TMPFS_POSIX_ACL "的类型,有5种类型:bool、tristate、string、hex和int,其中tristate和string是基本的类型

bool变量的值:    y和n

tristate变量的值:y、n和m

string变量的值:  字符串

bool之后的字符串“Tmpfs POSIX Access Control Lists”是提示信息,在配置界面中上下移动光标选中它时,就可以通过按空格或回车键来设置

CONFIG_ TMPFS_POSIX_ACL的值

depends on:表示依赖于XXX,“depends on TMPFS”表示只有当TMPFS配置选项被选中时,当前配置选项的提示信息才会出现,才能设置当前配置选项

2. menu条目

menu条目用于生成菜单,其格式如下:

menu "Floating poing emulation"

config FPE_NWFPE

..............

config FPE_NWFPE_XP

.............

endmenu

menu之后的Floating poing emulation是菜单名,menu和endmenu间有很多config条目,在配置界面中如下所示:

Floating poing emulation--->

[] FPE_NWFPE

[] FPE_NWFPE_XP

3. choice条目

choice条目将多个类似的配置选项组合在一起,供用户单选或多选

choice

prompt "ARM system type"

default ARCH_VERSATILE

config ARCH_AAEC2000

.........

config ARCH_REALVIEW

.........

endchoice

prompt "ARM system type"给出提示信息“ARM system type”,光标选中后回车进入就可以看到多个config条目定义的配置选项

choice条目中定义的变量只有bool和tristate

4. comment条目

comment条目用于定义一些帮助信息,出现在界面的第一行,如在arch/arm/Kconifg中有如下代码:

menu "Floating point emulation"

comment "At least one emulation must be selected"

config FPE_NWFPE

.........

config FPE_NWFPE_XP

5. source条目

source条目用于读取另一个Kconfig文件,如:

source "net/Kconifg"

实战

eg1. 

[root@localhost linux-3.5]# make menuconfig

出现如下界面:

eg2:

解析Kconfig的代码的位置如下

[root@localhost kconfig]# pwd
/var/opt/linux-3.5/scripts/kconfig
[root@localhost kconfig]# vim mconf.c

编译之后会生成mconf可执行文件

[root@localhost linux-3.5]# ./scripts/kconfig/mconf  ./arch/arm/Kconfig

生成如下图形界面:

eg3: 

创建自己的Kconfig

[root@localhost uplooking]# pwd
/var/opt/linux-3.5/drivers/uplooking
[root@localhost uplooking]# touch Kconfig

Kconfig文件内容如下

[root@localhost linux-3.5]# ./scripts/kconfig/mconf  ./drivers/uplooking/Kconfig

解析结果如下:

修改上一层Kconfig

最后会添加到Drivers选项中,结果如下图所示:

嵌入式学习交流群:143847203

二维码:

【内核驱动】 Kconfig简介相关推荐

  1. Linux内核驱动-Kconfig和Makefile

    1.在linux编写驱动的过程中,有两个文件是我们必须要了解和知晓的.这其中,一个是Kconfig文件,另外一个是Makefile文件.如果大家比较熟悉的话,那么肯定对内核编译需要的.config文件 ...

  2. 三、linux内核驱动裁剪

    总结: Menuconfig是编辑内核的工具. Kconfig定义Menuconfig菜单选项. .config是最后Menuconfig配置完生成的文件. Makefile根据.config宏定义判 ...

  3. 从入门到精通ARM(4412)-Linux内核驱动编程【下】-李志勇-专题视频课程

    从入门到精通ARM(4412)-Linux内核驱动编程[下]-247人已学习 课程介绍         嵌入式绝对是当前IT领域最炙手可热的话题了.其主要应用领域涵盖与人类相关的各行各业: * 消费电 ...

  4. 嵌入式 Linux 内核驱动开发【The first day: 36093万字】

    嵌入式 Linux 内核驱动开发[1] 嵌入式 Linux 内核驱动开发前言 第1章 Linux 内核裁剪和定制 [1]Linux 内核开发简介 [2] Linux 源码阅读工具 [1.2.1]Sou ...

  5. linux内核体系学习路径_Linux内核分析(一)linux体系简介|内核源码简介|内核配置编译安装...

    从本篇博文开始我将对linux内核进行学习和分析,整个过程必将十分艰辛,但我会坚持到底,同时在博文中如果那些地方有问题还请各位大神为我讲解. 今天我们会分析到以下内容: 1. Linux体系结构简介 ...

  6. Android 系统(4)---Android HAL层与Linux Kernel层驱动开发简介

    Android HAL层与Linux Kernel层驱动开发简介 近日稍微对Android中的驱动开发做了一些简要的了解,稍稍理清了一下Android驱动开发的套路,总结一下笔记. HAL:Hardw ...

  7. Android HAL层与Linux Kernel层驱动开发简介

    Android HAL层与Linux Kernel层驱动开发简介 阅读数:5070 近日稍微对Android中的驱动开发做了一些简要的了解,稍稍理清了一下Android驱动开发的套路,总结一下笔记. ...

  8. 谈谈linux内核原理,谈谈Linux内核驱动的coding style

    最近在向Linux内核提交一些驱动程序,在提交的过程中,发现自己的代码离Linux内核的coding style要求还是差很多.当初自己对内核文档里的CodingStyle一文只是粗略的浏览,真正写代 ...

  9. linux驱动开发简介

    一.linux驱动开发简介 1.linux驱动和裸板驱动的异同 裸板驱动像写英语作文 linux驱动程序像做英语完形填空 2.linux下驱动程序开发需要具备的 硬件基础 能看懂电路原理图 阅读芯片的 ...

  10. Linux内核驱动之efi-rtc

    Linux内核驱动之efi-rtc 1. UEFI与BIOS概述 1.1. BIOS 概述 1.1.1. BIOS缺点: 1.1.2. BIOS的启动流程 1.2 UEFI 概述 1.2.1 Boot ...

最新文章

  1. [汇编与C语言关系]2. main函数与启动例程
  2. C# .net web.config配置access连接字符串
  3. mysql 字符串分区_Mysql分区表的原理和优缺点
  4. 实现RTP协议的H.264视频传输系统
  5. cloudstack基础知识
  6. EDA技术实用教程 | 复习五 | 端口模式
  7. 3. 内存控制器与SDRAM
  8. 百度飞桨—— 车牌识别学习与修改
  9. node.js 模板引擎
  10. 浅谈数据挖掘与机器学习
  11. Centos7修改服务器密码
  12. HG30A-3多用表校验仪
  13. python全局变量
  14. N个数选出M个最小或最大值算法
  15. 视频特征提取常用范式总结
  16. 机房环境动力监控系统功能介绍及设计需求规划和选择
  17. Rust编译`Couldn‘t resolve host name (Could not resolve host: crates)` 错误的解决办法
  18. iOS 初中级工程师简历指南
  19. Calendar日期类获取上月同期需求
  20. matlab 期权图,欧式看涨期权定价作图|MATLAB 程序化交易(量化投资)|MATLAB技术论坛 - Powered by Discuz!...

热门文章

  1. 看得见的开发管理方法—缺陷管理
  2. android 声音,同时播放声音Android
  3. html模块化标签,jq load()方法实现html 模块化。
  4. Java黑皮书课后题第8章:*8.21(中心城市)给定一组城市,中心城市是和其它所有城市具有最短距离的城市。编写一个程序,提示用户输入城市数目以及位置(坐标),找到中心城市以及与其他城市总距离
  5. Java黑皮书课后题第5章:*5.20(打印2到1000之间的素数)修改程序清单5-15,打印2到1000之间(包括2和1000)的所有素数。每1行显示8个素数,数字之间用一个空格字符隔开
  6. Java黑皮书课后题第3章:3.12(回文数字)编写一个程序,提示用户输入一个三位的整数,然后确定它是否是回文数
  7. Java菜鸟教程math类_Java Number Math 类
  8. Gym 101933 A(dp)
  9. 第八周结对编程四则运算二
  10. python脚本批量生成数据