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的配置项,类型为布尔值。
Kconfig语法简介
Kconfig语法简介背景: 上篇⽂章《》简单介绍了在Linux内核配置中添加⾃⼰的驱动选项。
但是仅靠如此简单的配置有时候不能满⾜我们的要求。
Target :hi3531dLinux :有关概念每个选项都有其⾃⼰的依赖关系。
这些依赖关系决定了选项是否是可见的。
⽗选项可见,⼦选项才能可见。
单⼀选项 config原则:每⼀个config就是⼀个选项,最上⾯跟着控制句柄,下⾯则是对这个选项的配置,如选项名是什么,依赖什么,选中这个后同时会选择什么。
⼤多数的选项都定义了⼀个配置选项,其它选项则有助于对它们进⾏组织。
(Most entries definea config option, all other entries help to organize them.)⼀个配置选项定义可以是下⾯的形式:config MODVERSIONSbool "Set version information on all module symbols"depends MODULEShelpUsually, modules have to be recompiled whenever you switch to a newkernel. ..."config" ,配置选项。
⽽它下⾯的⼏⾏定义了该配置选项的属性。
属性可以是该配置选项的类型,输⼊提⽰(input prompt),依赖关系,帮助信息和默认值。
配置选项可以⽤相同的名字定义多次,但每个定义只能有⼀个输⼊提⽰并且类型还不能冲突。
"bool" ,类型定义:"bool"/"tristate"/"string"/"hex"/"int"每个配置选项都必须指定类型。
有两个基本类型:tristate 和 string,其他类型都是基于这两个基本类型。
kconfig string 默认值范围
kconfig string 默认值范围全文共四篇示例,供读者参考第一篇示例:在进行kconfig配置时,经常会遇到需要设置默认值的情况,其中包括kconfig string类型的默认值范围。
Kconfig string类型是指在Linux内核编译配置中用于输入字符串的一种配置选项。
字符串类型的默认值范围关乎配置选项的合法性和可靠性,因此在设置默认值时需要慎重考虑,以确保系统的稳定性和可靠性。
对于kconfig string类型的配置选项,默认值的范围取决于具体的配置要求。
在设置默认值时,需要注意以下几点:1. 字符串长度范围:在设置kconfig string类型的默认值时,需要考虑字符串的长度范围。
一般来说,字符串长度不宜过长,以免导致内存溢出。
在设置默认值时,可以通过限制字符串长度的方式来确保系统的稳定性。
2. 字符串合法性:另外一个需要考虑的因素是字符串的合法性。
在设置默认值时,需要确保输入的字符串是合法的,不应包含特殊字符或不可见字符,以免影响系统的正常运行。
可以通过正则表达式来限制输入字符串的格式,确保输入的字符串符合要求。
3. 默认值的设置:在设置默认值时,需要考虑用户的需求和习惯。
一般来说,可以设置一些常见的字符串作为默认值,以方便用户的配置和使用。
也可以提供一些默认值的选择,让用户根据自己的需求进行配置。
第二篇示例:Kconfig是Linux内核配置系统中用于定义配置选项的语言,允许开发者在编译内核时进行各种配置,以满足不同的需求。
在Kconfig 中,有一种配置选项叫做string,默认值范围是指该选项允许的取值范围。
本文将探讨Kconfig string默认值范围的相关内容。
在Kconfig中,string配置选项代表一个字符串类型的配置项,可以用于输入字符序列。
字符串配置项的默认值范围指的是在配置该选项时,允许用户输入的字符串的取值范围。
一般来说,字符串配置选项的默认值范围是任意字符序列,用户可以输入任意长度的字符串作为配置值。
linux内核中Kconfig文档的作用以及Kconfig的语法
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<!--[if !supportLineBreakNewLine]-->< ;!--[endif]-->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,该菜单才可见(可配置)。
kconfig string 默认值范围-概述说明以及解释
kconfig string 默认值范围-概述说明以及解释1.引言1.1 概述概述部分:Kconfig是Linux内核配置系统中使用的配置语言,用于定义内核的配置选项和配置依赖关系。
在Kconfig中,有一个string类型的配置选项,用于存储字符串类型的配置信息。
在配置Kconfig string类型时,可以设置默认值来方便用户选择或使用。
本文将围绕Kconfig string类型的默认值进行讨论,主要关注默认值的设置范围。
通过深入探讨Kconfig string类型的默认值范围,可以帮助读者更好地理解如何在实际应用中进行配置选项的设置,从而提高内核配置的灵活性和便利性。
1.2 文章结构本文主要分为三个部分,分别是引言、正文和结论。
在引言部分,将对Kconfig string类型及其默认值进行简要介绍,以及文章的结构和目的进行阐述。
在正文部分,将详细讨论Kconfig string类型的特点和使用方法,重点关注Kconfig中string默认值的设置及其范围。
在结论部分,将对本文进行总结,探讨Kconfig string默认值范围的应用意义,并展望相关领域可能出现的发展趋势。
1.3 目的目的部分旨在指出本文的研究目的和意义。
通过对Kconfig中string 类型的默认值范围进行分析和讨论,旨在帮助读者更好地理解和使用Kconfig配置系统。
同时,本文还旨在探讨如何合理设置和利用Kconfig 中string类型的默认值,以提高软件开发效率和功能性。
通过本文的研究,读者可以更深入地了解Kconfig配置系统的使用和特性,为软件开发提供一定的参考和指导。
2.正文2.1 Kconfig string类型简介在嵌入式系统开发中,Kconfig是Linux内核的配置系统,用于管理内核配置项的选择和设置。
在Kconfig中,有多种类型的配置项,其中包括string类型。
String类型的配置项用于表示字符串值,可以用于配置文件路径、设备名称、配置参数等。
2.6内核编译配置选项简介--介绍make menuconfig中的每个选项含义
BUG报告,切磋与探讨由于作者水平有限,因此不能保证作品内容准确无误,请在阅读中自行鉴别。
如果你发现了作品中的错误,请您来信指出,哪怕是错别字也好,任何提高作品质量的建议我都将虚心接纳。
如果你愿意就作品中的相关内容与我进行进一步切磋与探讨,也欢迎你与我联系。
联系方式:MSN: csfrank122@Code maturity level options代码成熟度选项Prompt for development and/or incomplete code/drivers显示尚在开发中或尚未完成的代码与驱动.除非你是测试人员或者开发者,否则请勿选择General setup常规设置Local version - append to kernel release在内核版本后面加上自定义的版本字符串(小于64字符),可以用"uname -a"命令看到Automatically append version information to the version string自动在版本字符串后面添加版本信息,编译时需要有perl以及git仓库支持Support for paging of anonymous memory (swap)使用交换分区或者交换文件来做为虚拟内存System V IPCSystem V进程间通信(IPC)支持,许多程序需要这个功能.必选,除非你知道自己在做什么IPC NamespacesIPC命名空间支持,不确定可以不选POSIX Message QueuesPOSIX消息队列,这是POSIX IPC中的一部分BSD Process Accounting将进程的统计信息写入文件的用户级系统调用,主要包括进程的创建时间/创建者/内存占用等信息BSD Process Accounting version 3 file format使用新的第三版文件格式,可以包含每个进程的PID和其父进程的PID,但是不兼容老版本的文件格式Export task/process statistics through netlink通过netlink接口向用户空间导出任务/进程的统计信息,与BSD Process Accounting的不同之处在于这些统计信息在整个任务/进程生存期都是可用的Enable per-task delay accounting在统计信息中包含进程等候系统资源(cpu,IO同步,内存交换等)所花费的时间UTS NamespacesUTS名字空间支持,不确定可以不选Auditing support审计支持,某些内核模块(例如SELinux)需要它,只有同时选择其子项才能对系统调用进行审计Enable system-call auditing support支持对系统调用的审计Kernel .config support把内核的配置信息编译进内核中,以后可以通过scripts/extract-ikconfig脚本来提取这些信息Enable access to .config through /proc/config.gz允许通过/proc/config.gz访问内核的配置信息Cpuset support只有含有大量CPU(大于16个)的SMP系统或NUMA(非一致内存访问)系统才需要它Kernel->user space relay support (formerly relayfs)在某些文件系统上(比如debugfs)提供从内核空间向用户空间传递大量数据的接口Initramfs source file(s)initrd已经被initramfs取代,如果你不明白这是什么意思,请保持空白Optimize for size (Look out for broken compilers!)编译时优化内核尺寸(使用"-Os"而不是"-O2"参数编译),有时会产生错误的二进制代码Enable extended accounting over taskstats收集额外的进程统计信息并通过taskstats接口发送到用户空间Configure standard kernel features (for small systems)配置标准的内核特性(为小型系统)Enable 16-bit UID system calls允许对UID系统调用进行过时的16-bit包装Sysctl syscall support不需要重启就能修改内核的某些参数和变量,如果你也选择了支持/proc,将能从/proc/sys存取可以影响内核行为的参数或变量Load all symbols for debugging/kksymoops装载所有的调试符号表信息,仅供调试时选择Include all symbols in kallsyms在kallsyms中包含内核知道的所有符号,内核将会增大300KDo an extra kallsyms pass除非你在kallsyms中发现了bug并需要报告这个bug才打开该选项Support for hot-pluggable devices支持热插拔设备,如usb与pc卡等,Udev也需要它Enable support for printk允许内核向终端打印字符信息,在需要诊断内核为什么不能运行时选择BUG() support显示故障和失败条件(BUG和WARN),禁用它将可能导致隐含的错误被忽略Enable ELF core dumps内存转储支持,可以帮助调试ELF格式的程序Enable full-sized data structures for core在内核中使用全尺寸的数据结构.禁用它将使得某些内核的数据结构减小以节约内存,但是将会降低性能Enable futex support快速用户空间互斥体可以使线程串行化以避免竞态条件,也提高了响应速度.禁用它将导致内核不能正确的运行基于glibc的程序Enable eventpoll support支持事件轮循的系统调用Use full shmem filesystem完全使用shmem来代替ramfs.shmem是基于共享内存的文件系统(可能用到swap),在启用TMPFS后可以挂载为tmpfs供用户空间使用,它比简单的ramfs先进许多Use full SLAB allocator使用SLAB完全取代SLOB进行内存分配,SLAB是一种优秀的内存分配管理器,推荐使用Enable VM event counters for /proc/vmstat允许在/proc/vmstat中包含虚拟内存事件记数器Loadable module support可加载模块支持Enable loadable module support打开可加载模块支持,如果打开它则必须通过"make modules_install"把内核模块安装在/lib/modules/中Module unloading允许卸载已经加载的模块Forced module unloading允许强制卸载正在使用中的模块(比较危险)Module versioning support允许使用其他内核版本的模块(可能会出问题)Source checksum for all modules为所有的模块校验源码,如果你不是自己编写内核模块就不需要它Automatic kernel module loading让内核通过运行modprobe来自动加载所需要的模块,比如可以自动解决模块的依赖关系Block layer块设备层Enable the block layer块设备支持,使用硬盘/USB/SCSI设备者必选Support for Large Block Devices仅在使用大于2TB的块设备时需要Support for tracing block io actions块队列IO跟踪支持,它允许用户查看在一个块设备队列上发生的所有事件,可以通过blktrace程序获得磁盘当前的详细统计数据Support for Large Single Files仅在可能使用大于2TB的文件时需要IO SchedulersIO调度器Anticipatory I/O scheduler假设一个块设备只有一个物理查找磁头(例如一个单独的SATA硬盘),将多个随机的小写入流合并成一个大写入流,用写入延时换取最大的写入吞吐量.适用于大多数环境,特别是写入较多的环境(比如文件服务器)Deadline I/O scheduler使用轮询的调度器,简洁小巧,提供了最小的读取延迟和尚佳的吞吐量,特别适合于读取较多的环境(比如数据库)CFQ I/O scheduler使用QoS策略为所有任务分配等量的带宽,避免进程被饿死并实现了较低的延迟,可以认为是上述两种调度器的折中.适用于有大量进程的多用户系统Default I/O scheduler默认IO调度器Processor type and features中央处理器(CPU)类型及特性Symmetric multi-processing support对称多处理器支持,如果你有多个CPU或者使用的是多核CPU就选上.此时"Enhanced Real Time Clock Support"选项必须开启,"Advanced Power Management"选项必须关闭Subarchitecture Type处理器的子架构,大多数人都应当选择"PC-compatible"Processor family处理器系列,请按照你实际使用的CPU选择Generic x86 support通用x86支持,如果你的CPU能够在上述"Processor family"中找到就别选HPET Timer SupportHPET是替代8254芯片的新一代定时器,i686及以上级别的主板都支持,可以安全的选上Maximum number of CPUs支持的最大CPU数,每增加一个内核将增加8K体积SMT (Hyperthreading) scheduler support支持Intel的超线程(HT)技术Multi-core scheduler support针对多核CPU进行调度策略优化Preemption Model内核抢占模式No Forced Preemption (Server)适合服务器环境的禁止内核抢占Voluntary Kernel Preemption (Desktop)适合普通桌面环境的自愿内核抢占Preemptible Kernel (Low-Latency Desktop)适合运行实时程序的主动内核抢占Preempt The Big Kernel Lock可以抢占大内核锁,应用于实时要求高的场合,不适合服务器环境Machine Check Exception让CPU检测到系统故障时通知内核,以便内核采取相应的措施(如过热关机等)Check for non-fatal errors on AMD Athlon/Duron / Intel Pentium 4每5秒检测一次这些cpu的非致命错误并纠正它们,同时记入日志check for P4 thermal throttling interrupt当P4的cpu过热时显示一条警告消息Enable VM86 support虚拟X86支持,在DOSEMU下运行16-bit程序或XFree86通过BIOS初始化某些显卡的时候才需要Toshiba Laptop supportToshiba笔记本模块支持Dell laptop supportDell笔记本模块支持Enable X86 board specific fixups for reboot修正某些旧x86主板的重起bug,这种主板基本绝种了/dev/cpu/microcode - Intel IA32 CPU microcode support使用不随Linux内核发行的IA32微代码,你必需有IA32微代码二进制文件,仅对Intel的CPU有效/dev/cpu/*/msr - Model-specific register support在多cpu系统中让特权CPU访问x86的MSR寄存器/dev/cpu/*/cpuid - CPU information support能从/dev/cpu/x/cpuid获得CPU的唯一标识符(CPUID)Firmware Drivers固件驱动程序BIOS Enhanced Disk Drive calls determine boot disk有些BIOS支持从某块特定的硬盘启动(如果BIOS不支持则可能无法启动),目前大多数BIOS还不支持BIOS update support for DELL systems via sysfs仅适用于DELL机器Dell Systems Management Base Driver仅适用于DELL机器High Memory Support最高内存支持,总内存小于等于1G的选"off",大于4G的选"64G"Memory split如果你不是绝对清楚自己在做什么,不要改动这个选项Memory model一般选"Flat Memory",其他选项涉及内存热插拔64 bit Memory and IO resources使用64位的内存和IO资源Allocate 3rd-level pagetables from highmem在内存很多(大于4G)的机器上将用户空间的页表放到高位内存区,以节约宝贵的低端内存Math emulation数学协处理器仿真,486DX以上的cpu就不要选它了MTRR (Memory Type Range Register) support打开它可以提升PCI/AGP总线上的显卡2倍以上的速度,并且可以修正某些BIOS错误Boot from EFI supportEFI是一种可代替传统BIOS的技术(目前的Grub/LILO尚不能识别它),但是现在远未普及Enable kernel irq balancing让内核将irq中断平均分配给多个CPU以进行负载均衡,但是要配合irqbanlance守护进程才行Use register arguments使用"-mregparm=3"参数编译内核,将前3个参数以寄存器方式进行参数调用,可以生成更紧凑和高效的代码Enable seccomp to safely compute untrusted bytecode只有嵌入式系统可以不选Timer frequency内核时钟频率,桌面推荐"1000 HZ",服务器推荐"100 HZ"或"250 HZ"kexec system call提供kexec系统调用,可以不必重启而切换到另一个内核kernel crash dumps被kexec启动后产生内核崩溃转储Physical address where the kernel is loaded内核加载的物理地址,除非你知道自己在做什么,否则不要修改.在提供kexec系统调用的情况下可能要修改它Support for hot-pluggable CPUs对热插拔CPU提供支持Compat VDSO support如果Glibc版本大于等于2.3.3就不选,否则就选上Power management options电源管理选项Power Management support电源管理有APM和ACPI两种标准且不能同时使用.即使关闭该选项,X86上运行的Linux也会在空闲时发出HLT指令将CPU进入睡眠状态Legacy Power Management API传统的电源管理API,比如软关机和系统休眠等接口Power Management Debug Support仅供调试使用Driver model /sys/devices/.../power/state files内核帮助文档反对使用该选项,即将被废除ACPI (Advanced Configuration and Power Interface) Support必须运行acpid守护程序ACPI才能起作用.ACPI是为了取代APM而设计的,因此应该尽量使用ACPI而不是APM AC Adapter如果你的系统可以在AC和电池之间转换就可以选Battery通过/proc/acpi/battery向用户提供电池状态信息,用电池的笔记本可以选Button守护程序捕获Power,Sleep,Lid按钮事件,并根据/proc/acpi/event做相应的动作,软件控制的poweroff需要它Video仅对集成在主板上的显卡提供ACPI2.0支持,且不是所有集成显卡都支持Generic Hotkey统一的热键驱动,建议不选Fan允许通过用户层的程序来对系统风扇进行控制(开,关,查询状态),支持它的硬件并不多Dock支持由ACPI控制的集线器(docking stations)Processor让ACPI处理空闲状态,并使用ACPI C2和C3处理器状态在空闲时节省电能,同时它还被cpufreq的"Performance-state drivers"选项所依赖Thermal Zone系统温度过高时可以利用ACPI thermal zone及时调整工作状态以避免你的CPU被烧毁ASUS/Medion Laptop ExtrasASUS笔记本专用,以提供额外按钮的支持,用户可以通过/proc/acpi/asus来打开或者关闭LCD的背光/调整亮度/定制LED的闪烁指示等功能IBM ThinkPad Laptop ExtrasIBM ThinkPad专用Toshiba Laptop ExtrasToshiba笔记本专用Disable ACPI for systems before Jan 1st this year输入四位数的年份,在该年的1月1日前不使用ACPI的功能("0"表示一直使用)Debug Statements详细的ACPI调试信息,不搞开发就别选Power Management Timer Support这个Timer在所有ACPI兼容的平台上都可用,且不会受PM功能的影响,建议总是启用它.如果你在kernel log中看到了'many lost ticks'那就必须启用它ACPI0004,PNP0A05 and PNP0A06 Container Driver支持内存和CPU的热插拔Smart Battery System支持依赖于I2C的"智能电池".这种电池非常老旧且罕见,还与当前的ACPI标准兼容性差APM (Advanced Power Management) BIOS SupportAPM在SMP机器上必须关闭,一般来说当前的笔记本都支持ACPI,所以应尽量关闭该该选项Ignore USER SUSPEND只有NEC Versa M系列的笔记本才需要选择这一项Enable PM at boot time系统启动时即启用APM,选上这个选项能让系统自动的进行电源管理,但常常导致启动时死机Make CPU Idle calls when idle系统空闲时调用空闲指令(halt),只有老式的CPU才需要选它,且对于SMP系统必须关闭Enable console blanking using APM在屏幕空白时关闭LCD背光,事实上对所有的笔记本都无效RTC stores time in GMT将硬件时钟应该设为格林威治时间,否则视为本地时间.建议你使用GMT,这样你无须为时区的改变而担心Allow interrupts during APM BIOS calls允许APM的BIOS调用时中断,IBM Thinkpad的一些新机器需要这项.如果休眠时挂机(包括睡下去就醒不来),可以试试它Use real mode APM BIOS call to power off此驱动为某些有Bug的BIOS准备,如果你的系统不能正常关机或关机时崩溃,可以试试它CPU Frequency scaling允许动态改变CPU主频,达到省电和降温的目的,必须同时启用下面的一种governor才行Enable CPUfreq debugging允许对CPUfreq进行调试CPU frequency translation statistics通过sysfs文件系统输出CPU频率变换的统计信息CPU frequency translation statistics details输出详细的CPU频率变换统计信息Default CPUFreq governor默认的CPU频率调节器'performance' governor'性能'优先,静态的将频率设置为cpu支持的最高频率'powersave' governor'节能'优先,静态的将频率设置为cpu支持的最低频率'userspace' governor for userspace frequency scaling既允许手动调整cpu频率,也允许用户空间的程序动态的调整cpu频率(需要额外的调频软件,比如cpufreqd)'ondemand' cpufreq policy governor'立即响应',周期性的考察CPU负载并自动的动态调整cpu频率(不需要额外的调频软件),适合台式机'conservative' cpufreq governor'保守',和'ondemand'相似,但是频率的升降是渐变式的(幅度不会很大),更适合用于笔记本/PDA/AMD64环境ACPI Processor P-States driver将ACPI2.0的处理器性能状态报告给CPUFreq processor drivers以决定如何调整频率,该选项依赖于ACPI->Processor{省略的部分请按照自己实际使用的CPU选择}/proc/acpi/processor/../performance interface内核帮助文档反对使用该选项,即将被废除Relaxed speedstep capability checks放松对系统的speedstep兼容性检查,仅在某些老旧的Intel系统上需要打开Bus options (PCI, PCMCIA, EISA, MCA, ISA)总线选项PCI supportPCI支持,如果使用了PCI或PCI Express设备就必选PCI access modePCI访问模式,强列建议选"Any"(系统将优先使用"MMConfig",然后使用"BIOS",最后使用"Direct"检测PCI设备) PCI Express supportPCI Express支持(目前主要用于显卡和千兆网卡)PCI Express Hotplug driver如果你的主板和设备都支持PCI Express热插拔就可以选上Use polling mechanism for hot-plug events对热插拔事件采用轮询机制,仅用于测试目的Root Port Advanced Error Reporting support由PCI Express AER驱动程序处理发送到Root Port的错误信息Message Signaled Interrupts (MSI and MSI-X)PCI Express支持两类中断:INTx使用传统的IRQ中断,可以与现行的PCI总线的驱动程序和操作系统兼容;MSI则是通过inbound Memory Write触发和发送中断,更适合多CPU系统.可以使用"pci=nomsi"内核引导参数关闭MSI PCI Debugging将PCI调试信息输出到系统日志里Interrupts on hypertransport devices允许本地的hypertransport设备使用中断ISA support现在基本上没有ISA的设备了,如果你有就选吧MCA support微通道总线,老旧的IBM的台式机和笔记本上可能会有这种总线NatSemi SCx200 support在使用AMD Geode处理器的机器上才可能有PCCARD (PCMCIA/CardBus) supportPCMCIA卡(主要用于笔记本)支持Enable PCCARD debugging仅供调试16-bit PCMCIA support一些老的PCMCIA卡使用16位的CardBus32-bit CardBus support当前的PCMCIA卡基本上都是32位的CardBusCardBus yenta-compatible bridge support使用PCMCIA卡的基本上都需要选择这一项,子项请按照自己实际使用的PCMCIA卡选择{省略的部分请按照自己实际使用的PCMCIA卡选择}PCI Hotplug SupportPCI热插拔支持,如果你有这样的设备就到子项中去选吧Executable file formats可执行文件格式Kernel support for ELF binariesELF是开放平台下最常用的二进制文件格式,支持动态连接,支持不同的硬件平台.除非你知道自己在做什么,否则必选Kernel support for a.out and ECOFF binaries早期UNIX系统的可执行文件格式,目前已经被ELF格式取代Kernel support for MISC binaries允许插入二进制的封装层到内核中,使用Java,.NET,Python,Lisp等语言编写的程序时需要它Networking网络Networking options网络选项Network packet debugging在调试不合格的包时加上额外的附加信息,但在遇到Dos攻击时你可能会被日志淹没Packet socket这种Socket可以让应用程序(比如tcpdump,iptables)直接与网络设备通讯,而不通过内核中的其它中介协议Packet socket: mmapped IO让Packet socket驱动程序使用IO映射机制以使连接速度更快Unix domain sockets一种仅运行于本机上的效率高于TCP/IP的Socket,简称Unix socket.许多程序都使用它在操作系统内部进行进程间通信(IPC),比如X Window和syslogTransformation user configuration interface为IPsec(可在ip层加密)之类的工具提供XFRM用户配置接口支持Transformation sub policy supportXFRM子策略支持,仅供开发者使用PF_KEY sockets用于可信任的密钥管理程序和操作系统内核内部的密钥管理进行通信,IPsec依赖于它TCP/IP networkingTCP/IP协议当然要选IP: multicasting群组广播,似乎与网格计算有关,仅在使用MBONE的时候才需要IP: advanced router高级路由,如果想做一个路由器就选吧IP: policy routing策略路由IP: equal cost multipath用于路由的基于目的地址的负载均衡IP: verbose route monitoring显示冗余的路由监控信息IP: kernel level autoconfiguration在内核启动时自动配置ip地址/路由表等,需要从网络启动的无盘工作站才需要这个东西IP: tunnelingIP隧道,将一个IP报文封装在另一个IP报文内的技术IP: GRE tunnels over IP基于IP的GRE(通用路由封装)隧道IP: multicast routing多重传播路由IP: ARP daemon support这东西尚处于试验阶段就已经被废弃了IP: TCP syncookie support抵抗SYN flood攻击的好东西,要启用它必须同时启用/proc文件系统和"Sysctl support",然后在系统启动并挂载了/proc之后执行"echo 1 >/proc/sys/net/ipv4/tcp_syncookies"命令IP: AH transformationIPsec验证头(AH)实现了数据发送方的验证处理,可确保数据既对于未经验证的站点不可用也不能在路由过程中更改IP: ESP transformationIPsec封闭安全负载(ESP)实现了发送方的验证处理和数据加密处理,用以确保数据不会被拦截/查看或复制IP: IPComp transformationIPComp(IP静荷载压缩协议),用于支持IPsecIP: IPsec transport modeIPsec传输模式,常用于对等通信,用以提供内网安全.数据包经过了加密但IP头没有加密,因此任何标准设备或软件都可查看和使用IP头IP: IPsec tunnel modeIPsec隧道模式,用于提供外网安全(包括虚拟专用网络).整个数据包(数据头和负载)都已经过加密处理且分配有新的ESP头/IP头和验证尾,从而能够隐藏受保护站点的拓扑结构IP: IPsec BEET modeIPsec BEET模式INET: socket monitoring interfacesocket监视接口,一些Linux本地工具(如:包含ss的iproute2)需要使用它TCP: advanced congestion control高级拥塞控制,如果没有特殊需求(比如无线网络)就别选了,内核会自动将默认的拥塞控制设为"Cubic"并将"Reno"作为候补IP: Virtual Server ConfigurationIP虚拟服务器允许你基于多台物理机器构建一台高性能的虚拟服务器,不玩集群就别选了The IPv6 protocol你要是需要IPv6就选吧NetLabel subsystem supportNetLabel子系统为诸如CIPSO与RIPSO之类能够在分组信息上添加标签的协议提供支持,如果你看不懂就别选了Security Marking对网络包进行安全标记,类似于nfmark,但主要是为安全目的而设计,如果你不明白的话就别选Network packet filtering (replaces ipchains)Netfilter可以对数据包进行过滤和修改,可以作为防火墙("packet filter"或"proxy-based")或网关(NAT)或代理(proxy)或网桥使用.选中此选项后必须将"Fast switching"关闭,否则将前功尽弃Network packet filtering debugging仅供开发者调试Netfilter使用Bridged IP/ARP packets filtering如果你希望使用一个针对桥接的防火墙就打开它Core Netfilter Configuration核心Netfilter配置(当包流过Chain时如果match某个规则那么将由该规则的target来处理,否则将由同一个Chain 中的下一个规则进行匹配,若不match所有规则那么最终将由该Chain的policy进行处理)Netfilter netlink interface允许Netfilter在与用户空间通信时使用新的netlink接口.netlink Socket是Linux用户态与内核态交流的主要方法之一,且越来越被重视.Netfilter NFQUEUE over NFNETLINK interface通过NFNETLINK接口对包进行排队Netfilter LOG over NFNETLINK interface通过NFNETLINK接口对包记录.该选项废弃了ipt_ULOG和ebg_ulog机制,并打算在将来废弃基于syslog的ipt_LOG和ip6t_LOG模块Layer 3 Independent Connection tracking独立于第三层的链接跟踪,通过广义化的ip_conntrack支持其它非IP协议的第三层协议Netfilter Xtables support如果你打算使用ip_tables,ip6_tables,arp_tables之一就必须选上"CLASSIFY" target support允许为包设置优先级,一些排队规则(atm,cbq,dsmark,pfifo_fast,htb,prio)需要使用它"CONNMARK" target support类似于"MARK",但影响的是连接标记的值"DSCP" target support允许对ip包头部的DSCP(Differentiated Services Codepoint)字段进行修改,该字段常用于Qos"MARK" target support允许对包进行标记(通常配合ip命令使用),这样就可以改变路由策略或者被其它子系统用来改变其行为"NFQUEUE" target Support用于替代老旧的QUEUE(iptables内建的target之一),因为NFQUEUE能支持最多65535个队列,而QUEUE只能支持一个"NOTRACK" target support允许规则指定哪些包不进入链接跟踪/NAT子系统"SECMARK" target support允许对包进行安全标记,用于安全子系统"CONNSECMARK" target support针对链接进行安全标记,同时还会将连接上的标记还原到包上(如果链接中的包尚未进行安全标记),通常与SECMARK target联合使用"comment" match support允许你在iptables规则集中加入注释"connbytes" per-connection counter match support允许针对单个连接内部每个方向(进/出)匹配已经传送的字节数/包数"connmark" connection mark match support允许针对每个会话匹配先前由"CONNMARK"设置的标记值"conntrack" connection tracking match support连接跟踪匹配,是"state"的超集,它允许额外的链接跟踪信息,在需要设置一些复杂的规则(比如网关)时很有用"DCCP" protocol match supportDCCP是打算取代UDP的新传输协议,它在UDP的基础上增加了流控和拥塞控制机制,面向实时业务"DSCP" match support允许对IP包头的DSCP字段进行匹配"ESP" match support允许对IPSec包中的ESP头进行匹配,使用IPsec的话就选上吧"helper" match support加载特定协议的连接跟踪辅助模块,由该模块过滤所跟踪的连接类型的包,比如ip_conntrack_ftp模块"length" match support允许对包的长度进行匹配"limit" match support允许根据包的进出速率进行规则匹配,常和"LOG target"配合使用以抵抗某些Dos攻击"mac" address match support允许根据以太网的MAC进行匹配,常用于无线网络环境"mark" match support允许对先前由"MARK"标记的特定标记值进行匹配IPsec "policy" match support使用IPsec就选上吧Multiple port match support允许对TCP或UDP包同时匹配多个端口(通常情况下只能匹配一个端口)"physdev" match support允许对到达的或将要离开的物理桥端口进行匹配"pkttype" packet type match support允许对封包目的地址类别(广播/群播/直播)进行匹配"quota" match support允许对总字节数的限额值进行匹配"realm" match support允许对iptables中的路由子系统中的realm值进行匹配"sctp" protocol match support流控制传输协议(SCTP),十年以后也许能够普及的东西"state" match support这是对包进行分类的有力工具,它允许利用连接跟踪信息对连接中处于特定状态的包进行匹配"statistic" match support允许根据一个给定的百分率对包进行周期性的或随机性的匹配"string" match support允许根据包所承载的数据中包含的特定字符串进行匹配"tcpmss" match support允许根据TCP SYN包头中的MSS(最大分段长度)选项的值进行匹配IP: Netfilter Configuration针对IPv4的Netfilter配置Connection tracking (required for masq/NAT)链接跟踪.可用于报文伪装或地址转换,也可用于增强包过滤能力Connection tracking flow accounting允许针对每个连接记录已经传送的字节/包数,常用于connbytes matchConnection mark tracking support允许对连接进行标记,与针对单独的包进行标记的不同之处在于它是针对连接流的.CONNMARK target和connmark match需要它的支持Connection tracking security mark support允许对连接进行安全标记,通常这些标记包(SECMARK)复制到其所属连接(CONNSECMARK),再从连接复制到其关联的包(SECMARK)Connection tracking events连接跟踪事件支持.如果启用这个选项,连接跟踪代码将提供一个notifier链,它可以被其它内核代码用来获知连接跟踪状态的改变Connection tracking netlink interface支持基于netlink的用户空间接口SCTP protocol connection tracking supportSCTP是IP网面向多媒体通信的新一代的流控制传输协议FTP protocol supportFTP协议IRC protocol supportIRC协议是一种用来实时聊天协议,用过mIRC的人应当不陌生NetBIOS name service protocol supportNetBIOS名字服务协议TFTP protocol supportTFTP是基于UDP的比FTP简单的文件传输协议Amanda backup protocol supportAmanda备份协议PPTP protocol support点对点隧道协议(PPTP)是一种支持多协议虚拟专用网络的网络技术,ADSL用户对它应该很熟悉H.323 protocol supportITU-T提出的用于IP电话的协议SIP protocol supportIETE提出的用于IP电话的协议IP Userspace queueing via NETLINK已废弃IP tables support (required for filtering/masq/NAT)要用iptables就肯定要选上IP range match support允许对ip地址的范围进行匹配TOS match support允许对ip包头的TOS(Type Of Service)字段进行匹配recent match support可以创建一个或多个刚刚使用过的ip地址列表,然后根据这些列表进行匹配ECN match support允许对TCP/IP包头的ECN(Explicit Congestion Notification)字段进行匹配.ECN是一种显式拥塞通知技术,它不但要求路由器支持而且要求端到端主机的支持,其基本思想是当路由器发生早期拥塞时不是丢弃包而是尽量对包进行标记,接收方接到带有ECN提示的包时,通知发送方网络即将发生拥塞,也就是它通过对包的标记提示TCP源即将发生拥塞,从而引发拥塞避免算法AH match support允许对IPSec包头的AH字段进行匹配TTL match support允许对ip包头的TTL(生存期)字段进行匹配Owner match support允许对本地生成的包按照其宿主(user,group,process,session)进行匹配address type match support。
linuxkconfig详解及语法
linuxkconfig详解及语法Linux 入门基础 Linux系统安装GNOME图形界面基...默认值显示给用户,并可以让用户进行修改。
默认值的依赖关系可以用 "if" 添加。
(可选项)依赖关系:"depends on"/"requires" <expr> 为一菜单选项定义依赖关系。
如果定义了多个依赖关系,它们之间用 '&&' 间隔。
依赖关系也可以应用到该菜单中所有的其它选项(同样接受if表达式),所以下面的两个例子是等价的:bool "foo" if BAR default y if BARdepends on BAR bool "foo" default y- 反向依赖关系:"select" <symbol> ["if" <expr>]尽管普通的依赖关系可以降低一选项的上限,反向依赖能将这一限制降的更低。
当前菜单选项的值是symbol的最小值。
如果symbol被选择了多次,上限就是其中的最大值。
反向依赖只能用在boolean或tristate选项上。
- 数据范围:"range" <symbol><symbol> ["if" <expr>]为int和hex类型的选项设置可以接受输入值范围。
用户只能输入大于等于第一个symbol,小于等于第二个 symbol的值。
- 帮助信息: "help" or "---help---" 定义一帮助信息。
帮助信息的结束就由缩进的水平决定的,这也就意味着信息是在第一个比帮助信息开始行的缩进小的行结束。
"---help---" 和"help" 在实现的作用上没有区别,"---help---" 有助于将文件中的配置逻辑与给开发人员的提示分开。
Kconfig配置文件编码规则
Kconfig配置⽂件编码规则 最早接触到Kconfig是在u-boot的移植过程中。
所今天来好好学习⼀下如何编写⼀个符合Kconffigde 配置⽂件。
Kbuild或者是Kconfig的中⽂翻译意思是内核配置/构建系统。
他最早出⾃哪⾥我不太清楚,但是Linux内核上的应⽤渐渐的增加了他的曝光度也让我见识到了。
他的基本思路就是编辑⼀些配置字段,其中处理了各个配置之间的依赖和互斥等逻辑从⽽为⼀个复杂庞⼤的软件系统源码移植裁剪提供了优秀的配置⼯具,主要分为⽆界⾯版本和有界⾯的。
使⽤⽅式⽆界⾯的现在常常被⽤来使⽤提供好的配置⽂件⽣成符合源码依赖关系的配置⽂件,⽽图形配置界⾯才是常常使⽤来进⾏配置裁剪源码系统的⼯具。
图形化界⾯是靠读取指定的Kconfig⽂件进⾏显⽰渲染和配置并最后⽣成对应的配置⽂件,所以这⾥来学习记录⼀下Kconfig⽂件的编码规则。
configKconfig⽤config 定义⼀个配置项编码形式如下:config XXXtypeselect xxxdepends on xxx || xxxdefaultrangeprompthelpXXX为这个配置名称,在整个配置系统中唯⼀,如果在多个地⽅定义这个配置项,实际上配置⼯具会⾃动统⼀不同地⽅的同名配置的值为同⼀个,所以最好避免这类使⽤⽅式。
可以说config定义的配置项时整个kbuild的⼀个最⼩配置单元。
这⾥配置项⽬地下的具体内容描述如下:typebool只有y和n,其后可以跟输⼊提⽰,如果没有则图形配置界⾯上将不会显⽰出当前配置项。
int整形数,输⼊提⽰同上bool;hex⼗六进制数,输⼊提⽰同上bool;和int的区别就是输⼊数字时⽣成的内容会⾃动添加0x在前⾯string字符串,输⼊提⽰同上bool;tristateLinux源码构建特有的配置类型,输⼊提⽰同上bool;他的可取值⽐bool多了⼀个m,但是有时候不⼀定⽀持m值所以这个类型就和bool相同了。
kconfig 语法
kconfig 语法kconfig 是一种基于文本文件的配置语法,用于构建 Linux 内核和许多其他项目的配置文件。
以下是 kconfig 的语法:1. 指令kconfig 中的指令以 CONFIG_ 开头。
例如,CONFIG_EXAMPLE 是一个指令。
2. 值指令可以有不同的值,可以是布尔值(yes/no)、字符串、数字等等。
例如,CONFIG_EXAMPLE="hello world" 是一个指令,值为字符串 "hello world"。
3. 块有些指令可能会有多个值,这些值可以按块(block)分组。
例如,menu 块中可以包含多个配置选项,在块中的每个选项之前必须添加一个 config 块:menu "Example menu"config EXAMPLE_OPTION1bool "Option 1"default yconfig EXAMPLE_OPTION2bool "Option 2"default nendmenu4. 依赖关系有些选项可能依赖其他选项或其他条件。
例如,如果 A 选项被启用,那么 B 选项才会生效。
kconfig 可以通过 depends on 指令来表示这种依赖关系:config Abool "Option A"default yconfig Bbool "Option B"default ndepends on A这意味着,如果 A 选项被启用(即值为 yes),那么 B 选项也将被启用。
这是 kconfig 的基本语法,它可以让用户方便地配置软件,特别是 Linux 内核。
kconfig语法详解
kconfig语法详解Kconfig是一种用于配置Linux内核构建的配置语言。
通过使用Kconfig,开发者可以定制Linux内核的构建选项,编译所需的功能和驱动程序,并定制适合自己需求的内核映像。
本文将详细介绍Kconfig的语法和用法。
1. 声明配置选项在Kconfig中,配置选项由一系列变量和属性组成。
首先,我们使用"config"关键字声明一个配置选项的名称:config EXAMPLE_OPTION然后,我们可以使用属性来描述这个配置选项。
例如,我们可以为这个选项指定一个字符串类型的默认值:default "example value"2. 依赖关系Kconfig允许配置选项之间建立依赖关系。
通过使用"depends on"语句,我们可以指定其他选项作为当前选项的依赖项。
例如,我们可以指定一个选项仅在另一个选项被选中时才可用:depends on ANOTHER_OPTION或者我们可以指定一个选项在另一个选项未被选中时才可用:depends on !ANOTHER_OPTION3. 条件语句Kconfig还支持使用条件语句来根据特定条件来选择不同的配置选项。
使用"if"语句,我们可以根据一个或多个条件来决定一个选项是否可用:if CONDITIONconfig OPTION_A...例如,我们可以指定一个选项仅在某个架构上可用:if ARCH_X86config X86_OPTION...4. 菜单Kconfig中的配置选项通常以菜单的形式组织起来,以便更好地对选项进行分类和查看。
使用"menu"关键字,我们可以创建一个菜单:menu "Example Menu"config OPTION_1...config OPTION_2...endmenu菜单可以嵌套,允许我们创建多级菜单结构。
Makefile&&Kconfig
有了gcc 编译器下面我们就可以来编译我们的内核了,内核的下载地址是从这里来下载我们所想要的内核,我们现在用的是linux-2.6.18 内核。
Linux2.6内核新特性Linux内核吸收了一些新技术,在性能、可量测性、支持和可用性方面不断提高。
这些改进多数是添加支持更多的体系结构、处理器、总线、接口和设备;也有一些标准化内部接口,简化扩展添加新设备和子系统的支持。
与Linux2.4版本相比,Linux 2.6 版本具有许多新特性,内核也有很大修改。
其中一些修改只跟内核或者驱动开者有关,另外一些修改则会影响到系统启动系统管理和应用程序开发。
Linux 2.6 内核重要的新特性如下:(1) 新的调度器: O(1)(2) 内核抢占(3) 新的线程模型(4) 文件系统:access controls , ext2/ext3(5) 声音:ALSA(6) 总线:IDE,SCSI(7) 电源管理(8) 网络(9) 用户界面层(10) 统一的设备模型在 Linux 上我们可以用以下命令来下载内核。
[root@binnary ~]#wget –c/pub/linux/kernel/v2.6/linux-2.6.18.tar.bz2 [root@binnary ~]#wget –c/pub/linux/kernel/v2.6/linux-2.6.18.tar.bz2.sign 新版本的内核分分两种:一种是完整源码版本(我们直接解压就可以使用)另一种是patch文件[root@binnary ~]#cd linux-2.6.18[root@binnary linux-2.6.18]#bzcat ../patch-2.6.14.bz2 | patch –p1patch命令可以根据补丁文件内容修订文件内容修改指定目录下的文件。
patch –p<n> < diff_filecat diff_file | patch –p<n>bzcat diff_file.bz2 | patch –p<n>zcat diff_file.gz | patch –p<n>其中,<n> 代表按照patch文件的路径忽略的目录级数,每个 ” / ” 代表一级。
linux内核配置make_menuconfig菜单详解
linux内核配置make menuconfig菜单详解前言一、配置系统的基本结构Linux内核的配置系统由三个部分组成,分别是:1、Makefile:分布在 Linux 内核源代码根目录及各层目录中,定义Linux 内核的编译规则;2、配置文件(config.in(2.4内核,2.6内核)):给用户提供配置选择的功能;3、配置工具:包括配置命令解释器(对配置脚本中使用的配置命令进行解释)和配置用户界面(提供基于字符界面、基于 Ncurses 图形界面以及基于 Xwindows 图形界面的用户配置界面,各自对应于 Make config、Make menuconfig 和 make xconfig)。
这些配置工具都是使用脚本语言,如 Tcl/TK、Perl 编写的(也包含一些用 C 编写的代码)。
本文并不是对配置系统本身进行分析,而是介绍如何使用配置系统。
所以,除非是配置系统的维护者,一般的内核开发者无须了解它们的原理,只需要知道如何编写 Makefile 和配置文件就可以。
二、makefile menuconfig过程讲解当我们在执行make menuconfig这个命令时,系统到底帮我们做了哪些工作呢?这里面一共涉及到了一下几个文件我们来一一讲解Linux内核根目录下的scripts文件夹arch/$ARCH/Kconfig文件、各层目录下的Kconfig文件Linux内核根目录下的makefile文件、各层目录下的makefile文件Linux内核根目录下的的.config文件、arm/$ARCH/下的config文件Linux内核根目录下的 include/generated/autoconf.h文件1)scripts文件夹存放的是跟make menuconfig配置界面的图形绘制相关的文件,我们作为使用者无需关心这个文件夹的内容2)当我们执行make menuconfig命令出现上述蓝色配置界面以前,系统帮我们做了以下工作:首先系统会读取arch/$ARCH/目录下的Kconfig文件生成整个配置界面选项(Kconfig是整个linux配置机制的核心),那么ARCH环境变量的值等于多少呢?它是由linux内核根目录下的makefile文件决定的,在makefile下有此环境变量的定义:或者通过 make ARCH=arm menuconfig命令来生成配置界面,默认生成的界面是所有参数都是没有值的比如教务处进行考试,考试科数可能有外语、语文、数学等科,这里相当于我们选择了arm科可进行考试,系统就会读取arm/arm/kconfig文件生成配置选项(选择了arm科的卷子),系统还提供了x86科、milps科等10几门功课的考试题3)假设教务处比较“仁慈”,为了怕某些同学做不错试题,还给我们准备了一份参考答案(默认配置选项),存放在arch/$ARCH/configs下,对于arm科来说就是arch/arm/configs 文件夹:此文件夹中有许多选项,系统会读取哪个呢?内核默认会读取linux内核根目录下.config文件作为内核的默认选项(试题的参考答案),我们一般会根据开发板的类型从中选取一个与我们开发板最接近的系列到Linux内核根目录下(选择一个最接近的参考答案)#cp arch/arm/configs/s3c2410_defconfig .config4).config假设教务处留了一个心眼,他提供的参考答案并不完全正确(.config 文件与我们的板子并不是完全匹配),这时我们可以选择直接修改.config文件然后执行make menuconfig命令读取新的选项但是一般我们不采取这个方案,我们选择在配置界面中通过空格、esc、回车选择某些选项选中或者不选中,最后保存退出的时候,Linux内核会把新的选项(正确的参考答案)更新到.config中,此时我们可以把.config重命名为其它文件保存起来(当你执行make distclean时系统会把.config文件删除),以后我们再配置内核时就不需要再去arch/arm/configs下考取相应的文件了,省去了重新配置的麻烦,直接将保存的.config文件复制为.config即可.5)经过以上两步,我们可以正确的读取、配置我们需要的界面了那么他们如何跟makefile文件建立编译关系呢?当你保存make menuconfig选项时,系统会除了会自动更新.config外,还会将所有的选项以宏的形式保存在Linux内核根目录下的include/generated/autoconf.h文件下内核中的源代码就都会包含以上.h文件,跟宏的定义情况进行条件编译。
- 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。