Kconfig文件结构(图文)简介


1 Kconfig和Makefile

毫不夸张地说,Kconfig和Makefile是我们浏览内核代码时最为依仗的两个文件。基本上,Linux 内核中每一个目录下边都会有一个Kconfig文件和一个Makefile文件。Kconfig和Makefile就好似一个城市的地图,地图引导我们去 认识一个城市,而Kconfig和Makefile则可以让我们了解一个内核目录下面的结构在希望研究内核的某个子系统、某个驱动或其他某个部分时,都 有必要首先仔细阅读一下相关目录下的Kconfig和Makefile文件
分布到各目录的Kconfig构成了一个分布式的内核配置数据库,每个Kconfig分别描述了所属目录源文档相关的内核配置菜单在内核配置make menuconfig时,从Kconfig中读出菜单,用户选择后保存到.config的内核配置文档中。 在内核编译时,主Makefile调用这个.config,就知道了用户的选择。
假如想使这个驱动被编译,则要修改Makefile文件,因此,需要添加新的驱动时,需要修改的文件有两个:Kconfig,Makefile.

2 菜单组织结构

一般一个Kconfig文件表示的就是一个菜单,一个菜单由多个菜单项组成,其格式如下:

menu 菜单名  

  

菜单项或菜单链接1  

菜单项或菜单链接2  

...  

菜单项或菜单链接n  

  

endmenu  

复制代码

其中菜单项就是指菜单的子菜单,所谓菜单链接就是指链接到另一个Kconfig文件,如此一下,菜单就可以实现随意嵌套了.

例如:

# drivers/Kconfig  

menu "Device Drivers"  

source "drivers/base/Kconfig"  

source "drivers/connector/Kconfig"  

source "drivers/mtd/Kconfig"  

source "drivers/of/Kconfig"  

source "drivers/parport/Kconfig"  

source "drivers/pnp/Kconfig"  

source "drivers/block/Kconfig"  

source "drivers/hello/Kconfig"  

config test  

  bool "提示字符串"  

  default y  

  ...  

endmenu   

复制代码

2.1 菜单项

语法:

config <symbol>  

<config options>  

复制代码

<symbol>为一符号,就好像代码中的局部变量x一样,可用于后边的表达式中.

例如:

config UEVENT_HELPER_PATH  

       string "path to uevent helper"  

       depends on HOTPLUG  

       default "/sbin/hotplug"  

       help  

      Path to uevent helper program forked by the kernel for  

      every uevent.  

复制代码

上面菜单项的属性string表示菜单的类型,每一个菜单项必须有一个类型.

注:每个config菜单项都会产生一个配置选项CONFIG_XXX, XXX即为<symbol>. 如上,则会产生一个配置项:CONFIG_UEVENT_HELPER_PATH,此配置项的值记录在内核根目录下的隐藏文件.config内, 例:~/WORKING_DIRECTORY/kernel/goldfish/.config文件内.

2.2 菜单链接

菜单链接的格式如下:

source "路径"  

复制代码

如:

source "drivers/pnp/Kconfig"  

复制代码

2.3 菜单属性2.3.1 类型

类型可以是:bool、tristate、string、hex和int。
bool类型的只能选中或不选中,选中为y,不选中为n.
tristate类型的菜单项为值可为三种值,多了编译成内核模块的选项。其值可为y,n,m.
string类型表示需要用户输入一串字符串
hex类型则需要用户输入一个16进制数。
int类型表示用户输入一个整型.
总结:
菜单类型属性就好比一个控件,bool相当于单选框,trstate相当于有三种状态的复选框,string相当于供用户输入字符串的文本编辑框,hex相当于供用户输入16进制数的文本编辑框,而int就相当于供用户输入整型数的文本编辑框
类型关键字后边可跟随提示字符,也可以不跟随,取决于情况。如:

string "path to uevent helper"  

复制代码

bool "Prevent firmware from being built"

复制代码

注:每一个菜单项必须有类型属性

2.3.2 默认值

默认值属性default一般在类型属性后边,如:

