【内核驱动】 Kconfig简介
当执行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简介相关推荐
- Linux内核驱动-Kconfig和Makefile
1.在linux编写驱动的过程中,有两个文件是我们必须要了解和知晓的.这其中,一个是Kconfig文件,另外一个是Makefile文件.如果大家比较熟悉的话,那么肯定对内核编译需要的.config文件 ...
- 三、linux内核驱动裁剪
总结: Menuconfig是编辑内核的工具. Kconfig定义Menuconfig菜单选项. .config是最后Menuconfig配置完生成的文件. Makefile根据.config宏定义判 ...
- 从入门到精通ARM(4412)-Linux内核驱动编程【下】-李志勇-专题视频课程
从入门到精通ARM(4412)-Linux内核驱动编程[下]-247人已学习 课程介绍 嵌入式绝对是当前IT领域最炙手可热的话题了.其主要应用领域涵盖与人类相关的各行各业: * 消费电 ...
- 嵌入式 Linux 内核驱动开发【The first day: 36093万字】
嵌入式 Linux 内核驱动开发[1] 嵌入式 Linux 内核驱动开发前言 第1章 Linux 内核裁剪和定制 [1]Linux 内核开发简介 [2] Linux 源码阅读工具 [1.2.1]Sou ...
- linux内核体系学习路径_Linux内核分析(一)linux体系简介|内核源码简介|内核配置编译安装...
从本篇博文开始我将对linux内核进行学习和分析,整个过程必将十分艰辛,但我会坚持到底,同时在博文中如果那些地方有问题还请各位大神为我讲解. 今天我们会分析到以下内容: 1. Linux体系结构简介 ...
- Android 系统(4)---Android HAL层与Linux Kernel层驱动开发简介
Android HAL层与Linux Kernel层驱动开发简介 近日稍微对Android中的驱动开发做了一些简要的了解,稍稍理清了一下Android驱动开发的套路,总结一下笔记. HAL:Hardw ...
- Android HAL层与Linux Kernel层驱动开发简介
Android HAL层与Linux Kernel层驱动开发简介 阅读数:5070 近日稍微对Android中的驱动开发做了一些简要的了解,稍稍理清了一下Android驱动开发的套路,总结一下笔记. ...
- 谈谈linux内核原理,谈谈Linux内核驱动的coding style
最近在向Linux内核提交一些驱动程序,在提交的过程中,发现自己的代码离Linux内核的coding style要求还是差很多.当初自己对内核文档里的CodingStyle一文只是粗略的浏览,真正写代 ...
- linux驱动开发简介
一.linux驱动开发简介 1.linux驱动和裸板驱动的异同 裸板驱动像写英语作文 linux驱动程序像做英语完形填空 2.linux下驱动程序开发需要具备的 硬件基础 能看懂电路原理图 阅读芯片的 ...
- 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 ...
最新文章
- [汇编与C语言关系]2. main函数与启动例程
- C# .net web.config配置access连接字符串
- mysql 字符串分区_Mysql分区表的原理和优缺点
- 实现RTP协议的H.264视频传输系统
- cloudstack基础知识
- EDA技术实用教程 | 复习五 | 端口模式
- 3. 内存控制器与SDRAM
- 百度飞桨—— 车牌识别学习与修改
- node.js 模板引擎
- 浅谈数据挖掘与机器学习
- Centos7修改服务器密码
- HG30A-3多用表校验仪
- python全局变量
- N个数选出M个最小或最大值算法
- 视频特征提取常用范式总结
- 机房环境动力监控系统功能介绍及设计需求规划和选择
- Rust编译`Couldn‘t resolve host name (Could not resolve host: crates)` 错误的解决办法
- iOS 初中级工程师简历指南
- Calendar日期类获取上月同期需求
- matlab 期权图,欧式看涨期权定价作图|MATLAB 程序化交易(量化投资)|MATLAB技术论坛 - Powered by Discuz!...
热门文章
- 看得见的开发管理方法—缺陷管理
- android 声音,同时播放声音Android
- html模块化标签,jq load()方法实现html 模块化。
- Java黑皮书课后题第8章:*8.21(中心城市)给定一组城市,中心城市是和其它所有城市具有最短距离的城市。编写一个程序,提示用户输入城市数目以及位置(坐标),找到中心城市以及与其他城市总距离
- Java黑皮书课后题第5章:*5.20(打印2到1000之间的素数)修改程序清单5-15,打印2到1000之间(包括2和1000)的所有素数。每1行显示8个素数,数字之间用一个空格字符隔开
- Java黑皮书课后题第3章:3.12(回文数字)编写一个程序,提示用户输入一个三位的整数,然后确定它是否是回文数
- Java菜鸟教程math类_Java Number Math 类
- Gym 101933 A(dp)
- 第八周结对编程四则运算二
- python脚本批量生成数据