linux内核中Kconfig文档的作用以及Kconfig的语法

合集下载

Linux系统的Makefile和Kconfig及模块简介

Linux系统的Makefile和Kconfig及模块简介

Linux系统的Makefile、Kconfig和模块1Makefile1.1Makefile组织层次Linux的Make体系由如下几部分组成:Ø顶层Makefile顶层Makefile通过读取配置文件,递归编译内核代码树的相关目录,从而产生两个重要的目标文件:vmlinux和模块。

Ø内核相关Makefile位于arch/$(ARCH) 目录下,为顶层Makefile提供与具体硬件体系结构相关的信息。

Ø公共编译规则定义文件。

包括Makefile.build 、Makefile.clean、Makefile.lib、Makefile.host等文件组成。

这些文件位于scripts目录中,定义了编译需要的公共的规则和定义。

Ø内核配置文件 .config通过调用make menuconfig或者make xconfig命令,用户可以选择需要的配置来生成期望的目标文件。

Ø其他Makefile主要为整个Makefile体系提供各自模块的目标文件定义,上层Makefile根据它所定义的目标来完成各自模块的编译。

1.2Makefile的使用在编译内核之前,用户必须首先完成必要的配置。

Linux内核提供了数不胜数的功能,支持众多的硬件体系结构,这就需要用户对将要生成的内核进行裁减。

内核提供了多种不同的工具来简化内核的配置。

make config,字符界面下命令行工具,这个工具会依次遍历内核所有的配置项,要求用户进行逐项的选择配置。

这个工具会耗费用户太多时间,除非万不得以(你的编译主机不支持其他配置工具)一般不建议使用。

make menuconfig,基于ncurse库编制的图形界面工具,一般台式机使用该工具。

make xconfig,基于X11的图形配置工具,一般用于工作站环境。

当用户完成配置后,配置工具会自动生成.config文件,它被保存在内核代码树的根目录下。

kconfig语法详解

kconfig语法详解

kconfig语法详解
在Linux内核配置中,kconfig是一个非常重要的工具。

它提供了一种灵活的方式来定义和配置内核参数。

kconfig语法是内核配置的核心,了解其语法规则和特性对于正确配置内核至关重要。

kconfig语法基于一个简单的配置文件格式,该文件描述了内核选项及其属性。

配置文件通常位于内核源码的顶层目录下,名为.config。

当内核源码被编译时,kconfig工具会读取这个文件,并根据其中的设置来构建内核映像。

kconfig语法的基本结构由配置节点、属性和值组成。

每个配置节点表示一个可配置的选项,而属性描述了该选项的特性和行为。

属性通常包括类型(如bool、int、string等)、默认值、描述和其他元数据。

下面是一个简单的kconfig语法示例:
在上面的示例中,config关键字用于声明一个配置节点。

节点的名称是MY_OPTION,类型为bool(布尔类型),默认值为y(表示启用)。

节点还有一个描述,说明这是一个示例选项。

kconfig语法的关键部分还包括条件语句、菜单结构、选择列表等。

这些高级特性使得配置过程更加灵活和复杂。

例如,可以使用条件语句来根据不同的配置环境或条件启用或禁用特定选项。

菜单结构允许用户在配置界面中组织选项,使界面更易于导航和理解。

选择列表则提供了一个用户可以选择的固定选项集合,通常用于设置某些特定的参数值。

总之,了解kconfig语法是进行Linux内核配置的基础。

通过掌握其基本结构和规则,用户可以更加灵活地定制和优化内核参数,以满足特定的需求和场景。

Linux内核中的Kconfig用法与说明

Linux内核中的Kconfig用法与说明

Linux内核中的Kconfig文件本节不对内核的Kconfig文件进行深入展开,更多Kconfig语法和说明请阅读<Documentation/kbuild/kconfig-language.txt>和<Documentation/kbuild/kconfig.txt>。

内核源码树每个目录下都还包含一个Kconfig文件,用于描述所在目录源代码相关的内核配置菜单,各个目录的Kconfig文件构成了一个分布式的内核配置数据库。

通过make menuconfig(make xconfig或者make gconfig)命令配置内核的时候,从Kconfig文件读取菜单,配置完毕保存到文件名为.config的内核配置文件中,供Makefile文件在编译内核时使用。

1.1.1 Kconfig基本语法如程序清单0.1所示代码摘自<drivers/char/Kconfig>文件,是一个比较典型的Kconfig文件片段,包含了Kconfig的基本语法。