config UEVENT_HELPER_PATH  

    string "path to uevent helper"  

    default "/sbin/hotplug"  

复制代码

表示当前菜单项若用户没有选择或输入任何值时,所取的默认值.上述所示为当前的默认值为"/sbin/totplug".

2.3.3 依赖

依赖可以是"depends on"或"requires".
语法:

depends on/requires <expr>

复制代码

<expre>为表达式,可为之前定义的菜单项名.

如:

depends on HOTPLUG  

复制代码

表示此菜单项显示与否取决于另外一个菜单项HOTPLUG ,只有当菜单项HOTPLUG这个菜单项有效显示,当前菜单项才会显示。

例如:

config MODULES    

    bool "Enable loadable module support"    

   

config MODVERSIONS    

    bool "Set version information on all module symbols"    

    depends on MODULES    

   

    comment "module support disabled"    

    depends on !MODULES   

复制代码

菜单项MODVERSIONS的显示与否取决于菜单项MODULES。这种信赖关系常用在子菜单项中。

2.3.4 选择

语法:

choice  

  

选择项  

  

..  

  

endchoice

复制代码

2.3.5 提示

语法:

comment "提示信息字符串"  

comment选项  

复制代码
comment只是用来给用户提示信息的,后跟字符串,此字符串也可以在终端中显示。
comment选项只可以是deponds on。

2.3.6 帮助

语法:

help/---help--- <字符串>  

复制代码

例如:

config EXTRA_FIRMWARE_DIR  

    string "Firmware blobs root directory"  

    depends on EXTRA_FIRMWARE != ""  

    default "firmware"  

    help  

      This option controls the directory in which the kernel build system  

      looks for the firmware files listed in the EXTRA_FIRMWARE option.  

      The default is the firmware/ directory in the kernel source tree,  

      but by changing this option you can point it elsewhere, such as  

      the /lib/firmware/ directory or another separate directory  

      containing firmware files.  

复制代码

help相当于注释一样,在给编辑Kconfig文件的人看的,这样可以保持其可读性.
3 举例

Kconfig:

# drivers/Kconfig  

  

menu "Device Drivers"  

  

source "drivers/base/Kconfig"  

  

source "drivers/connector/Kconfig"  

  

source "drivers/mtd/Kconfig"  

...  

endmenu  

复制代码

其对应的make menuconfig界面如下图所示:2.gif 

source "drivers/base/Kconfig"中的Kconfig内容如下:即对应着上图中的第一项"Generic Driver Option"的子菜单内容:
这里不再列出来!

显示效果如下图所示:
3.gif 

各个目录下的Kconfig文件经过最终配置,最终会在内核根目录下生成一个.config文件,这是个隐藏文件,这个文件记录着各个选项的配置及值。供Makefile文件使用. 使用命令:ls -al可看到!
如:
.config:

#  

# Automatically generated make config: don't edit  

# Linux kernel version: 2.6.29  

# Thu Dec 15 21:15:25 2011  

#  

CONFIG_ARM=y  

CONFIG_SYS_SUPPORTS_APM_EMULATION=y  

# CONFIG_GENERIC_GPIO is not set  

CONFIG_GENERIC_TIME=y  

CONFIG_GENERIC_CLOCKEVENTS=y  

CONFIG_MMU=y  

# CONFIG_NO_IOPORT is not set  

CONFIG_GENERIC_HARDIRQS=y  

CONFIG_STACKTRACE_SUPPORT=y  

CONFIG_HAVE_LATENCYTOP_SUPPORT=y  

CONFIG_LOCKDEP_SUPPORT=y  

CONFIG_TRACE_IRQFLAGS_SUPPORT=y  

CONFIG_HARDIRQS_SW_RESEND=y  

CONFIG_GENERIC_IRQ_PROBE=y  

CONFIG_RWSEM_GENERIC_SPINLOCK=y  

# CONFIG_ARCH_HAS_ILOG2_U32 is not set  

# CONFIG_ARCH_HAS_ILOG2_U64 is not set  

