Linux内核中的Kconfig用法与说明
内核配置与裁剪

内核配置与裁剪1. Linux内核配置内核配置的方法很多,make config、make xconfig、make menuconfig、make oldconfig 等等,它们的功能都是一样的。
这里用的是make menuconfig。
过去基于2.x的内核为用户提供了四种基本的内核设置编辑器:✧. config 服务于内核设置的一个冗长的命令行界面;✧. oldconfig 一个文本模式的界面,主要包含一个已有设置文件,对用户所发现的内核资源中的设置变量进行排序;✧. menuconfig 一个基于光标控制库的终端导向编辑器,可提供文本模式的图形用户界面;✧. xconfig 一个图形内核设置编辑器,需要安装X-Window系统。
前三种编辑器在设置2.6内核时仍可使用,在运行“make xconfig”后,原有的界面被两个新的图形设置编辑器所代替。
这需要具体的图形库和X-Window系统的支持。
另外,用户还可以通过“make defconfig”命令,利用所有内核设置变量的缺省值自动建立一个内核设置文件。
下面具体介绍Linux内核配置选项:. 代码成熟度选项Code maturity level options --->[*] Prompt for development and/or incomplete code/drivers[*] Select only drivers expected to compile cleanly在内核中包含了一些不成熟的代码和功能,如果我们想使用这些功能,想打开相关的配置选项,就必需打开这一选项。
. 通用设置选项General setup --->() Local version - append to kernel release[*] Automatically append version information to the version string[*] Support for paging of anonymous memory (swap)[*] System V IPC[*] POSIX Message Queues[*] BSD Process Accounting[*] BSD Process Accounting version 3 file format[*] Sysctl support[ ] Auditing support[*] Support for hot-pluggable devices[*] Kernel Userspace Events[*] Kernel .config support[*] Enable access to .config through /proc/config.gz() Initramfs source file(s)[*] Configure standard kernel features (for small systems) ---> --- Configure standard kernel features (for small systems) [ ] Load all symbols for debugging/kksymoops[ ] Do an extra kallsyms pass[ ] Enable support for prinlk[ ] BUG()support[ ] Enable full-sinzed data structures for core[*] Enable futex support[*] Enable eventpoll support[*] Optimize for size[*] Use full shmem filesystem(0) Function alignment(0) Label alignment(0) Loop alignment(0) Jump alignmentLocal version - append to kernel release:这里填入的是64字符以内的字符串,在这里填上的字符串可以用uname -a命令看到。
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文件,它被保存在内核代码树的根目录下。
kconifg语法

kconifg语法Kconfig语法详解Kconfig是Linux内核配置系统中使用的配置语言,用于配置Linux 内核的各种功能和选项。
本文将详细介绍Kconfig语法的使用和相关注意事项。
一、基本概念1. menuconfig:Kconfig的主要操作命令,用于进入配置菜单界面。
2. config:用于定义配置选项的关键字,后跟选项名称和默认值。
3. bool/int/tristate:配置选项的数据类型,分别表示布尔型、整型和三态(可选、已选、未选)。
4. prompt:配置选项在菜单中的显示名称。
5. depends on:用于指定配置选项的依赖关系,可以根据其他选项来决定是否显示该选项。
6. select:用于指定一个选项被选择时,自动选择其他选项。
二、配置菜单Kconfig使用菜单的方式组织和展示配置选项,方便用户进行选择。
菜单的层级结构可以通过menu和endmenu关键字来定义。
例如:menu "General setup"config FOObool "Enable FOO"helpThis option enables the feature of FOO.endmenu三、配置选项Kconfig中的配置选项使用config关键字定义,可以设置选项的名称、数据类型、默认值等。
例如:config BARbool "Enable BAR"default ydepends on FOOhelpThis option enables the feature of BAR.四、依赖关系Kconfig中的配置选项可以通过depends on关键字来指定依赖关系。
例如,选项A依赖于选项B时,可以这样定义:config Abool "Enable A"depends on B五、选项选择Kconfig中的配置选项可以使用select关键字来指定选项的自动选择。
linux_kconfig详解及语法

linux_kconfig详解及语法介绍------------配置数据库是组织在一个树结构里面的配置选项的集合。
+- 代码成熟级别选项| +- 对于开发和/或不完整的代码/驱动的提示+-通用配置| +- 网络支持| +- System V 进程通信机制| +- BSD 程序计数器| +- Sysctl支持+-可装载模块支持| +- 使能可装载模块支持| +- 在所有模块标记上设置版本信息| +- 内核模块装载+-...每个入口都有它的依赖。
这些依赖性用来决定入口的是否可见。
只有当父入口是可见的,它的子入口才能是可见的。
菜单入口------------大多数入口在Kconfig文件中都定义了一个配置选项;所有其它的入口都用来组织这些配置选项。
一个典型的配置选项是这样定义的:config MODVERSIONSbool"Set version information on all module symbols"dependson MODULEShelpUsually, modules have to be recompiledwhenever you switch to a newkernel. ...每一行都以一个关键字开头,并且后面可以跟多个参数。
一个新的配置入口是以“config”关键字开始的。
接下来的数行是对这个配置选项的属性定义。
属性可以是类型、输入提示、依赖项、帮助文档以及默认值。
一个配置选项用相同的名字定义多次,但是每次定义的输入提示和类型都必须不一样。
菜单属性--------------一个菜单入口可以有多个属性。
不是所有的属性在任何地方都会有效。
- 类型定义:"bool"/"tristate"/"string"/"hex"/"int"每个配置选项必须都有一个类型。
LINUX设备驱动开发详解