程序清单0.1drivers/char/Kconfig片段menu "Character devices"source "drivers/tty/Kconfig"config DEVKMEMbool "/dev/kmem virtual device support"default yhelpSay Y here if you want to support the /dev/kmem device. The/dev/kmem device is rarely used, but can be used for certainkind of kernel debugging operations.When in doubt, say "N".……endmenu1.子菜单通过menu和endmenu来定义一个子菜单,程序清单0.1所示代码定义了一个“Character devices”子菜单,子菜单在界面中用“--->”表示,如图0.1所示。

Kconfig基本语法

Kconfig基本语法

Kconfig基本语法Linux 内核在2.6版本以后将配置⽂件由原来的config.in改为Kconfig。

当执⾏make menuconfig时会出现内核的配置界⾯,所有配置⼯具都是通过读取arch/$(ARCH)Kconfig⽂件来⽣成配置界⾯,这个⽂件就是所有配置的总⼊⼝,它会包含其他⽬录的Kconfig。

Kconfig的作⽤是⽤来配置内核,它就是各种配置界⾯的源⽂件,内核的配置⼯具读取各个Kconfig⽂件,⽣成配置界⾯供开发⼈员配置内核,最后⽣成配置⽂件.config。

Kconfig的语法可以参考Documentation/kbuild/kconfig-language.txt,在这⾥给出kconfig-language.txt的中⽂翻译。

介绍----在配置数据库的配置选项是以树的形式组织的:+- Code maturity level options| +- Prompt for development and/or incomplete code/drivers+- General setup| +- Networking support| +- System V IPC| +- BSD Process Accounting| +- Sysctl support+- Loadable module support| +- Enable loadable module support| +- Set version information on all module symbols| +- Kernel module loader+- ...每个选项都有其⾃⼰的依赖关系。

这些依赖关系决定了选项是否是可见的。

⽗选项可见,⼦选项才能可见。

菜单选项--------⼤多数的选项都定义了⼀个配置选项,其它选项则有助于对它们进⾏组织。

⼀个配置选项定义可以是下⾯的形式:config MODVERSIONSbool "Set version information on all module symbols"depends MODULEShelpUsually, modules have to be recompiled whenever you switch to a newkernel. ...每⾏都是以config关键字开始,并可以接多个参数。

LINUX设备驱动开发详解

LINUX设备驱动开发详解

LINUX设备驱动开发详解概述LINUX设备驱动开发是一项非常重要的任务,它使得硬件设备能够与操作系统进行有效地交互。

本文将详细介绍LINUX设备驱动开发的基本概念、流程和常用工具,帮助读者了解设备驱动开发的要点和技巧。

设备驱动的基本概念设备驱动是连接硬件设备和操作系统的桥梁,它负责处理硬件设备的输入和输出,并提供相应的接口供操作系统调用。

设备驱动一般由设备驱动程序和设备配置信息组成。

设备驱动程序是编写解决设备驱动的代码,它负责完成设备初始化、IO操作、中断处理、设备状态管理等任务。

设备驱动程序一般由C语言编写,使用Linux内核提供的API函数进行开发。

设备配置信息是定义硬件设备的相关参数和寄存器配置的文件,它告诉操作系统如何与硬件设备进行交互。

设备配置信息一般以设备树或者直接编码在设备驱动程序中。

设备驱动的开发流程设备驱动的开发流程包括设备初始化、设备注册、设备操作函数编写和设备驱动注册等几个主要步骤。

下面将详细介绍这些步骤。

设备初始化设备初始化是设备驱动开发的第一步,它包括硬件初始化和内存分配两个主要任务。

硬件初始化是对硬件设备进行基本的初始化工作,包括寄存器配置、中断初始化等。

通过操作设备的寄存器,将设备设置为所需的状态。

内存分配是为设备驱动程序分配内存空间以便于执行。

在设备初始化阶段,通常需要为设备驱动程序分配一块连续的物理内存空间。

设备注册设备注册是将设备驱动程序与设备对象进行关联的过程,它使得操作系统能够正确地管理设备。

设备注册包括设备号分配、设备文件创建等操作。

设备号是设备在系统中的唯一标识符,通过设备号可以找到设备对象对应的设备驱动程序。

设备号分配通常由操作系统负责,设备驱动程序通过注册函数来获取设备号。

设备文件是用户通过应用程序访问设备的接口,它是操作系统中的一个特殊文件。

设备文件的创建需要通过设备号和驱动程序的注册函数来完成。

设备操作函数编写设备操作函数是设备驱动程序的核心部分,它包括设备打开、设备关闭、读和写等操作。