CONFIG_GENERIC_HWEIGHT=y  

CONFIG_GENERIC_CALIBRATE_DELAY=y  

CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y  

CONFIG_VECTORS_BASE=0xffff0000  

CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  

复制代码

每一个CONFIG_xxx记录着之前Kconfig文件内的菜单项的值.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/253326.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PDM接口介绍

1. 概述 PDM Pulse Density Modulation是一种用数字信号表示模拟信号的调制方法。 PDM则使用远高于PCM采样率的时钟采样调制模拟分量&#xff0c;只有1位输出&#xff0c;要么为0&#xff0c;要么为1。因此通过PDM方式表示的数字音频也被称为Oversampled 1-bit Audio。相比P…

Kaggle 泰坦尼克

入门kaggle&#xff0c;开始机器学习应用之旅。 参看一些入门的博客&#xff0c;感觉pandas&#xff0c;sklearn需要熟练掌握&#xff0c;同时也学到了一些很有用的tricks&#xff0c;包括数据分析和机器学习的知识点。下面记录一些有趣的数据分析方法和一个自己撸的小程序。 1…

语音交互设备 前端信号处理技术和语音交互过程介绍

一、前端信号处理 1. 语音检测&#xff08;VAD&#xff09; 语音检测&#xff08;英文一般称为 Voice Activity Detection&#xff0c;VAD&#xff09;的目标是&#xff0c;准确的检测出音频信号的语音段起始位置&#xff0c;从而分离出语音段和非语音段&#xff08;静音或噪…

【BZOJ1500】[NOI2005]维修数列 Splay

【BZOJ1500】[NOI2005]维修数列 Description Input 输入的第1 行包含两个数N 和M(M ≤20 000)&#xff0c;N 表示初始时数列中数的个数&#xff0c;M表示要进行的操作数目。第2行包含N个数字&#xff0c;描述初始时的数列。以下M行&#xff0c;每行一条命令&#xff0c;格式参见…

bzoj2588: Spoj 10628. Count on a tree(树上第k大)(主席树)

每个节点继承父节点的树&#xff0c;则答案为query(root[x]root[y]-root[lca(x,y)]-root[fa[lca(x,y)]]) #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include<algorithm> using namespace std; const int maxn1…

图文详解YUV420数据格式

YUV格式有两大类&#xff1a;planar和packed。 对于planar的YUV格式&#xff0c;先连续存储所有像素点的Y&#xff0c;紧接着存储所有像素点的U&#xff0c;随后是所有像素点的V。 对于packed的YUV格式&#xff0c;每个像素点的Y,U,V是连续交*存储的。 YUV&#xff0c;分为三个…

USB通信接口介绍

1. 概述 Usb Universal Serial Bus全称通用串行总线&#xff0c;是一种支持热插拔的高速串行传输总线&#xff0c;使用差分信号来传输数据。 USB设备可以直接和host通信&#xff0c;或者通过hub和host通信。一个USB系统中仅有一个USB主机&#xff0c;设备包括功能设备和hub&…

HDCVI——一种创新性的高清视频传输方案

什么是HDCVI 2012年11月&#xff0c;大华技术股份有限公司发布了具有自主知识产权的同轴高清传输接口技术HDCVI。HDCVI技术是一种基于已有SYV75-3或SYV75-5同轴电缆的高清视频传输方法&#xff0c;能够在低成本和较低质量的同轴电缆上实现超长距离高清视频信号的可靠传输。相比…

智能机器人品牌简介

随着科技的发展&#xff0c;硬件的计算速度和大数据支撑&#xff0c;越来越多的智能化设备和产品出现在我们的面前&#xff0c;为我们的生活带来更多便利。其中包括智能机器人&#xff0c;这种产品是有自己的“大脑”&#xff0c;可以接收人为指令&#xff0c;为人服务&#xf…

诞生之日 随笔

今天我诞生了&#xff0c;祝自己诞生日happy&#xff0c;happy&#xff0c;happy&#xff01; 转载于:https://www.cnblogs.com/xiaohuihui-/p/7594406.html