LINUX设备驱动开发详解概述LINUX设备驱动开发是一项非常重要的任务,它使得硬件设备能够与操作系统进行有效地交互。
本文将详细介绍LINUX设备驱动开发的基本概念、流程和常用工具,帮助读者了解设备驱动开发的要点和技巧。
设备驱动的基本概念设备驱动是连接硬件设备和操作系统的桥梁,它负责处理硬件设备的输入和输出,并提供相应的接口供操作系统调用。
设备驱动一般由设备驱动程序和设备配置信息组成。
设备驱动程序是编写解决设备驱动的代码,它负责完成设备初始化、IO操作、中断处理、设备状态管理等任务。
设备驱动程序一般由C语言编写,使用Linux内核提供的API函数进行开发。
设备配置信息是定义硬件设备的相关参数和寄存器配置的文件,它告诉操作系统如何与硬件设备进行交互。
设备配置信息一般以设备树或者直接编码在设备驱动程序中。
设备驱动的开发流程设备驱动的开发流程包括设备初始化、设备注册、设备操作函数编写和设备驱动注册等几个主要步骤。
下面将详细介绍这些步骤。
设备初始化设备初始化是设备驱动开发的第一步,它包括硬件初始化和内存分配两个主要任务。
硬件初始化是对硬件设备进行基本的初始化工作,包括寄存器配置、中断初始化等。
通过操作设备的寄存器,将设备设置为所需的状态。
内存分配是为设备驱动程序分配内存空间以便于执行。
在设备初始化阶段,通常需要为设备驱动程序分配一块连续的物理内存空间。
设备注册设备注册是将设备驱动程序与设备对象进行关联的过程,它使得操作系统能够正确地管理设备。
设备注册包括设备号分配、设备文件创建等操作。
设备号是设备在系统中的唯一标识符,通过设备号可以找到设备对象对应的设备驱动程序。
设备号分配通常由操作系统负责,设备驱动程序通过注册函数来获取设备号。
设备文件是用户通过应用程序访问设备的接口,它是操作系统中的一个特殊文件。
设备文件的创建需要通过设备号和驱动程序的注册函数来完成。
设备操作函数编写设备操作函数是设备驱动程序的核心部分,它包括设备打开、设备关闭、读和写等操作。
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 和配置文件就可以。
Kconfig指令详解

mentcomment相当于插入语句,不起实际作用,只是起显示一句话如:comment "****Boot options******"bool 后面+字符串(tristate与bool一样,只是多了一个M选项,意思是编译成动态模块,不是直接加载到内核的,而是单独编译成模块,需要时再加载,适合于外设驱动程序)如:config S3C_BOOT_WATCHDOGbool "S3C Initialisation watchdog"depends on S3C2410_W ATCHDOGhelpSay y to enable the watchdog during the kernel decompression其中关键字config ,bool ,depends on当S3C2410_W ATCHDOG被定义时,显示[ ] S3C Initialisation watchdog 选项用空格来选择Y or N . bool 是用来定义Y或者N 的,当选择Y 时,则配置CONFIG_S3C_BOOT_W ATCHDOG在Makefile 中obj-$( CONFIG_S3C_BOOT_W ATCHDOG) += watchdog.o 则该语句有效,编译watchdog.c 文件3. int 的用法config S3C2410_PM_CHECK_CHUNKSIZEint "S3C UART to use for low-level messages"default 0 //若要写成默认值100 则括号里面就是100helpChoice of which UART port to use for the low-level messages,箭头的使用如下:蓝色部分//****************以下设置菜单前有选项[ ]**************************menuconfig NETbool "Networking support"select NLATTR---help---Unless you really know what you are doing, you should say Y here.。
kconfig default语法