Linux 内核配置机制(make menuconfig、Kconfig、makefile)讲解

Linux 内核配置机制(make menuconfig、Kconfig、makefile)讲解

printk(KERN_WARNING fmt, ##arg) printk(KERN_DEBUG fmt, ##arg)
/* Module Init & Exit function */ static int __init myModule_init(void) {
/* Module init code */ PRINTK("myModule_init\n"); return 0;
图形
工具
前面我们介绍模块编程的时候介绍了驱动进入内核有两种方式:模块和直接编译进内核,并介绍 了模块的一种编译方式——在一个独立的文件夹通过makefile配合内核源码路径完成
那么如何将驱动直接编译进内核呢? 在我们实际内核的移植配置过程中经常听说的内核裁剪又是怎么麽回事呢? 我们在进行linux内核配置的时候经常会执行make menuconfig这个命令,然后屏幕上会出现以下 界面:
首页 业界 移动 云计算 研发 论坛 博客 下载 更多
process的专栏
您还未登录!| 登录 | 注册 | 帮助
个人资料
dianhuiren
访问:71424次 积分:1219分 排名:第8764名 原创:37篇 转载:127篇 译文:0篇 评论:3条
目录视图
摘要视图
订阅
《这些年,我们读过的技术经典图书》主题有奖征文 经理
这些配置工具都是使用脚本语言,如 Tcl/TK、Perl 编写的(也包含一些用 C 编写的代码)。本文
/dianhuiren/article/details/6917132
1/5
2012年04月 (6) 2012年03月 (15) 2012年02月 (16)
并不是对配置系统本身进行分析,而是介绍如何使用配置系统。所以,除非是配置系统的维护者,一般 的内核开发者无须了解它们的原理,只需要知道如何编写 Makefile 和配置文件就可以。

第17章:嵌入式Linux移植与引导

第17章:嵌入式Linux移植与引导
}; struct ATAG_INITRD2 #definetag_cmdline { 0x54420005 char cmdline[1]; /* this is the minimum size */ struct tag_initrd { }; u32 start; u32 size; }; /* physical start address */ /* size of compressed ramdisk image in bytes */
嵌入式Linux的引导

stage2内存映射 – 如下数据结构用来描述RAM 地址空间中的一段连续的 地址范围:
type struct memory_area_struct { u32 start; //内存区域的起始地址 u32 size; //内存区域的大小(字节数) int used; //内存区域的状态 } memory_area_t; used=0|1 • 1=这段地址范围已被实现,也即真正地被映射到RAM 单元上 • 0=这段地址范围并未被系统所实现,处于未使用状态。
• R0=0; • R1=机器类型ID; • R2=传递给内核的启动参数起始地址;
– 2. CPU 模式:
• 必须禁止中断(IRQs和FIQs); • CPU必须处于SVC 模式;
– 3. Cache 和MMU 的设置:
• MMU 必须关闭; • 指令Cache 可以打开也可以关闭; • 数据Cache 必须关闭;
东南大学集成电路学院
嵌入式操作系统
第十七章 嵌入式Linux移植与引导
戚隆宁 longn_qi@
国家ASIC系统工程技术研究中心
主要内容


嵌入式Linux的引导 嵌入式Linux的移植

config用法

config用法

config用法config是一个常用的配置文件格式,它是一种文本文件,通常以.config为扩展名。

config文件用于存储应用程序的配置信息,包括设置、选项、参数等。

在计算机应用中,config文件通常用于设置应用程序的运行参数、文件路径、端口号、数据库连接信息等。

通过使用config文件,用户可以方便地修改应用程序的配置,从而满足不同的使用场景和需求。

一、config文件的结构config文件通常包含多个配置项,每个配置项由键值对组成。

键是配置项的名称,值是对应的值。

config文件可以包含多个层次结构,每个层次结构由多个配置项组成。

config文件的格式比较简单,通常使用英文或中文进行编写。

config文件的语法规则如下:* 配置项以键值对的形式表示,用等号“=”连接键和值;* 配置项之间用逗号或分号隔开;* 配置项可以包含空格和特殊字符;* 配置项的值可以是文本、数字、布尔值等。

二、config文件的编辑工具常用的编辑工具有文本编辑器、编辑器、Visual Studio Code 等。

其中,文本编辑器是最简单的方法,适合初学者使用。

编辑器可以提供更多的编辑功能,如语法高亮、自动补全等。

Visual Studio Code是一款跨平台的编辑器,适用于编写多种编程语言,对于config 文件的编辑也具有较好的支持。

三、config文件的常用设置config文件中的常用设置包括设置应用程序的端口号、数据库连接信息、日志文件路径等。

以下是一些示例:* 设置应用程序的端口号:```phpPORT=8080```* 设置数据库连接信息:```makefileDB_HOST=localhostDB_USER=rootDB_PASSWORD=123456DB_NAME=mydatabase```* 设置日志文件路径:```makefileLOG_PATH=C:/log/myapp.log```四、config文件的加载和使用config文件通常在应用程序启动时加载和使用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

linux内核中Kconfig文档的作用以及Kconfig的语法2.6内核的源码树目录下一般都会有两个文文:Kconfig 和Makefile。

分布在各目录下的Kconfig构成了一个分布式的内核配置数据库,每个Kconfig分别描述了所属目录源文件相关的内核配置菜单。

在内核配置make menuconfig(或xconfig等)时,从Kconfig中读出配置菜单,用户配置完后保存到.config(在顶层目录下生成)中。

在内核编译时,主Makefile调用这个.config,就知道了用户对内核的配置情况。

上面的内容说明:Kconfig就是对应着内核的配置菜单。

假如要想添加新的驱动到内核的源码中,可以通过修改Kconfig来增加对我们驱动的配置菜单,这样就有途径选择我们的驱动,假如想使这个驱动被编译,还要修改该驱动所在目录下的Makefile。

因此,一般添加新的驱动时需要修改的文件有两种(注意不只是两个)*Kconfig*Makefile要想知道怎么修改这两种文件,就要知道两种文档的语法结构。

First: Kconfig每个菜单项都有一个关键字标识,最常见的就是config。

语法:configsymboloptions&lt;!--[if !supportLineBreakNewLine]--&gt;&lt ;!--[endif]--&gt;symbol就是新的菜单项,options是在这个新的菜单项下的属性和选项其中options部分有:1、类型定义:每个config菜单项都要有类型定义,bool:布尔类型,tristate三态:内建、模块、移除,string:字符串,hex:十六进制,integer:整型例如config HELLO_MODULEbool "hello test module"bool类型的只能选中或不选中,tristate类型的菜单项多了编译成内核模块的选项,假如选择编译成内核模块,则会在.config中生成一个CONFIG_HELLO_MODULE=m的配置,假如选择内建,就是直接编译成内核影响,就会在.config中生成一个CONFIG_HELLO_MODULE=y的配置.2、依赖型定义depends on或requires指此菜单的出现是否依赖于另一个定义config HELLO_MODULEbool "hello test module"depends on ARCH_PXA 这个例子表明HELLO_MODULE这个菜单项只对XScale处理器有效,即只有在选择了ARCH_PXA,该菜单才可见(可配置)。

3、帮助性定义只是增加帮助用关键字help或---help---&lt;!--[if !supportLineBreakNewLine]--&gt;&lt;!--[en dif]--&gt;更多详细的Kconfigconfig语法可参考:Second: 内核的Makefile内核的Makefile分为5个组成部分:Makefile 最顶层的Makefile.config 内核的当前配置文档,编译时成为顶层Makefile的一部分arch/$(ARCH)/Makefile 和体系结构相关的Makefiles/ Makefile.* 一些Makefile的通用规则kbuild Makefile 各级目录下的大概约500个文档,编译时根据上层Makefile传下来的宏定义和其他编译规则,将源代码编译成模块或编入内核。

顶层的Makefile文档读取 .config文档的内容,并总体上负责build内核和模块。

Arch Makefile则提供补充体系结构相关的信息。

s目录下的Makefile文档包含了任何用来根据kbuild Makefile 构建内核所需的定义和规则。

(其中.config的内容是在make menuconfig的时候,通过Kconfig文档配置的结果)在linux2.6.x/Documentation/kbuild目录下有详细的介绍有关kernel makefile的知识。

最后举个例子:假设想把自己写的一个flash的驱动程式加载到工程中,而且能够通过menuconfig配置内核时选择该驱动该怎么办呢?能够分三步:第一:将您写的flashtest.c 文档添加到/driver/mtd/maps/ 目录下。

第二:修改/driver/mtd/maps目录下的kconfig文档:config MTD_flashtesttristate &#8220;ap71 flash"这样当make menuconfig时,将会出现ap71 flash选项。

第三:修改该目录下makefile文档。

添加如下内容:obj-$(CONFIG_MTD_flashtest) += flashtest.o这样,当您运行make menucofnig时,您将发现ap71 flash选项,假如您选择了此项。

该选择就会保存在.config文档中。

当您编译内核时,将会读取.config文档,当发现ap71 flash 选项为yes 时,系统在调用/driver/mtd/maps/下的makefile 时,将会把flashtest.o 加入到内核中。

即可达到您的目的。

2.6内核的源码树目录下一般都会有两个文文:Kconfig和Makefile。

分布在各目录下的Kconfig构成了一个分布式的内核配置数据库,每个Kconfig分别描述了所属目录源文件相关的内核配置菜单。

在内核配置make menuconfig(或xconfig等)时,从Kconfig中读出配置菜单,用户配置完后保存到.config(在顶层目录下生成)中。

在内核编译时,主Makefile调用这个.config,就知道了用户对内核的配置情况。

上面的内容说明:Kconfig就是对应着内核的配置菜单。

假如要想添加新的驱动到内核的源码中,可以通过修改Kconfig来增加对我们驱动的配置菜单,这样就有途径选择我们的驱动,假如想使这个驱动被编译,还要修改该驱动所在目录下的Makefile。

因此,一般添加新的驱动时需要修改的文件有两种(注意不只是两个)*Kconfig*Makefile要想知道怎么修改这两种文件,就要知道两种文档的语法结构。

First: Kconfig每个菜单项都有一个关键字标识,最常见的就是config。

语法:configsymboloptions&lt;!--[if !supportLineBreakNewLine]--&gt;&lt ;!--[endif]--&gt;symbol就是新的菜单项,options是在这个新的菜单项下的属性和选项其中options部分有:1、类型定义:每个config菜单项都要有类型定义,bool:布尔类型,tristate 三态:内建、模块、移除,string:字符串,hex:十六进制,integer:整型例如config HELLO_MODULEbool "hello test module"bool类型的只能选中或不选中,tristate类型的菜单项多了编译成内核模块的选项,假如选择编译成内核模块,则会在.config中生成一个CONFIG_HELLO_MODULE=m的配置,假如选择内建,就是直接编译成内核影响,就会在.config中生成一个CONFIG_HELLO_MODULE=y的配置.2、依赖型定义depends on或requires指此菜单的出现是否依赖于另一个定义config HELLO_MODULEbool "hello test module"depends on ARCH_PXA 这个例子表明HELLO_MODULE这个菜单项只对XScale处理器有效,即只有在选择了ARCH_PXA,该菜单才可见(可配置)。

3、帮助性定义只是增加帮助用关键字help或---help---&lt;!--[if !supportLineBreakNewLine]--&gt;&lt;!--[en dif]--&gt;更多详细的Kconfigconfig语法可参考:Second: 内核的Makefile内核的Makefile分为5个组成部分:Makefile 最顶层的Makefile.config 内核的当前配置文档,编译时成为顶层Makefile的一部分arch/$(ARCH)/Makefile 和体系结构相关的Makefiles/ Makefile.* 一些Makefile的通用规则kbuild Makefile 各级目录下的大概约500个文档,编译时根据上层Makefile传下来的宏定义和其他编译规则,将源代码编译成模块或编入内核。

顶层的Makefile文档读取 .config文档的内容,并总体上负责build内核和模块。

Arch Makefile则提供补充体系结构相关的信息。

s目录下的Makefile文档包含了任何用来根据kbuild Makefile 构建内核所需的定义和规则。

(其中.config的内容是在make menuconfig的时候,通过Kconfig文档配置的结果)在linux2.6.x/Documentation/kbuild目录下有详细的介绍有关kernel makefile的知识。

最后举个例子:假设想把自己写的一个flash的驱动程式加载到工程中,而且能够通过menuconfig配置内核时选择该驱动该怎么办呢?能够分三步:第一:将您写的flashtest.c 文档添加到/driver/mtd/maps/ 目录下。

第二:修改/driver/mtd/maps目录下的kconfig文档:config MTD_flashtesttristate &#8220;ap71 flash"这样当make menuconfig时,将会出现ap71 flash选项。

第三:修改该目录下makefile文档。

添加如下内容:obj-$(CONFIG_MTD_flashtest) += flashtest.o这样,当您运行make menucofnig时,您将发现ap71 flash选项,假如您选择了此项。

该选择就会保存在.config文档中。

当您编译内核时,将会读取.config文档,当发现ap71 flash 选项为yes 时,系统在调用/driver/mtd/maps/下的makefile 时,将会把flashtest.o 加入到内核中。

相关文档
最新文档