智能音箱 之 麦克风参数介绍

1. 定义 麦克风&#xff0c;学名为传声器&#xff0c;是将声音信号转换为电信号的能量转换器件&#xff1b;声—电转换。 与扬声器正好相反&#xff08;电—声转换&#xff09;&#xff0c;构成电声设备的两个终端&#xff0c;俗称咪头&#xff0c;麦克等。 是电声系统的入口&a…

利用django框架,手把手教你搭建数据可视化系统(一)

如何使用django去构建数据可视化的 web,可视化的结果可以呈现在web上。 使用django的MTV模型搭建网站 基础铺垫—MTV模型 Created with Raphal 2.1.0Request服务器&#xff08;Djangoweb&#xff09;Response首先&#xff0c;要搞清楚我们去访问服务器&#xff0c;服务器返回信…

智能音箱 之 扬声器喇叭介绍

在全双工语音交互的系统中&#xff0c;功放的质量是非常重要的&#xff0c;因为AEC回声消除对信号失真 是非常敏感的。音频通路的整体谐波失真需要控制在5%以内。 对于整个系统的谐波失真来说&#xff0c;扬声器是最关键的因素&#xff0c;其次是功放&#xff0c;麦克风的很小…

UML学习——类图(三)

1.类图 UML类图是用来描述类、接口、协作及它们之间的关系的图。用来显示系统中各个类的静态结构。 2.类图的组成元素 类图由以下六种元素组成&#xff1a;类&#xff0c;接口&#xff0c;泛化关系&#xff0c;关联关系&#xff0c;依赖关系&#xff0c;实现关系。 3.类图的绘制…

传锤子科技解散成都分公司 才搬迁一年罗永浩就顶不住了

雷帝网 乐天 10月16日报道今日有网友爆料&#xff0c;锤子科技解散成都分公司。有网友指出&#xff0c;爆料的人是锤子科技早期员工王前闯。网友爆料锤子成都研发中心解散网友爆料锤子成都研发中心解散2016年&#xff0c;锤子科技亏损4亿元&#xff0c;一直徘徊在破产的边缘&am…

Maven and Nexus2

2019独角兽企业重金招聘Python工程师标准>>> Maven and Nexus2 Maven是什么&#xff1f; 构建工具&#xff1a; 通过简单的命令&#xff0c;能够完成清理、编译、测试、打包、部署等一系列过程。同时&#xff0c;不得不提的是&#xff0c;Maven是跨平台的&#xff0…

Linux kernel的中断子系统之(九):tasklet

返回目录&#xff1a;《ARM-Linux中断系统》。 总结&#xff1a; 二介绍了tasklet存在的意义。 三介绍了通过tasklet_struct来抽想一个tasklet&#xff0c;每个CPU维护一个tasklet链表tasklet_vec/tasklet_hi_vec&#xff0c;然后介绍了如何定一个一个tasklet(静态/动态)&#…

智能音箱 之 功放介绍

基本分类 功率放大器分甲类功放&#xff08;A 类&#xff09;&#xff0c;乙类&#xff08;B 类&#xff09;&#xff0c;甲乙类&#xff08;AB 类&#xff09;和丁类&#xff08;D 类&#xff09;&#xff1b; A 类 指在信号的整个周期内&#xff0c;放大器的任何功率输出…

create_workqueue和create_singlethread_workqueue【转】

本文转载自&#xff1a;http://bgutech.blog.163.com/blog/static/18261124320116181119889/ 1. 什么是workqueueLinux中的Workqueue机制就是为了简化内核线程的创建。通过调用workqueue的接口就能创建内核线程。并且可以根据当前系统CPU的个数创建线程的数量&#xff0c;使得线…

vue学习之路.02

2019独角兽企业重金招聘Python工程师标准>>> 第一个vue项目 1.创建 vue init webpack app01 2.安装依赖 cd app01 npm install 3.构建 npm run dev 启动本机的8080端口 或 …