kconfig default语法在Linux内核开发中,kconfig是一种配置系统,用于帮助开发者对内核进行灵活的配置和定制。
kconfig default语法是kconfig 配置文件中的一种语法规则,用于设置配置项的默认值。
本文将详细介绍kconfig default语法的使用方法和注意事项。
一、基本语法kconfig default语法的基本格式如下:config CONFIG_NAMEdefault DEFAULT_VALUE其中,CONFIG_NAME是配置项的名称,DEFAULT_VALUE是配置项的默认值。
通过使用这种语法,开发者可以在配置文件中为某个配置项指定一个默认值,以便在编译内核时使用。
二、使用方法1. 配置项的定义在配置文件中,首先需要定义一个配置项。
配置项的定义使用config语句,格式如下:config CONFIG_NAMEtype TYPEprompt "PROMPT"help "HELP_TEXT"其中,CONFIG_NAME是配置项的名称,TYPE是配置项的类型,PROMPT是配置项的提示信息,HELP_TEXT是配置项的帮助信息。
配置项的类型可以是bool(布尔值)、int(整数值)、string(字符串值)等等。
2. 设置默认值在配置项的定义之后,可以使用kconfig default语法为配置项设置一个默认值。
默认值使用default语句进行设置,格式如下:default DEFAULT_VALUE其中,DEFAULT_VALUE是配置项的默认值。
根据配置项的类型不同,DEFAULT_VALUE可以是布尔值、整数值、字符串值等等。
3. 示例下面是一个使用kconfig default语法的示例:config EXAMPLE_CONFIGtype boolprompt "Enable example feature"help "This is an example feature."default y在这个示例中,定义了一个名为EXAMPLE_CONFIG的配置项,类型为布尔值。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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 DEVKMEM
bool "/dev/kmem virtual device support"
default y
help
Say Y here if you want to support the /dev/kmem device. The
/dev/kmem device is rarely used, but can be used for certain
kind of kernel debugging operations.
When in doubt, say "N".
……
endmenu
1.子菜单
通过menu和endmenu来定义一个子菜单,程序清单0.1所示代码定义了一个“Character devices”子菜单,子菜单在界面中用“--->”表示,如图0.1所示。
图0.1menu定义的子菜单
子菜单的菜单项则由config来定义,随后的“bool”、“default”、“help”等都是该菜单
项的属性:
config DEVKMEM
bool "/dev/kmem virtual device support"
这两行语句定义了一个bool选项,在.config中的配置变量名称为CONFIG_DEVKMEM,选项提示信息为“/dev/kmem virtual device support”,在内核配置界面的实际表现为:
[*] /dev/kmem virtual device support
由于设置其默认属性default为y,所以该选项默认选中。
help引出帮助信息,在内核配置界面,选择选项后,通过<Help>可以查看帮助信息。
2.属性
类型定义:每个菜单项都必须定义类型,可选类型有:bool、tristate、string、hex和int,各类型描述如表0.1所列。
表0.1菜单项类型和说明
定义选项的类型后面可以加菜单信息,用引号(“”)给出,留空则不加提示信息。
对于布尔型选项,在配置界面用[]表示:
[*] /dev/kmem virtual device support
[*]表示选中,对应CONFIG_XXX=y,[ ]则表示未选中。
对于三态选项,在配置界面用<>表示:
<*> Kernel .config support
<*>表示选中,对应CONFIG_XXXx=y,<M>表示编译为模块,对应CONFIG_XXX=m,<>表示未选中。
子菜单也可同时设置类型,如下列代码在定义PWM菜单的同时定义了菜单属性为三态:
menuconfig GENERIC_PWM
tristate "PWM Support"
default n
help
Enables PWM device support implemented via a generic
framework. If unsure, say N.
在配置界面表现为:
<> PWM Support --->
说明:子菜单的配置值会影响其子选项的可能值。
例如三态子菜单配置为<y>,则其三态子选项依旧可有3种可能值,即可配置为<y>、<M>或者不选中;而三态子菜单配置为<M>,则其子选项只有<M>和不选中两种状态可用。
默认值:有写选项可以设置默认值,无论是哪种类型,都可以通过default设置其默认值,例如:
config ARM
bool
default y
select HA VE_AOUT
选中:前面这个示例的select,表示了一种选中关系,即选中某个选项后,会自动选中某个或者某些选项。
前面这个示例表明,选中ARM后,会自动选中HA VE_AOUT。
依赖关系:如果一个选项能否生效与否与其它选项的设置有关,则必须通过depends on 来声明这种依赖关系。
例如,只有使能了SMP才能设置CPU个数变量NR_CPUS,在Kconfig 中则写成:
config NR_CPUS
int "Maximum number of CPUs (2-32)"
range 2 32
depends on SMP
default "4"
帮助:通过help关键字引入帮助,帮助的正文必须另起一行。
菜单选项属性的每个关键字,必须用TAB键与行首隔开,不能用等数的空格替代。
3.目录层次迭代
通过source可以直接引用下级目录的Kconfig文件,形成新的菜单项或者子菜单,这样方便每个目录独立管理各自的配置内容。
“source "drivers/tty/Kconfig"”就是直接引用
<drivers/tty/Kconfig>文件,形成更多菜单(项)。
1.1.2 配置项和配置开关
通过config定义的菜单配置项,在内核配置后会产生一个以“CONFIG_”开头的配置开关变量,该开关变量可在Makefile中或者源代码中使用。
例如:“config BAR”将会产生一个开关变量CONFIG_BAR,在Makefile中可以这么使用:
obj-$(CONFIG_BAR) += file_bar.o
在源代码中可用这个开关变量来进行一些条件处理,例如:#if defined (CONFIG_BAR)
实际处理代码
#endif
如果定义的BAR是三态变量,则还可以根据需要这样使用:#if defined (CONFIG_BAR)|| defined (CONFIG_BAR_MODULE) 实际处理代码
#endif。