http://www.jinbuguo.com/kernel/longterm-3_10-options.html

Linux-3.10-x86_64 内核配置选项简介

作者:金步国


版权声明

本文作者是一位开源理念的坚定支持者,所以本文虽然不是软件,但是遵照开源的精神发布。

  • 无担保:本文作者不保证作品内容准确无误,亦不承担任何由于使用此文档所导致的损失。
  • 自由使用:任何人都可以自由的阅读/链接/打印此文档,无需任何附加条件。
  • 名誉权:任何人都可以自由的转载/引用/再创作此文档,但必须保留作者署名并注明出处。

其他作品

本文作者十分愿意与他人分享劳动成果,如果你对我的其他翻译作品或者技术文章有兴趣,可以在如下位置查看现有的作品集:

  • 金步国作品集 [ http://www.jinbuguo.com/ ]

联系方式

由于作者水平有限,因此不能保证作品内容准确无误。如果你发现了作品中的错误(哪怕是错别字也好),请来信指出,任何提高作品质量的建议我都将虚心接纳。

  • Email(QQ):70171448在QQ邮箱

Last Update: 2015-3-11

Gentoo Linux
Gentoo内核(gentoo-sources)特有的选项

Gentoo Linux support
CONFIG_GENTOO_LINUX
选"Y"后,将会自动选中那些在Gentoo环境中必须开启的内核选项,以避免用户遗漏某些必要的选项,减轻一些用户配置内核的难度.建议选"Y".
Linux dynamic and persistent device naming (userspace devfs) support
CONFIG_GENTOO_LINUX_UDEV
目前此项的作用仅是开启CONFIG_TMPFS和CONFIG_DEVTMPFS及其所依赖的选项.CONFIG_TMPFS是为了在"/dev/shm","/run","/sys/fs/cgroup"三个目录中挂载tmpfs文件系统,CONFIG_DEVTMPFS是为了在"/dev"目录挂载devtmpfs文件系统.建议选"Y".
Support for init systems, system and service managers
"init"系统(系统与服务管理器)."init"是内核启动的第一个用户空间程序(PID=1),也是所有用户态进程的"大总管"([提示]所有内核态进程的大总管是PID=2的[kthreadd]).
OpenRC, runit and other script based systems and managers
CONFIG_GENTOO_LINUX_INIT_SCRIPT
OpenRC是Gentoo传统的"init"系统,使用基于SysVinit的传统启动脚本技术.选"Y"后,所有OpenRC所必需的内核选项(目前仅有CONFIG_BINFMT_SCRIPT)都会被自动选中.不确定的选"Y".
systemd
CONFIG_GENTOO_LINUX_INIT_SYSTEMD
尽管倍受争议,但是systemd确实是目前风头最劲的"init"系统,大有在Linux世界一统江湖的霸气和潜力.仅在你打算从OpenRC迁移到systemd时选"Y".选"Y"后,内核中所有被systemd依赖的选项都将被自动选中,包括systemd建议的(而非必须的)选项,总计约20项.systemd官方的README文件也列出了必须/推荐/可选的内核选项.


64-bit kernel
CONFIG_64BIT
编译64位内核.本文仅讲述x86_64(AMD64)平台的内核编译,所以这个是必选项.

General setup
常规设置

Cross-compiler tool prefix
CONFIG_CROSS_COMPILE
交叉编译工具前缀(比如"arm-linux-"相当于使用"make CROSS_COMPILE=arm-linux-"进行编译).除非你想配置后默认自动进行交叉编译,否则不要使用此选项.
Local version - append to kernel release
CONFIG_LOCALVERSION
在内核版本后面加上自定义的版本字符串(最大64字符),可以用"uname -a"命令看到
Automatically append version information to the version string
CONFIG_LOCALVERSION_AUTO
自动在版本字符串(CONFIG_LOCALVERSION)后面添加版本信息(类似"-gxxxxxxxx"格式),需要有perl以及git仓库支持
Kernel compression mode
内核镜像的压缩格式,可选Gzip/Bzip2/LZMA/XZ/LZO格式之一,推荐使用XZ格式.你的系统中需要有相应的压缩工具.
Default hostname
CONFIG_DEFAULT_HOSTNAME
设置默认主机名,默认值是"(none)".用户可以随后使用系统调用sethostname()来修改主机名.
Support for paging of anonymous memory (swap)
CONFIG_SWAP
使用交换分区或者交换文件来做为虚拟内存
System V IPC
CONFIG_SYSVIPC
System V 进程间通信(IPC)支持,用于进程间同步和交换数据,许多程序需要这个功能.选"Y",除非你确实知道自己在做什么
POSIX Message Queues
CONFIG_POSIX_MQUEUE
POSIX消息队列是POSIX IPC的一部分,如果你想编译和运行那些使用"mq_*"系统调用的程序(比如为Solaris开发的程序),就必须开启此选项.POSIX消息队列可以作为"mqueue"文件系统挂载以方便用户对队列进行操作.不确定的选"Y".
open by fhandle syscalls
CONFIG_FHANDLE
用户程序可以使用句柄(而非文件名)来追踪文件(使用open_by_handle_at(2)/name_to_handle_at(2)系统调用),即使某文件被重命名,用户程序依然可定位那个文件.此特性有助于实现用户空间文件服务器(userspace file server).建议选"Y",因为systemd和udev依赖于它.
Auditing support
CONFIG_AUDIT
内核审计(跟踪每个进程的活动情况)支持,某些安全相关的内核子系统(例如SELinux)需要它.但是它会与systemd冲突,所以在使用systemd的系统上必须关闭.
Enable system-call auditing support
CONFIG_AUDITSYSCALL
对系统调用进行审计.既可独立使用,也可被其他内核子系统(例如SELinux)使用.
Make audit loginuid immutable
CONFIG_AUDIT_LOGINUID_IMMUTABLE
审计时使用固定的loginuid.在使用systemd之类的系统上应该开启(login服务由init进程负责重启),在使用SysVinit或Upstart之类的系统上应该关闭(login服务由系统管理员手动重启).OpenRC就是一个基于SysVinit的系统.
IRQ subsystem
IRQ(中断请求)子系统
Expose hardware/virtual IRQ mapping via debugfs
CONFIG_IRQ_DOMAIN_DEBUG
通过debugfs中的irq_domain_mapping文件向用户显示硬件IRQ号/Linux IRQ号之间的对应关系.仅用于开发调试.
Support sparse irq numbering
CONFIG_SPARSE_IRQ
稀疏IRQ号支持.它允许在小型设备上(例如嵌入式设备)定义一个很高的CONFIG_NR_CPUS值,但仍然不希望占用太多内核"memory footprint"(一段可以被操作或被管理的内存区域)的场合.稀疏IRQ也更适合NUMA平台,因为它以一种对NUMA更友好的方式分发中断描述符.不确定的选"N".
Timers subsystem
Linux内核时钟子系统
Timer tick handling
内核时钟滴答处理程序,更多信息可以参考内核源码树下的"Documentation/timers/NO_HZ.txt"文件
Periodic timer ticks (constant rate, no dynticks)
CONFIG_HZ_PERIODIC
无论CPU是否需要,都强制按照固定频率不断触发时钟中断.这是最耗电的方式,不推荐使用
Idle dynticks system (tickless idle)
CONFIG_NO_HZ_IDLE
CPU在空闲状态时不产生不必要的时钟中断,以使处理器能够在较低能耗状态下运行以节约电力,适合于大多数场合
Full dynticks system (tickless)
CONFIG_NO_HZ_FULL
完全无滴嗒:即使CPU在忙碌状态也尽可能关闭所有时钟中断,适用于CPU在同一时间仅运行一个任务,或者用户空间程序极少与内核交互的场合.即使开启此选项,也需要额外设置"nohz_full=?"内核命令行参数才能真正生效.
Full dynticks system on all CPUs by default
CONFIG_NO_HZ_FULL_ALL
即使没有设置"nohz_full"引导参数,也默认对所有CPU(boot CPU 除外)开启完全无滴答特性.
Old Idle dynticks config
CONFIG_NO_HZ
等价于CONFIG_NO_HZ_IDLE,临时用来兼容老版本内核选项,未来会被删除.
High Resolution Timer Support
CONFIG_HIGH_RES_TIMERS
高精度定时器(hrtimer)是从2.6.16开始引入,用于取代传统timer wheel(基于jiffies定时器)的时钟子系统.可以降低与内核其他模块的耦合性,还可以提供比1毫秒更高的精度(因为它可以读取HPET/TSC等新型硬件时钟源),可以更好的支持音视频等对时间精度要求较高的应用.建议选"Y".[提示]这里说的"定时器"是指"软件定时器",而不是主板或CPU上集成的硬件时钟发生器(ACPI PM Timer/HPET Timer/TSC Timer).
CPU/Task time and stats accounting
CPU/进程的时间及状态统计
Cputime accounting
CPU时间统计方式
Simple tick based cputime accounting
CONFIG_TICK_CPU_ACCOUNTING
简单的基于滴答的统计,适用于大多数场合
Deterministic task and CPU time accounting
CONFIG_VIRT_CPU_ACCOUNTING_NATIVE
通过读取CPU计数器进行统计,可以提供更精确的统计,但是对性能有一些不利影响.
Full dynticks CPU time accounting
CONFIG_VIRT_CPU_ACCOUNTING_GEN
利用上下文跟踪子系统,通过观察每一个内核与用户空间的边界进行统计.该选项对性能有显著的不良影响,目前仅用于完全无滴答子系统(CONFIG_NO_HZ_FULL)的调试
Fine granularity task level IRQ time accounting
CONFIG_IRQ_TIME_ACCOUNTING
通过读取TSC时间戳进行统计,这是统计进程IRQ时间的更细粒度的统计方式,但对性能有些不良影响(特别是在RDTSC指令速度较慢的CPU上).
BSD Process Accounting
CONFIG_BSD_PROCESS_ACCT
用户空间程序可以要求内核将进程的统计信息写入一个指定的文件,主要包括进程的创建时间/创建者/内存占用等信息.
BSD Process Accounting version 3 file format
CONFIG_BSD_PROCESS_ACCT_V3
使用新的v3版文件格式,可以包含每个进程的PID和其父进程的PID,但是不兼容老版本的文件格式.比如 GNU Accounting Utilities 这样的工具可以识别v3格式
Export task/process statistics through netlink
CONFIG_TASKSTATS
通过netlink接口向用户空间导出进程的统计信息,与 BSD Process Accounting 的不同之处在于这些统计信息在整个进程生存期都是可用的.
Enable per-task delay accounting
CONFIG_TASK_DELAY_ACCT
在统计信息中包含进程等候系统资源(cpu,IO同步,内存交换等)所花费的时间
Enable extended accounting over taskstats
CONFIG_TASK_XACCT
在统计信息中包含进程的更多扩展信息.
Enable per-task storage I/O accounting
CONFIG_TASK_IO_ACCOUNTING
在统计信息中包含进程在存储设备上的I/O字节数.
RCU Subsystem
RCU(Read-Copy Update)子系统.在读多写少的情况下,这是一个高性能的锁机制,对于被RCU保护的共享数据结构,读者不需要获得任何锁就可以访问它(速度非常快),但写者在访问它时首先拷贝一个副本,然后对副本进行修改,最后使用一个回调机制在适当的时机把指向原来数据的指针重新指向新的被修改的数据,速度非常慢.RCU只适用于读多写少的情况:如网络路由表的查询更新,设备状态表的维护,数据结构的延迟释放以及多径I/O设备的维护等.
RCU Implementation
RCU的实现方式
Tree-based hierarchical RCU
CONFIG_TREE_RCU
基于树型分层结构的实现.最适用于多CPU的非实时系统.
Preemptible tree-based hierarchical RCU
CONFIG_TREE_PREEMPT_RCU
抢占式基于树型分层结构的实现.最适用于那些要求快速响应的多CPU实时系统.
UP-only small-memory-footprint RCU
CONFIG_TINY_RCU
最简单的实现,能够大幅降低RCU系统的内存占用.最适用于单CPU的非实时系统.
Preemptible UP-only small-memory-footprint RCU
CONFIG_TINY_PREEMPT_RCU
抢占式简单实现,能够大幅降低RCU系统的内存占用.最适用于那些要求快速响应的单CPU实时系统.
Consider userspace as in RCU extended quiescent state
CONFIG_RCU_USER_QS
在内核和用户边界设置钩子函数,将运行在用户态的CPU从全局RCU状态机制中移除,这样就不会在RCU系统中维护此CPU的时钟滴答.除非你想要帮助开发CONFIG_NO_HZ_FULL模块,否则不要打开此选项,而且它还会对性能有不利影响.
Force context tracking
CONFIG_CONTEXT_TRACKING_FORCE
默认在内核和用户边界进行探测(上下文跟踪),以便测试依赖于此特性的各种功能(比如用户空间的 RCU extended quiescent state),这个特性目前仅用于调试目的,未来也许会用于为CONFIG_NO_HZ_FULL模块提供支持
Tree-based hierarchical RCU fanout value
CONFIG_RCU_FANOUT
这个选项控制着树形RCU层次结构的端点数(fanout),以允许RCU子系统在拥有海量CPU的系统上高效工作.这个值必须至少等于CONFIG_NR_CPUS的1/4次方(4次根号).生产系统上应该使用默认值(64).仅在你想调试RCU子系统时才需要减小此值.
Tree-based hierarchical RCU leaf-level fanout value
CONFIG_RCU_FANOUT_LEAF
这个选项控制着树形RCU层次结构的叶子层的端点数(leaf-level fanout).对于期望拥有更高能耗比(更节能)的系统,请保持其默认值(16).对于拥有成千上万个CPU的系统来说,应该考虑将其设为最大值(CONFIG_RCU_FANOUT).
Disable tree-based hierarchical RCU auto-balancing
CONFIG_RCU_FANOUT_EXACT
强制按照CONFIG_RCU_FANOUT_LEAF的值,而不是使用自动平衡树结构来实现RCU子系统.目前仅用于调试目的.未来也许会用于增强NUMA系统的性能.
Accelerate last non-dyntick-idle CPU's grace periods
CONFIG_RCU_FAST_NO_HZ
即使CPU还在忙碌,也允许进入dynticks-idle状态,并且阻止RCU每4个滴答就唤醒一次该CPU,这样能够更有效的使用电力,同时也拉长了RCU grace period的时间,造成性能降低.如果能耗比对你而言非常重要(你想节省每一分电力),并且你不在乎系统性能的降低(CPU唤醒时间增加),可以开启此选项.台式机和服务器建议关闭此选项.
Enable RCU priority boosting
CONFIG_RCU_BOOST
允许提升RCU子系统的实时优先级(包括读操作与写操作),以避免RCU操作被阻塞太长时间.如果系统的CPU负载经常很重,或者你需要快速的实时响应系统,那么就选"Y",否则应该选"N".
Real-time priority to boost RCU readers to
CONFIG_RCU_BOOST_PRIO
允许提升被长时间抢占(阻塞)的RCU读操作的实时优先级到什么程度.取值范围是[1,99].默认值"1"适用于实时应用程序中不包含CPU密集型(CPU-bound)线程的常规场合(例如大多数桌面系统).但是如果你的实时应用程序拥有一个或多个CPU密集型线程,那么可能需要增加这个值,具体可以参考内核帮助的说明.仅在你确实理解了的情况下再改变默认值.
Milliseconds to delay boosting after RCU grace-period start
CONFIG_RCU_BOOST_DELAY
在提升RCU读操作的优先级之前,允许有多长时间潜伏期(阻塞),取值范围是[0,3000],单位是毫秒,默认值是"500".不确定的请使用默认值.
Offload RCU callback processing from boot-selected CPUs
CONFIG_RCU_NOCB_CPU
如果你想帮助调试内核可以开启,否则请关闭.
Build-forced no-CBs CPUs
在开启CONFIG_RCU_NOCB_CPU选项的情况下,指定哪些CPU是No-CB CPU,相当于预先设置"rcu_nocbs="内核引导参数.
Kernel .config support
CONFIG_IKCONFIG
把内核的配置信息编译进内核中,以后可以通过scripts/extract-ikconfig脚本从内核镜像中提取这些信息
Enable access to .config through /proc/config.gz
CONFIG_IKCONFIG_PROC
允许通过 /proc/config.gz 文件访问内核的配置信息
Kernel log buffer size
CONFIG_LOG_BUF_SHIFT
设置内核日志缓冲区的大小: 12(最小值)=4KB,...,16=64KB,17=128KB,18=256KB,...,21(最大值)=2048KB
Automatically enable NUMA aware memory/task placement
CONFIG_NUMA_BALANCING_DEFAULT_ENABLED
在NUMA(Non-Uniform Memory Access Architecture)系统上自动启用进程/内存均衡,也就是自动开启CONFIG_NUMA_BALANCING特性.
Memory placement aware NUMA scheduler
CONFIG_NUMA_BALANCING
允许自动根据NUMA系统的节点分布状况进行进程/内存均衡(方法很原始,就是简单的内存移动).这个选项对UMA系统无效.[提示]UMA系统的例子:(1)只有一颗物理CPU(即使是多核)的电脑,(2)不支持"虚拟NUMA",或"虚拟NUMA"被禁用的虚拟机(即使所在的物理机是NUMA系统)
Control Group support
CONFIG_CGROUPS
Cgroup(Control Group)是一种进程管理机制,可以针对一组进程进行系统资源的分配和管理,可用于Cpusets,CFS(完全公平调度器),内存管理等子系统.此外,systemd也依赖于它.更多细节可以参考内核的"Documentation/cgroups/cgroups.txt"文件
Example debug cgroup subsystem
CONFIG_CGROUP_DEBUG
导出cgroups框架的调试信息,仅用于调试目的.
Freezer cgroup subsystem
CONFIG_CGROUP_FREEZER
允许冻结/解冻cgroup内所有进程
Device controller for cgroups
CONFIG_CGROUP_DEVICE
允许为cgroup建立设备白名单,这样cgroup内的进程将仅允许对白名单中的设备进行mknod/open操作
Cpuset support
CONFIG_CPUSETS
CPUSET支持:允许将CPU和内存进行分组,并指定某些进程只能运行于特定的分组.这里有一篇CPUSET的用法
Include legacy /proc/<pid>/cpuset file
CONFIG_PROC_PID_CPUSET
提供过时的 /proc/<pid>/cpuset 文件接口
Simple CPU accounting cgroup subsystem
CONFIG_CGROUP_CPUACCT
提供一个简单的资源控制器(Resource Controller,用于实现一组任务间的资源共享),以监控cgroup内所有进程的总CPU使用量.
Resource counters
CONFIG_RESOURCE_COUNTERS
为cgroup提供独立于controller资源计数器
Memory Resource Controller for Control Groups
CONFIG_MEMCG
为cgroup添加内存资源控制器,包含匿名内存和页面缓存(Documentation/cgroups/memory.txt).开启此选项后,将会增加关联到每个内存页fixed memory大小,具体在64位系统上是40bytes/PAGE_SIZE.仅在你确实明白什么是 memory resource controller 并且确实需要的情况下才开启此选项.此功能可以通过命令行选项"cgroup_disable=memory"进行关闭.
Memory Resource Controller Swap Extension
CONFIG_MEMCG_SWAP
给 Memory Resource Controller 添加对swap的管理功能.这样就可以针对每个cgroup限定其使用的mem+swap总量.如果关闭此选项, memory resource controller 将仅能限制mem的使用量,而无法对swap进行控制(进程有可能耗尽swap).开启此功能会对性能有不利影响,并且为了追踪swap的使用也会消耗更多的内存(如果swap的页面大小是4KB,那么每1GB的swap需要额外消耗512KB内存),所以在内存较小的系统上不建议开启.
Memory Resource Controller Swap Extension enabled by default
CONFIG_MEMCG_SWAP_ENABLED
如果开启此选项,那么将默认开启CONFIG_MEMCG_SWAP特性,否则将默认关闭.即使默认开启也可以通过内核引导参数"swapaccount=0"禁止此特性.
Memory Resource Controller Kernel Memory accounting
CONFIG_MEMCG_KMEM
为 Memory Resource Controller 添加对内核对象所占用内存的管理功能.和标准的 Memory Resource Controller 对内存的控制不一样之处在于:这些内核对象所占用的内存是基于每个内存页的,并且可以被swap到硬盘.使用这个功能可以确保cgroup中的进程不会单独耗尽所有内核资源.
HugeTLB Resource Controller for Control Groups
CONFIG_CGROUP_HUGETLB
为cgroup添加对HugeTLB页的资源控制功能.开启此选项之后,你就可以针对每个cgroup限定其对HugeTLB的使用.
Enable perf_event per-cpu per-container group (cgroup) monitoring
CONFIG_CGROUP_PERF
将per-cpu模式进行扩展,使其可以监控属于特定cgroup并运行于特定CPU上的线程
Group CPU scheduler
CONFIG_CGROUP_SCHED
让CPU调度程序可以在不同的cgroup之间分配CPU的带宽.systemd资源控制单元(resource control unit)的CPUShares功能依赖于它.
Group scheduling for SCHED_OTHER
CONFIG_FAIR_GROUP_SCHED
公平CPU调度策略,也就是在多个cgroup之间平均分配CPU带宽."鸡血补丁"CONFIG_SCHED_AUTOGROUP(自动分组调度功能)依赖于它.systemd资源控制单元(resource control unit)的CPUShares功能也依赖于它.
CPU bandwidth provisioning for FAIR_GROUP_SCHED
CONFIG_CFS_BANDWIDTH
允许用户为运行在CONFIG_FAIR_GROUP_SCHED中的进程定义CPU带宽限制.对于没有定义CPU带宽限制的cgroup而言,可以无限制的使用CPU带宽.详情参见Documentation/scheduler/sched-bwc.txt 文件.
Group scheduling for SCHED_RR/FIFO
CONFIG_RT_GROUP_SCHED
允许用户为cgroup分配实时CPU带宽,还可以对非特权用户的实时进程组进行调度.详情参见 Documentation/scheduler/sched-rt-group.txt 文档.
Block IO controller
CONFIG_BLK_CGROUP
通用的块IO控制器接口,可以用于实现各种不同的控制策略.目前,IOSCHED_CFQ用它来在不同的cgroup之间分配磁盘IO带宽(需要额外开启CONFIG_CFQ_GROUP_IOSCHED),block io throttle也会用它来针对特定块设备限制IO速率上限(需要额外开启CONFIG_BLK_DEV_THROTTLING).更多信息可以参考"Documentation/cgroups/blkio-controller.txt"文件.
Enable Block IO controller debugging
CONFIG_DEBUG_BLK_CGROUP
仅用于调试 Block IO controller 目的.
Checkpoint/restore support
CONFIG_CHECKPOINT_RESTORE
在内核中添加"检查点/恢复"支持.也就是添加一些辅助的代码用于设置进程的 text, data, heap 段,并且在 /proc 文件系统中添加一些额外的条目.主要用于调试目的.不确定的选"N".
Namespaces support
CONFIG_NAMESPACES
命名空间支持.主要用于支持基于容器的轻量级虚拟化技术(比如LXC和Linux-VServer).
UTS namespace
CONFIG_UTS_NS
uname()系统调用的命名空间支持
IPC namespace
CONFIG_IPC_NS
进程间通信对象ID的命名空间支持
User namespace
CONFIG_USER_NS
允许容器使用user命名空间.如果开启此项,建议同时开启CONFIG_MEMCG和CONFIG_MEMCG_KMEM选项,以允许用户空间使用"memory cgroup"限制非特权用户的内存使用量.不确定的选"N",如果你打算构建一个VPS服务器就必须选"Y".
PID Namespaces
CONFIG_PID_NS
进程PID命名空间支持
Network namespace
CONFIG_NET_NS
网络协议栈的命名空间支持.systemd服务单元(service unit)中的"PrivateNetwork"依赖于它.
Require conversions between uid/gids and their internal representation
CONFIG_UIDGID_STRICT_TYPE_CHECKS
强制将uid/gid转换为内部表示形式,以让那些未对uid/gid进行转换的内核子系统代码也能正常编译.不确定的选"N".
Automatic process group scheduling
CONFIG_SCHED_AUTOGROUP
每个TTY动态地创建任务分组(cgroup),这样就可以降低高负载情况下的桌面延迟.也就是传说中的桌面"鸡血补丁",桌面用户建议开启.但服务器建议关闭.
Enable deprecated sysfs features to support old userspace tools
CONFIG_SYSFS_DEPRECATED
为了兼容旧版本的应用程序而保留过时的sysfs特性.仅当在使用2008年以前的发行版时才需要开启,2009年之后的发行版中必须关闭.此外,使用udev或systemd的系统也必须关闭.
Enable deprecated sysfs features by default
CONFIG_SYSFS_DEPRECATED_V2
默认开启上述特性
Kernel->user space relay support (formerly relayfs)
CONFIG_RELAY
在某些文件系统(比如debugfs)中提供中继(relay)支持(从内核空间向用户空间传递大批量数据).主要用于调试内核.
Initial RAM filesystem and RAM disk (initramfs/initrd) support
CONFIG_BLK_DEV_INITRD
初始内存文件系统(initramfs,2.6以上内核的新机制,使用cpio格式,占据的内存随数据的增减自动增减)与初始内存盘(initrd,2.4以前内核遗留的老机制,使用loop设备,占据一块固定的内存,需要额外开启CONFIG_BLK_DEV_RAM选项才生效)支持,一般通过lilo/grub的initrd指令加载.更多细节可以参考"Documentation/initrd.txt"文件,关于initrd到initramfs的进化(墙内镜像),可以参考IBM上的两篇文章:Linux2.6 内核的 Initrd 机制解析和Linux 初始 RAM 磁盘(initrd)概述.
Initramfs source file(s)
CONFIG_INITRAMFS_SOURCE
如果你想将initramfs镜像直接嵌入内核(比如嵌入式环境或者想使用 EFI stub kernel),而不是通过lilo/grub这样的引导管理器加载,可以使用此选项,否则请保持空白.这个选项指明用来制作initramfs镜像的原料,可以是一个.cpio文件,或一个Initramfs虚根目录(其下包含"bin,dev,etc,lib,proc,sys"等子目录),或一个描述文件.细节可以参考"Documentation/early-userspace/README"文档.[注意]内核帮助文档说可以指定多个目录或文件是错误的,实际只能接受单一的目录或文件
User ID to map to 0 (user root)
INITRAMFS_ROOT_UID
此选项仅在CONFIG_INITRAMFS_SOURCE中包含目录时才有效,将此值设为非零(例如"37"),那么所有UID=37的文件在打包到initramfs镜像内时,其UID都将被设为"0".
Group ID to map to 0 (group root)
INITRAMFS_ROOT_GID
此选项仅在CONFIG_INITRAMFS_SOURCE中包含目录时才有效,将此值设为非零(例如"37"),那么所有GID=37的文件在打包到initramfs镜像内时,其GID都将被设为"0".
Support initial ramdisks compressed using gzip
CONFIG_RD_GZIP
支持经过gzip压缩的ramdisk或cpio镜像
Support initial ramdisks compressed using bzip2
CONFIG_RD_BZIP2
支持经过bzip2压缩的ramdisk或cpio镜像
Support initial ramdisks compressed using LZMA
CONFIG_RD_LZMA
支持经过LZMA压缩的ramdisk或cpio镜像
Support initial ramdisks compressed using XZ
CONFIG_RD_XZ
支持经过XZ压缩的ramdisk或cpio镜像
Support initial ramdisks compressed using LZO
CONFIG_RD_LZO
支持经过LZO压缩的ramdisk或cpio镜像
Built-in initramfs compression mode
选择initramfs镜像的压缩格式."gzip"是兼容性最好的格式,但是压缩率却最低."XZ"是目前渐渐流行的格式,压缩率高,解压速度也不慢.
Optimize for size
CONFIG_CC_OPTIMIZE_FOR_SIZE
编译时优化内核尺寸(使用GCC的"-Os"而不是"-O2"参数编译),这会得到更小的内核,但是运行速度可能会更慢.主要用于嵌入式环境.
Configure standard kernel features (expert users)
CONFIG_EXPERT
配置标准的内核特性(仅供专家使用).这个选项允许你改变内核的"标准"特性(比如用于需要"非标准"内核的特定环境中),仅在你确实明白自己在干什么的时候才开启.
Enable 16-bit UID system calls
CONFIG_UID16
允许对UID系统调用进行过时的16-bit包装,建议关闭
Sysctl syscall support
CONFIG_SYSCTL_SYSCALL
二进制sysctl接口支持.由于现在流行直接通过/proc/sys以ASCII明码方式修改内核参数(需要开启CONFIG_PROC_SYSCTL选项),所以已经不需要再通过二进制接口去控制内核参数,建议关闭它以减小内核尺寸.
Load all symbols for debugging/ksymoops
CONFIG_KALLSYMS
装载所有的调试符号表信息,会增大内核体积,仅供调试时选择
Include all symbols in kallsyms
CONFIG_KALLSYMS_ALL
在/proc/kallsyms中包含内核知道的所有符号,内核将会增大300K,仅在你确实需要的时候再开启
Enable support for printk
CONFIG_PRINTK
允许内核向终端打印字符信息.如果关闭,内核在初始化过程中将不会输出字符信息,这会导致很难诊断系统故障.仅在你确实不想看到任何内核信息时选"N".否则请选"Y".
BUG() support
CONFIG_BUG
显示故障和失败条件(BUG和WARN),禁用它将可能导致隐含的错误被忽略.建议仅在嵌入式设备或者无法显示故障信息的系统上关闭
Enable ELF core dumps
CONFIG_ELF_CORE
内存转储支持,可以帮助调试ELF格式的程序,用于调试和开发用户态程序
Enable PC-Speaker support
CONFIG_PCSPKR_PLATFORM
主板上的蜂鸣器支持.主板上的蜂鸣器只能发出或长或短的"滴"或"嘟嘟"声,一般用于系统报警.不要和能够播放音乐的扬声器混淆.如果你的主板上没有就关闭,有的话(开机自检完成后一般能听到"滴"的一声)还是建议开启.
Enable full-sized data structures for core
CONFIG_BASE_FULL
在内核中使用全尺寸的数据结构.禁用它将使得某些内核的数据结构减小以节约内存,但是将会降低性能
Enable futex support
CONFIG_FUTEX
快速用户空间互斥(fast userspace mutexes)可以使线程串行化以避免竞态条件,也提高了响应速度.禁用它将导致内核不能正确的运行基于glibc的程序
Enable eventpoll support
CONFIG_EPOLL
Epoll系列系统调用(epoll_*)支持,这是当前在Linux下开发大规模并发网络程序(比如Nginx)的热门人选,设计目的是取代既有POSIX select(2)与poll(2)系统接口,systemd依赖于它.建议开启.
Enable signalfd() system call
CONFIG_SIGNALFD
signalfd()系统调用支持,建议开启.传统的处理信号的方式是注册信号处理函数,由于信号是异步发生的,要解决数据的并发访问和可重入问题.signalfd可以将信号抽象为一个文件描述符,当有信号发生时可以对其read,这样可以将信号的监听放到select/poll/epoll监听队列中.systemd依赖于它.
Enable timerfd() system call
CONFIG_TIMERFD
timerfd()系统调用支持,建议开启.timerfd可以实现定时器功能,将定时器抽象为文件描述符,当定时器到期时可以对其read,这样也可以放到select/poll/epoll监听队列中.更多信息可以参考linux新的API signalfd、timerfd、eventfd使用说明.systemd依赖于它.
Enable eventfd() system call
CONFIG_EVENTFD
eventfd()系统调用支持,建议开启.eventfd实现了线程之间事件通知的方式,eventfd的缓冲区大小是sizeof(uint64_t),向其write可以递增这个计数器,read操作可以读取,并进行清零.eventfd也可以放到select/poll/epoll监听队列中.当计数器不是0时,有可读事件发生,可以进行读取.
Use full shmem filesystem
CONFIG_SHMEM
完全使用shmem来代替ramfs.shmem是基于共享内存的文件系统(可以使用swap),在启用CONFIG_TMPFS后可以挂载为tmpfs供用户空间使用,它比简单的ramfs先进许多.仅在微型嵌入式环境中且没有swap的情况下才可能会需要使用原始的ramfs.
Enable AIO support
CONFIG_AIO
开启POSIX异步IO支持.它常常被高性能的多线程程序使用,建议开启
Enable PCI quirk workarounds
CONFIG_PCI_QUIRKS
开启针对多种PCI芯片组的错误规避功能,仅在确定你的PCI芯片组确实没有没有任何bug时才关闭此功能.至于究竟哪些芯片组有bug,你可以直接打开"drivers/pci/quirks.c"文件查看.不确定的选"Y".
Embedded system
CONFIG_EMBEDDED
如果你是为嵌入式系统编译内核,可以开启此选项,这样一些高级选项就会显示出来.单独选中此项本身对内核并无任何改变.
Kernel Performance Events And Counters
CONFIG_PERF_EVENTS
性能相关的事件和计数器支持(既有硬件的支持也有软件的支持).大多数现代CPU都会通过性能计数寄存器对特定类型的硬件事件(指令执行,缓存未命中,分支预测失败)进行计数,同时又丝毫不会减慢内核和应用程序的运行速度.这些寄存器还会在某些事件计数到达特定的阈值时触发中断,从而可以对代码进行性能分析. Linux Performance Event 子系统对上述特性进行了抽象,提供了针对每个进程和每个CPU的计数器,并可以被 tools/perf/ 目录中的"perf"工具使用.
Debug: use vmalloc to back perf mmap() buffers
CONFIG_DEBUG_PERF_USE_VMALLOC
主要用于调试vmalloc代码.
Enable VM event counters for /proc/vmstat
CONFIG_VM_EVENT_COUNTERS
"/proc/vmstat"中包含了从内核导出的虚拟内存的各种统计信息.开启此项后可以显示较详细的信息(包含各种事件计数器),关闭此项则仅仅显示很简略的信息.主要用于调试和统计.
Enable SLUB debugging support
CONFIG_SLUB_DEBUG
SLUB调试支持,禁用后可显著降低内核大小,同时/sys/kernel/slab也将不复存在.
Disable heap randomization
CONFIG_COMPAT_BRK
禁用堆随机化(heap randomization)功能.堆随机化可以让针对堆溢出的攻击变得困难,但是不兼容那些古董级的二进制程序(2000年以前).如果你不需要使用这些古董程序,那么选"N".
Choose SLAB allocator
选择内存分配管理器
SLAB
CONFIG_SLAB
久经考验的slab内存分配器,在大多数情况下都具有良好的适应性.
SLUB (Unqueued Allocator)
CONFIG_SLUB
SLUB与SLAB兼容,但通过取消大量的队列和相关开销,简化了slab的结构.特别是在多核时拥有比slab更好的性能和更好的系统可伸缩性.
SLOB (Simple Allocator)
CONFIG_SLOB
SLOB针对小型系统设计,做了非常激进的简化,以适用于内存非常有限(小于64M)的嵌入式环境.
SLUB per cpu partial cache
CONFIG_SLUB_CPU_PARTIAL
让SLUB内存分配器使用基于每个CPU的局部缓存,这样可以加速分配和释放属于此CPU范围内的对象,但这样做的代价是增加对象释放延迟的不确定性.因为当这些局部缓存因为溢出而要被清除时,需要使用锁,从而导致延迟尖峰.对于需要快速响应的实时系统,应该选"N",服务器则可以选"Y".
Provide system-wide ring of trusted keys
CONFIG_SYSTEM_TRUSTED_KEYRING
在内核中创建一个密钥环,从而允许向密钥环上添加受信任的密钥,主要用于内核模块的签名.如果你开启了CONFIG_MODULE_SIG,此项将被自动选中.不需要使用内核模块签名检查功能的应该选"N"
Profiling support
CONFIG_PROFILING
添加扩展的性能分析支持,可以被OProfile之类的工具使用.仅用于调试目的.
OProfile system profiling
CONFIG_OPROFILE
OProfile性能分析工具支持,仅用于调试目的.
OProfile multiplexing support
CONFIG_OPROFILE_EVENT_MULTIPLEX
OProfile multiplexing技术支持
Kprobes
CONFIG_KPROBES
Kprobes是一个轻量级的内核调试工具,能在内核运行的几乎任意时间点进行暂停/读取/修改等操作的调试工具.仅供调试使用.
Optimize very unlikely/likely branches
CONFIG_JUMP_LABEL
针对内核中某些"几乎总是为真"或者"几乎总是为假"的条件分支判断使用"asm goto"进行优化(在分支预测失败时会浪费很多时间在回退上,但是这种情况极少发生).很多内核子系统都支持进行这种优化.建议开启.
Transparent user-space probes
CONFIG_UPROBES
Uprobes与Kprobes类似,但主要用于用户空间的调试.
Stack Protector buffer overflow detection
GCC的"stack-protector"功能可以在函数开始执行时,在函数的返回地址末端设置一个敏感值,当函数执行完成要返回时,检查这个敏感值,看看是否存在溢出.如果有溢出则表明可能受到了堆栈溢出攻击,内核将通过panic来阻止可能的攻击.选项中的"None"表示关闭此功能,"Regular"表示启用此功能但是仅提供较弱的保护(需要GCC-4.2及以上版本),"Strong"则表示提供较强的保护(需要GCC-4.9及以上版本)
Enable GCOV-based kernel profiling
CONFIG_GCOV_KERNEL
基于GCC的gcov(代码覆盖率测试工具)的代码分析支持,仅用于调试
Profile entire Kernel
CONFIG_GCOV_PROFILE_ALL
支持对整个内核进行分析.内核体积将会显著增大,并且运行速度显著减慢.

Enable loadable module support
可加载模块支持

Enable loadable module support
CONFIG_MODULES
打开可加载模块支持,可以通过"make modules_install"把内核模块安装在/lib/modules/中.然后可以使用 modprobe, lsmod, modinfo, insmod, rmmod 等工具进行各种模块操作.
Forced module loading
CONFIG_MODULE_FORCE_LOAD
允许使用"modprobe --force"在不校验版本信息的情况下强制加载模块,这绝对是个坏主意!建议关闭.
Module unloading
CONFIG_MODULE_UNLOAD
允许卸载已经加载的模块
Forced module unloading
CONFIG_MODULE_FORCE_UNLOAD
允许强制卸载正在使用中的模块(rmmod -f),即使可能会造成系统崩溃.这又是一个坏主意!建议关闭.
Module versioning support
CONFIG_MODVERSIONS
允许使用为其他内核版本编译的模块,可会造成系统崩溃.这同样是个坏主意!建议关闭.
Source checksum for all modules
CONFIG_MODULE_SRCVERSION_ALL
为模块添加"srcversion"字段,以帮助模块维护者准确的知道编译此模块所需要的源文件,从而可以校验源文件的变动.仅内核模块开发者需要它.
Module signature verification
CONFIG_MODULE_SIG
在加载模块时检查模块签名,详情参见"Documentation/module-signing.txt"文件.[!!警告!!]开启此选项后,必须确保模块签名后没有被strip(包括rpmbuild之类的打包工具).
Require modules to be validly signed
CONFIG_MODULE_SIG_FORCE
仅加载已签名并且密钥正确的模块,拒绝加载未签名或者签名密钥不正确的模块
Automatically sign all modules
CONFIG_MODULE_SIG_ALL
在执行"make modules_install"安装模块的时候,自动进行签名.否则你必须手动使用 scripts/sign-file 工具进行签名.
Which hash algorithm should modules be signed with?
选择对模块签名时使用的散列函数.建议使用强度最高的"SHA-512"算法.注意:所依赖的散列算法必须被静态编译进内核.对于"SHA-512"来说,就是CONFIG_CRYPTO_SHA512和CONFIG_CRYPTO_SHA512_SSSE3(如果你的CPU支持SSSE3指令集的话).

Enable the block layer
块设备支持

Enable the block layer
CONFIG_BLOCK
块设备支持,使用SSD/硬盘/U盘/SCSI/SAS设备者必选.除非你是某些特殊的嵌入式系统,否则没有理由不使用块设备.
Block layer SG support v4
CONFIG_BLK_DEV_BSG
为块设备启用第四版SG(SCSI generic)支持.v4相比v3能够支持更复杂的SCSI指令(可变长度的命令描述块,双向数据传输,通用请求/应答协议),而且UDEV也要用它来获取设备的序列号.对于使用systemd的系统来说,必须选"Y".对于不使用systemd的系统,如果你需要通过/dev/bsg/*访问块设备,建议开启此选项,否则(通过/dev/{sd*,st*,sr*})可以关闭.
Block layer SG support v4 helper lib
CONFIG_BLK_DEV_BSGLIB
你不需要手动开启此选项,如果有其他模块需要使用,会被自动开启.
Block layer data integrity support
CONFIG_BLK_DEV_INTEGRITY
某些块设备可以通过存储/读取额外的信息来保障端到端的数据完整性,这个选项为文件系统提供了相应的钩子函数来使用这个特性.如果你的设备支持 T10/SCSI Data Integrity Field 或者 T13/ATA External Path Protection 特性,那么可以开启此选项,否则建议关闭.
Block layer bio throttling support
CONFIG_BLK_DEV_THROTTLING
Bio Throttling 支持,也就是允许限制每个cgroup对特定设备的IO速率.细节可以参考"Documentation/cgroups/blkio-controller.txt".
Advanced partition selection
CONFIG_PARTITION_ADVANCED
如果你想支持各种不同的磁盘分区格式(特别是与UEFI配合使用的GPT格式),务必选中此项.
Acorn partition support
CONFIG_ACORN_PARTITION
Acorn 操作系统使用的分区格式,请根据实际情况选择子项,这里省略
Alpha OSF partition support
CONFIG_OSF_PARTITION
Alpha 平台上使用的分区格式
Amiga partition table support
CONFIG_AMIGA_PARTITION
AmigaOS 使用的分区格式
Atari partition table support
CONFIG_ATARI_PARTITION
Atari OS 使用的分区格式
Macintosh partition map support
CONFIG_MAC_PARTITION
苹果的Macintosh平台使用的分区格式
PC BIOS (MSDOS partition tables) support
CONFIG_MSDOS_PARTITION
渐成历史垃圾,但目前依然最常见的DOS分区格式.除非你确信不使用此格式,否则必选.其下的子项根据实际情况选择.
Windows Logical Disk Manager (Dynamic Disk) support
CONFIG_LDM_PARTITION
使用 Windows Logical Disk Manager 创建的分区格式.参见"Documentation/ldm.txt"
SGI partition support
CONFIG_SGI_PARTITION
SGI 平台上使用的分区格式
Ultrix partition table support
CONFIG_ULTRIX_PARTITION
DEC/Compaq Ultrix 平台上使用的分区格式
Sun partition tables support
CONFIG_SUN_PARTITION
SunOS 平台上使用的分区格式
Karma Partition support
CONFIG_KARMA_PARTITION
Rio Karma MP3 player 使用的分区格式
EFI GUID Partition support
CONFIG_EFI_PARTITION
代表未来趋势,眼下正大红大紫的EFI GPT(GUID Partition Table)分区格式.建议开启.如果你在UEFI平台上安装则必须开启.
SYSV68 partition table support
CONFIG_SYSV68_PARTITION
Motorola Delta 机器上使用的分区格式
IO Schedulers
IO调度器(另一篇文章)
Deadline I/O scheduler
CONFIG_IOSCHED_DEADLINE
deadline调度器.简洁小巧(只有400+行代码),提供了最小的读取延迟.如果你希望尽快读取磁盘,而不介意写入延迟,那它是最佳选择.通常对于数据库工作负载有最佳的表现.
CFQ I/O scheduler
CONFIG_IOSCHED_CFQ
cfq(Complete Fair Queuing)调度器.努力在各内核线程间公平分配IO资源,适用于系统中存在着大量内核线程同时进行IO请求的情况.但对于只有少数内核线程进行密集IO请求的情况,则会出现明显的性能下降.
CFQ Group Scheduling support
CONFIG_CFQ_GROUP_IOSCHED
允许将CFQ和cgroup组合使用,也就是将每个cgroup看成一个整体,在各cgroup之间进行IO资源的分配.参见"Documentation/cgroups/blkio-controller.txt"文件.还可以参考一下《Linux内核精髓》中的"使用Block I/O控制器"一章.
BFQ I/O scheduler
CONFIG_IOSCHED_BFQ
bfq(Budget Fair Queueing)调度器.这是一个基于CFQ调度器的改进版本,更适合于对交互性要求比较高的场合,比如桌面系统和实时系统.如果静态编译进内核,还支持和cgroup配合,实现分层调度(hierarchical scheduling).
BFQ hierarchical scheduling support
CONFIG_CGROUP_BFQIO
通过cgroup文件系统接口,允许将BFQ分层使用(类似CONFIG_CFQ_GROUP_IOSCHED),这个子系统的名字是"bfqio".
Default I/O scheduler
默认IO调度器.如果上述调度器都是模块,那么将使用最简单的内置NOOP调度器.NOOP(No Operation)调度器只是一个简单的FIFO队列,不对IO请求做任何重新排序处理(但还是会做一定程度的归并),适合于SSD/U盘/内存/SAN(Storage Area Networks)/虚拟机中的硬盘/iSCSI/硬RAID等无需寻道的存储设备,重点是可以节约CPU资源,但不适用于普通硬盘这样的需要依靠磁头来定位的设备.另外,有人说拥有TCQ/NCQ技术(能够自动重新排序)的硬盘也适合用NOOP调度器,这个说法其实并不那么合理,但笔者在此不敢断言,希望读者在严谨的测试之后再做定夺.

Processor type and features
中央处理器(CPU)类型及特性

DMA memory allocation support
CONFIG_ZONE_DMA
允许为寻址宽度不足32位的设备(也就是ISA和LPC总线设备)在物理内存的前16MB范围内(也就是传统上x86_32架构的ZONE_DMA区域)分配内存.不确定的选"N",内核中若有其它驱动(主要是某些老旧的声卡)需要它会自动选中此项.[提示]LPC总线通常和主板上的南桥物理相连,通常连接了一系列的传统设备:BIOS,PS/2键盘,PS/2鼠标,软盘,并口设备,串口设备,某些集成声卡,TPM(可信平台模块),等等.[题外话]x86_64已经没有ZONE_HIGHMEM了
Symmetric multi-processing support
CONFIG_SMP
SMP(对称多处理器)支持,如果你有多个CPU或者使用的是多核CPU就选上.
Support x2apic
CONFIG_X86_X2APIC
x2apic支持.具有这个特性的CPU可以使用32位的APIC ID(可以支持海量的CPU),并且可以使用MSR而不是mmio去访问 local APIC (更加高效).可以通过"grep x2apic /proc/cpuinfo"命令检查你的CPU是否支持这个特性.注意:有时候还需要在BIOS中也开启此特性才真正生效.[提示]在虚拟机中,还需要VMM的支持(例如qemu-kvm).
Enable MPS table
CONFIG_X86_MPPARSE
如果是不支持acpi特性的古董级SMP系统就选上.但现今的64位系统早都已经支持acpi了,所以可以安全的关闭.
Support for extended (non-PC) x86 platforms
CONFIG_X86_EXTENDED_PLATFORM
支持非标准的PC平台: Numascale NumaChip, ScaleMP vSMP, SGI Ultraviolet. 绝大多数人都遇不见这些平台.
Numascale NumaChip
CONFIG_X86_NUMACHIP
Numascale NumaChip 平台支持
ScaleMP vSMP
CONFIG_X86_VSMP
ScaleMP vSMP 平台支持
SGI Ultraviolet
CONFIG_X86_UV
SGI Ultraviolet 平台支持
Intel Low Power Subsystem Support
CONFIG_X86_INTEL_LPSS
为 Intel Lynx Point PCH 中的 Intel Low Power Subsystem 技术提供支持.这个芯片组主要是为采用LGA1150的Haswell处理器提供支持.
Single-depth WCHAN output
CONFIG_SCHED_OMIT_FRAME_POINTER
使用简化的 /proc/<PID>/wchan 值,禁用此选项会使用更加精确的wchan值(可以在"ps -l"结果的WCHAN域看到),但会轻微增加调度器消耗.
Linux guest support
CONFIG_HYPERVISOR_GUEST
如果这个内核将在虚拟机里面运行就开启,否则就关闭.
Enable paravirtualization code
CONFIG_PARAVIRT
半虚拟化(paravirtualization)支持.
paravirt-ops debugging
CONFIG_PARAVIRT_DEBUG
仅供调试.paravirt-ops是内核通用的半虚拟化接口.
Paravirtualization layer for spinlocks
CONFIG_PARAVIRT_SPINLOCKS
半虚拟化的自旋锁支持.开启之后运行在虚拟机里的内核速度会加快,但是运行在物理CPU上的宿主内核运行效率会降低(最多可能会降低5%).请根据实际情况选择.
Xen guest support
CONFIG_XEN
Xen半虚拟化技术支持
Enable Xen debug and tuning parameters in debugfs
CONFIG_XEN_DEBUG_FS
为Xen在debugfs中输出各种统计信息和调整选项.对性能有严重影响.仅供调试.
KVM Guest support (including kvmclock)
CONFIG_KVM_GUEST
KVM客户机支持(包括kvmclock).
Paravirtual steal time accounting
CONFIG_PARAVIRT_TIME_ACCOUNTING
允许进行更细粒度的 task steal time 统计.会造成性能的略微降低.仅在你确实需要的时候才开启.
Memtest
CONFIG_MEMTEST
为内核添加内存测试功能,也就是添加"memtest"内核引导参数以支持对内存进行"体检".仅在你确实知道这是什么东西并且确实需要的时候再开启.否则请关闭.
Processor family
处理器系列,请按照你实际使用的CPU选择."Generic-x86-64"表示通用于所有x86-64平台,而不是针对特定类型的CPU进行优化.
Supported processor vendors
CONFIG_PROCESSOR_SELECT
支持的CPU厂商,按实际情况选择.
Enable DMI scanning
CONFIG_DMI
允许扫描DMI(Desktop Management Interface)/SMBIOS(System Management BIOS)以获得机器的硬件配置,从而对已知的bug bios进行规避.具体涉及到哪些机器可参见"drivers/acpi/blacklist.c"文件.除非确定你的机器没有bug,否则请开启此项.
GART IOMMU support
CONFIG_GART_IOMMU
为较旧的AMD Athlon64/Opteron/Turion/Sempron CPU提供GART IOMMU支持.图形地址重映射表(Graphics Address Remapping Table)可以将物理地址不连续的系统内存映射成看上去连续的图形内存交给GPU使用,是一种挖CPU内存补GPU内存机制,这种机制也可以被认为是一种"伪IOMMU"(缺乏地址空间隔离和访问控制).开启此选项以后,在内存大于3G的系统上,传统的32位总线(PCI/AGP)的设备将可以使用完全DMA的方式直接访问原本超出32位寻址范围之外的系统内存区域.具体方法是:通过编程让设备在受GART控制的显存区域工作,然后使用GART将这个地址映射为真实的物理地址(4GB以上)来实现的.USB/声卡/IDE/SATA之类的设备常常需要它.开启此选项之后,除非同时开启了CONFIG_IOMMU_DEBUG选项或者使用了"iommu=force"内核引导参数,否则此特性仅在条件满足的情况下(内存足够大且确有支持GART的设备)激活.由于较新的AMD CPU都已配备了AMD IOMMU(应该使用CONFIG_AMD_IOMMU),故而仅建议在内存大于3G的老式AMD系统上选"Y".
IBM Calgary IOMMU support
CONFIG_CALGARY_IOMMU
IBM xSeries/pSeries 系列服务器的 Calgary IOMMU 支持.
Should Calgary be enabled by default?
CONFIG_CALGARY_IOMMU_ENABLED_BY_DEFAULT
开启此选项表示默认启用Calgary特性,关闭此选项表示默认禁用Calgary特性(可以使用"iommu=calgary"内核引导参数开启).
Enable Maximum number of SMP Processors and NUMA Nodes
CONFIG_MAXSMP
让内核支持x86_64平台所能支持的最大SMP处理器数量和最大NUMA节点数量.主要用于调试目的.
Maximum number of CPUs
CONFIG_NR_CPUS
支持的最大CPU数量,每个CPU要占8KB的内核镜像,最小有效值是"2",最大有效值是"512".注意:对于多核CPU而言,每个核算一个.
SMT (Hyperthreading) scheduler support
CONFIG_SCHED_SMT
Intel超线程技术(HyperThreading)支持.
Multi-core scheduler support
CONFIG_SCHED_MC
针对多核CPU进行调度策略优化
Preemption Model
内核抢占模式
No Forced Preemption (Server)
CONFIG_PREEMPT_NONE
禁止内核抢占,这是Linux的传统模式,可以得到最大的吞吐量,适合服务器和科学计算环境
Voluntary Kernel Preemption (Desktop)
CONFIG_PREEMPT_VOLUNTARY
自愿内核抢占,通过在内核中设置明确的抢占点以允许明确的内核抢占,可以提高响应速度,但是对吞吐量有不利影响.适合普通桌面环境的
Preemptible Kernel (Low-Latency Desktop)
CONFIG_PREEMPT
主动内核抢占,允许抢占所有内核代码,对吞吐量有更大影响,适合需要运行实时程序的场合或者追求最快响应速度的桌面环境.
Reroute for broken boot IRQs
CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS
这是一个对某些芯片组bug(在某些情况下会发送多余的"boot IRQ")的修复功能.开启此选项之后,仅对有此bug的芯片组生效.要检查哪些芯片组有此bug可以查看"drivers/pci/quirks.c"文件中的"quirk_reroute_to_boot_interrupts_intel"函数.
Machine Check / overheating reporting
CONFIG_X86_MCE
MCE(Machine Check Exception)支持.让CPU检测到硬件故障(过热/数据错误)时通知内核,以便内核采取相应的措施(如显示一条提示信息或关机等).更多信息可以"man mcelog"看看.可以通过"grep mce /proc/cpuinfo"检查CPU是否支持此特性,若支持建议选中,否则请关闭.当然,如果你对自己的硬件质量很放心,又是桌面系统的话,不选也无所谓.
Intel MCE features
CONFIG_X86_MCE_INTEL
Intel CPU 支持
AMD MCE features
CONFIG_X86_MCE_AMD
AMD CPU 支持
Machine check injector support
CONFIG_X86_MCE_INJECT
MCE注入支持,仅用于调试
Enable support for 16-bit segments
CONFIG_X86_16BIT
如果你需要使用Wine运行那些古董级的16位保护模式程序,就选"Y",否则选"N"
Dell laptop support
CONFIG_I8K
Dell Inspiron 8000 笔记本的 System Management Mode 驱动(i8k).该驱动可以读取CPU温度和风扇转速,进而帮助上层工具控制风扇转速.该驱动仅针对 Dell Inspiron 8000 笔记本进行过测试,所以不保证一定能适用于其他型号的Dell笔记本.
CPU microcode loading support
CONFIG_MICROCODE
CPU的微代码更新支持,建议选中.CPU的微代码更新就像是给CPU打补丁,用于纠正CPU的行为.更新微代码的常规方法是升级BIOS,但是也可以在Linux启动后更新.比如在Gentoo下,可以使用"emerge microcode-ctl"安装microcode-ctl服务,再把这个服务加入boot运行级即可在每次开机时自动更新CPU微代码.其他Linux系统可以参考这个帖子.
Intel microcode loading support
CONFIG_MICROCODE_INTEL
Intel CPU 微代码支持
AMD microcode loading support
CONFIG_MICROCODE_AMD
AMD CPU 微代码支持
Early load microcode
CONFIG_MICROCODE_INTEL_EARLY
支持从initrd镜像首部加载微代码,以便尽可能早的更新CPU微代码.即使在initrd首部并未嵌入微代码也不会造成问题,所以"Y"是安全的.不过你真的需要吗?笔者认为你一般并不需要:)
/dev/cpu/*/msr - Model-specific register support
CONFIG_X86_MSR
/dev/cpu/*/msr 设备支持.也就是允许用户空间的特权进程(使用rdmsr与wrmsr指令)访问x86的MSR寄存器(Model-Specific Register).MSR的作用主要用于调试,程序执行跟踪,性能及状态监控,以及触发特定的CPU特性(依CPU的不同而不同).msrtool工具可以转储出MSR的内容.不确定的可以选"N".
/dev/cpu/*/cpuid - CPU information support
CONFIG_X86_CPUID
/dev/cpu/*/cpuid 设备支持.可以通过cpuid命令获得详细的CPU信息(CPUID).不确定的可以选"N".
Enable 1GB pages for kernel pagetables
CONFIG_DIRECT_GBPAGES
允许内核页表使用大小为1GB的Hugepages并进行直线映射(linear mapping),需要高端CPU的支持(可以用"grep pdpe1gb /proc/cpuinfo"命令检查).这可以减小页表缓存(Translation Lookaside Buffer)的压力,从而提升系统的性能,这对于拥有海量内存并且运行某些特定应用(PosgreSQL,MySQL,Java,Memcached,KVM,Xen...)的系统来说比较有意义.如果你的CPU支持,可以选"Y".
Numa Memory Allocation and Scheduler Support
CONFIG_NUMA
开启 NUMA(Non Uniform Memory Access) 支持.虽然说集成了内存控制器的CPU都属于NUMA架构.但事实上,对于大多数只有一颗物理CPU的个人电脑而言,即使支持NUMA架构,也没必要开启此特性.可以参考SMP/NUMA/MPP体系结构对比.此外,对于不支持"虚拟NUMA",或"虚拟NUMA"被禁用的虚拟机(即使所在的物理机是NUMA系统),也应该关闭此项.
Old style AMD Opteron NUMA detection
CONFIG_AMD_NUMA
因为AMD使用一种旧式的方法读取NUMA配置信息(新式方法是CONFIG_X86_64_ACPI_NUMA),所以如果你使用的是AMD多核CPU,建议开启.不过,即使开启此选项,内核也会优先尝试CONFIG_X86_64_ACPI_NUMA方法,仅在失败后才会使用此方法,所以即使你不能确定CPU的类型也可以安全的选中此项.
ACPI NUMA detection
CONFIG_X86_64_ACPI_NUMA
使用基于 ACPI SRAT(System Resource Affinity Table) 技术的NUMA节点探测方法.这也是检测NUMA节点信息的首选方法,建议选中.
NUMA emulation
CONFIG_NUMA_EMU
仅供开发调试使用
Maximum NUMA Nodes (as a power of 2)
CONFIG_NODES_SHIFT
允许的最大NUMA节点数.需要注意其计算方法:最大允许节点数=2CONFIG_NODES_SHIFT.也就是说这里设置的值会被当做2的指数使用.取值范围是[1,10],也就最多允许1024个节点.
Memory model
内存模式."Sparse Memory"主要用来支持内存热插拔,相比其他两个旧有的内存模式,代码复杂性也比较低,而且还拥有一些性能上的优势,对某些架构而言是唯一的可选项.其他两个旧有的内存模式是:"Discontiguous Memory"和"Flat Memory".
Sparse Memory virtual memmap
CONFIG_SPARSEMEM_VMEMMAP
对于64位CPU而言,开启此选项可以简化pfn_to_page/page_to_pfn的操作,从而提高内核的运行效率.但是在32位平台则建议关闭.更多细节可以参考这个帖子.
Enable to assign a node which has only movable memory
CONFIG_MOVABLE_NODE
允许对一个完整的NUMA节点(CPU和对应的内存)进行热插拔.一般的服务器和个人电脑不需要这么高级的特性.
Allow for memory hot-add
CONFIG_MEMORY_HOTPLUG
支持向运行中的系统添加内存.也就是内存热插支持.
Allow for memory hot remove
CONFIG_MEMORY_HOTREMOVE
支持从运行中的系统移除内存.也就是内存热拔支持.
Allow for balloon memory compaction/migration
CONFIG_BALLOON_COMPACTION
允许 balloon memory 压缩/迁移.内存的Ballooning技术是指虚拟机在运行时动态地调整它所占用的宿主机内存资源,该技术在节约内存和灵活分配内存方面有明显的优势,目前所有主流虚拟化方案都支持这项技术(前提是客户机操作系统中必须安装有相应的balloon驱动).由于内存的动态增加和减少会导致内存过度碎片化,特别是对于2M尺寸的连续大内存页来说更加严重,从而严重降低内存性能.允许balloon内存压缩和迁移可以很好的解决在客户机中使用大内存页时内存过度碎片化问题.如果你打算在虚拟机中使用大内存页(huge page),那么建议开启,否则建议关闭.
Allow for memory compaction
CONFIG_COMPACTION
允许对大内存页(huge pages)进行压缩.主要是为了解决大内存页的碎片问题.建议在使用大内存页的情况下开启此项,否则建议关闭.
Page migration
CONFIG_MIGRATION
允许在保持虚拟内存页地址不变的情况下移动其所对应的物理内存页的位置.这主要是为了解决两个问题:(1)在NUMA系统上,将物理内存转移到相应的节点上,以加快CPU与内存之间的访问速度.(2)在分配大内存页的时候,可以避免碎片问题.
Enable bounce buffers
CONFIG_BOUNCE
为那些不能直接访问所有内存范围的驱动程序开启bounce buffer支持.当CONFIG_ZONE_DMA被开启后,这个选项会被默认开启(当然,你也可以在这里手动关闭).这主要是为了那些不具备IOMMU功能的PCI/ISA设备而设,但它对性能有些不利影响.在支持IOMMU的设备上,应该关闭它而是用IOMMU来代替.
Enable KSM for page merging
CONFIG_KSM
KSM(Kernel Samepage Merging)支持:周期性的扫描那些被应用程序标记为"可合并"的地址空间,一旦发现有内容完全相同的页面,就将它们合并为同一个页面,这样就可以节约内存的使用,但对性能有不利影响.推荐和内核虚拟机KVM(Documentation/vm/ksm.txt)或者其他支持"MADV_MERGEABLE"特性的应用程序一起使用.KSM并不默认开启,仅在应用程序设置了"MADV_MERGEABLE"标记,并且 /sys/kernel/mm/ksm/run 被设为"1"的情况下才会生效.
Low address space to protect from user allocation
CONFIG_DEFAULT_MMAP_MIN_ADDR
2009年,内核曾经爆过一个严重的NULL指针漏洞,由于其根源是将NULL指针映射到地址"0"所致,所以从2.6.32版本以后,为了防止此类漏洞再次造成严重后果,特别设置了此选项,用于指定受保护的内存低端地址范围(可以在系统运行时通过 /proc/sys/vm/mmap_min_addr 进行调整),这个范围内的地址禁止任何用户态程序的写入,以从根本上堵死此类漏洞可能对系统造成的损害.但内核这种强加的限制,对于需要使用vm86系统调用(用于在保护模式的进程中模拟8086的实模式)或者需要映射此低端地址空间的程序(bitbake,dosemu,qemu,wine,...)来说,则会造成不兼容,不过目前这些程序的新版本都进行了改进,以适应内核的这种保护.一般情况下,"4096"是个明智的选择,或者你也可以保持默认值.
Enable recovery from hardware memory errors
CONFIG_MEMORY_FAILURE
在具备MCA(Machine Check Architecture)恢复机制的系统上,允许内核在物理内存中的发生数据错误的情况下,依然坚强的纠正错误并恢复正常运行.这需要有相应的硬件(通常是ECC内存)支持.有ECC内存的选,没有的就别选了.
HWPoison pages injector
CONFIG_HWPOISON_INJECT
仅用于调试.
Transparent Hugepage Support
CONFIG_TRANSPARENT_HUGEPAGE
大多数现代计算机体系结构都支持多种不同的内存页面大小(比如x86_64支持4K和2M以及1G[需要cpu-flags中含有"pdpe1gb"]).大于4K的内存页被称为"大页"(Hugepage).TLB(页表缓存)是位于CPU内部的分页表(虚拟地址到物理地址的映射表)缓冲区,既高速又很宝贵(尺寸很小).如果系统内存很大(大于4G)又使用4K的内存页,那么分页表将会变得很大而难以在CPU内缓存,从而导致较高的TLB不命中概率,进而降低系统的运行效率.开启大内存页支持之后,就可以使用大页(2M或1G),从而大大缩小分页表的尺寸以大幅提高TLB的命中率,进而优化系统性能.传统上使用大内存页的方法是通过Hugetlbfs虚拟文件系统(CONFIG_HUGETLBFS),但是hugetlbfs需要专门进行配置以及应用程序的特别支持.所以从2.6.38版本开始引入了THP(Transparent Hugepages),目标是替代先前的Hugetlbfs虚拟文件系统(CONFIG_HUGETLBFS).THP允许内核在可能的条件下,透明的(对应用程序来说)使用大页(huge pages)与HugeTLB,THP不像hugetlbfs那样需要专门进行配置以及应用程序的特别支持.THP将这一切都交给操作系统来完成,也不再需要额外的配置,对于应用程序完全透明,因而可用于更广泛的应用程序.这对于数据库/KVM等需要使用大量内存的应用来说,可以提升其效能,但对于内存较小(4G或更少)的个人PC来说就没啥必要了.详见"Documentation/vm/transhuge.txt"文档.
Transparent Hugepage Support sysfs defaults
设置 /sys/kernel/mm/transparent_hugepage/enabled 文件的默认值."always"表示总是对所有应用程序启用透明大内存页支持,"madvise"表示仅对明确要求该特性的程序启用.建议选"always".
Cross Memory Support
CONFIG_CROSS_MEMORY_ATTACH
交叉内存支持,也就是process_vm_readv()和process_vm_writev()系统调用支持.从而允许有权限的进程直接读取/写入另外一个进程的地址空间.现在它们只用于openMPI快速进程通信,也可以用于调试程序.未来也许还会有其他用途.
Enable cleancache driver to cache clean pages if tmem is present
CONFIG_CLEANCACHE
Cleancache可以被看作是内存页的"Victim Cache"(受害者缓存),当回收内存页时,先不把它清空,而是把其加入到内核不能直接访问的"transcendent memory"中,这样支持Cleancache的文件系统再次访问这个页时可以直接从"transcendent memory"加载它,从而减少磁盘IO的损耗.目前只有zcache和XEN支持"transcendent memory",不过将来会有越来越多的应用支持.开启此项后即使此特性不能得到利用,也仅对性能有微小的影响,所以建议开启.更多细节请参考"Documentation/vm/cleancache.txt"文件.
Enable frontswap to cache swap pages if tmem is present
CONFIG_FRONTSWAP
Frontswap是和Cleancache非常类似的东西,在传统的swap前加一道内存缓冲(同样位于"transcendent memory"中).目的也是减少swap时的磁盘读写.CONFIG_ZSWAP依赖于它,建议开启.
Compressed cache for swap pages
CONFIG_ZSWAP
ZSWAP是一个放置在swap前面的压缩缓存,它可以将需要换出的页压缩存放在内存中的压缩池里,这样在压缩池没有满的时候,可以避免使用真正的swap设备.当压缩池满的时候,则把最老的页解压后写入swap设备.压缩池默认是内存总量的20%(/sys/module/zswap/parameters/max_pool_percent).ZSWAP不仅提升了swap的整体性能,也变相的增加了swap空间.选中此项后,可以通过"zswap.enabled=1"内核引导参数开启此功能.
Memory allocator for compressed pages
CONFIG_ZSMALLOC
zsmalloc压缩内存分配器主要用于给zram提供支持,建议与CONFIG_ZRAM同开关.参考:3种内存压缩方案对比.
Use page table mapping to access object in zsmalloc
CONFIG_PGTABLE_MAPPING
zsmalloc默认使用基于内存复制的对象映射方法来访问跨越不同页面的区域,但如果某些架构(例如ARM)执行虚拟内存映射的速度快于内存复制,那么应该将此项选"Y",这将导致zsmalloc使用页表映射而不是内存复制来进行对象的映射.你可以在你的系统上使用"https://github.com/spartacus06/zsmapbench"脚本来测试这两种方法的速度差异.在x86_64平台上,UBUNTU此项默认选"Y",但作者本人未经实验确认是否合理.
Check for low memory corruption
CONFIG_X86_CHECK_BIOS_CORRUPTION
低位内存脏数据检查,即使开启此选项,默认也不会开启此功能(需要明确使用"memory_corruption_check=1"内核引导选项).这些脏数据通常被认为是有bug的BIOS引起的,默认每60秒(可以通过memory_corruption_check_period内核参数进行调整)扫描一次0-64k(可以通过memory_corruption_check_size内核参数进行调整)之间的区域.这种检查所占用的开销非常小,基本可以忽略不计.如果始终检查到错误,则可以通过"memmap="内核引导参数来避免使用这段内存.一般没必要选中,如果你对BIOS不放心,带着它试运行一段时间,确认没问题之后再去掉.
Set the default setting of memory_corruption_check
CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK
设置memory_corruption_check的默认值,选中表示默认开启(相当于使用"memory_corruption_check=1"内核引导选项),不选中表示默认关闭.
Amount of low memory, in kilobytes, to reserve for the BIOS
CONFIG_X86_RESERVE_LOW
为BIOS设置保留的低端地址(默认是64K).内存的第一页(4K)存放的必定是BIOS数据,内核不能使用,所以必须要保留.但是有许多BIOS还会在suspend/resume/热插拔等事件发生的时候使用更多的页(一般在0-64K范围),所以默认保留0-64K范围.如果你确定自己的BIOS不会越界使用内存的话,可以设为"4",否则请保持默认值.但是也有一些很奇葩的BIOS会使用更多的低位内存,这种情况下可以考虑设为"640"以保留所有640K的低位内存区域.
MTRR (Memory Type Range Register) support
CONFIG_MTRR
MTRR(Memory type range registers)是CPU内的一组MSR(Model-specific registers),其作用是告诉CPU以哪种模式(write-back/uncachable)存取各内存区段效率最高.这对于AGP/PCI显卡意义重大,因为write-combining技术可以将若干个总线写传输捆绑成一次较大的写传输操作,可以将图像写操作的性能提高2.5倍或者更多.这段代码有着通用的接口,其他CPU的寄存器同样能够使用该功能.简而言之,开启此选项是个明智的选择.
MTRR cleanup support
CONFIG_MTRR_SANITIZER
MTRR cleanup的意思是将MTRR的连续输出转为离散的输出,这样X驱动就可以在其中添加writeback项,算是一种优化措施.建议开启.可以使用"mtrr_chunk_size"来限制最大的连续块尺寸.
MTRR cleanup enable value (0-1)
CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT
"1"表示默认开启CONFIG_MTRR_SANITIZER特性,相当于使用"enable_mtrr_cleanup","0"表示默认关闭CONFIG_MTRR_SANITIZER特性,相当于使用"disable_mtrr_cleanup".建议设为"1".
MTRR cleanup spare reg num (0-7)
CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT
这里设定的值等价于使用内核引导参数"mtrr_spare_reg_nr=N"中的"N".也就是告诉内核reg0N可以被清理或改写(参见"/proc/mtrr"文件).在多数情况下默认值是"1",其含义是 /proc/mtrr 中的 reg01 将会被映射.一般保持其默认值即可.修改此项的值通常是为了解决某些MTRR故障.
x86 PAT support
CONFIG_X86_PAT
PAT(Page Attribute Table)是对MTRR的补充,且比MTRR更灵活.如果你的CPU支持PAT(grep pat /proc/cpuinfo),那么建议开启.仅在开启后导致无法正常启动或者显卡驱动不能正常工作的情况下才需要关闭.
x86 architectural random number generator
CONFIG_ARCH_RANDOM
Intel 从 Ivy Bridge 微架构开始(对于Atom来说是从Silvermont开始),在CPU中集成了一个高效的硬件随机数生成器(称为"Bull Mountain"技术),并引入了一个新的x86指令"RDRAND",可以非常高效的产生随机数.此选项就是对此特性的支持.
Supervisor Mode Access Prevention
CONFIG_X86_SMAP
SMAP(Supervisor Mode Access Prevention)是Intel从Haswell微架构开始引入的一种新特征,它在CR4寄存器上引入一个新标志位SMAP,如果这个标志为1,内核访问用户进程的地址空间时就会触发一个页错误,目的是为了防止内核因为自身错误意外访问用户空间,这样就可以避免一些内核漏洞所导致的安全问题.但是由于内核在有些时候仍然需要访问用户空间,因此intel提供了两条指令STAC和CLAC用于临时打开/关闭这个功能,反复使用STAC和CLAC会带来一些轻微的性能损失,但考虑到增加的安全性,还是建议开启.
EFI runtime service support
CONFIG_EFI
EFI/UEFI支持.如果你打算在UEFI/EFI平台上安装Linux(2010年之后的机器基本都已经是UEFI规格了),那么就必须开启此项(开启后也依然可以在传统的BIOS机器上启动).UEFI启动流程与传统的BIOS相差很大.虽然Linux受到了所谓"安全启动"问题的阻挠(已经解决),但是UEFI依然将迅速一统江湖.[提示]在UEFI平台上安装Linux的关键之一是首先要用一个支持UEFI启动的LiveCD以UEFI模式启动机器.
EFI stub support
CONFIG_EFI_STUB
EFI stub 支持.如果开启此项,就可以不通过GRUB2之类的引导程序来加载内核,而直接由EFI固件进行加载,这样就可以不必安装引导程序了.不过这是一个看上去很美的特性,由于EFI固件只是简单的加载内核并运行,所以缺点有三:(1)不能在传统的BIOS机器上启动.(2)不能给内核传递引导参数.(3)不能使用intrd.不过,针对后两点的解决办法是:使用CONFIG_CMDLINE和CONFIG_INITRAMFS_SOURCE.更多细节可参考"Documentation/x86/efi-stub.txt"文档.
Enable seccomp to safely compute untrusted bytecode
CONFIG_SECCOMP
允许使用SECCOMP技术安全地运算非信任代码.通过使用管道或其他进程可用的通信方式作为文件描述符(支持读/写调用),就可以利用SECCOMP把这些应用程序隔离在它们自己的地址空间.这是一种有效的安全沙盒技术.systemd也强烈建议开启它.除非你是嵌入式系统,否则不要关闭.
Enable -fstack-protector buffer overflow detection
CONFIG_CC_STACKPROTECTOR
开启GCC的"-fstack-protector"命令行选项,以使用GCC中的编译器堆栈保护技术.这样可以有效的防御以堆栈溢出为代表的缓冲区溢出攻击,不过系统的运行速度也会受到一些影响.服务器之类强调安全的场合建议开启,个人PC之类的就不是很有必要了.
Timer frequency
内核时钟频率.对于要求快速响应的场合,比如桌面环境,建议使用1000Hz,而对于不需要快速响应的SMP/NUMA服务器,建议使用250Hz或100Hz或300Hz(主要处理多媒体数据).
kexec system call
CONFIG_KEXEC
提供kexec系统调用,可以不必重启而切换到另一个内核(不一定必须是Linux内核),不过这个特性并不总是那么可靠.如果你不确定是否需要它,那么就是不需要.
kernel crash dumps
CONFIG_CRASH_DUMP
当内核崩溃时自动导出运行时信息的功能,主要用于调试目的.更多信息请参考"Documentation/kdump/kdump.txt"文件.
kexec jump
CONFIG_KEXEC_JUMP
kexec jump 支持.这是对CONFIG_KEXEC的增强功能,仅在你确实明白这是干啥的情况下再开启,否则请关闭.
Physical address where the kernel is loaded
CONFIG_PHYSICAL_START
加载内核的物理地址.如果内核不是可重定位的(CONFIG_RELOCATABLE=n),那么bzImage会将自己解压到该物理地址并从此地址开始运行,否则,bzImage将忽略此处设置的值,而从引导装载程序将其装入的物理地址开始运行.仅在你确实知道自己是在干什么的情况下才可以改变该值,否则请保持默认.
Build a relocatable kernel
CONFIG_RELOCATABLE
使内核可以在浮动的物理内存位置加载,主要用于调试目的.仅在你确实知道为什么需要的时候再开启,否则请关闭.
Support for hot-pluggable CPUs
CONFIG_HOTPLUG_CPU
热插拔CPU支持(通过 /sys/devices/system/cpu 进行控制).
Set default setting of cpu0_hotpluggable
CONFIG_BOOTPARAM_HOTPLUG_CPU0
开启/关闭此项的意思是设置"cpu0_hotpluggable"的默认值为"on/off".开启此项表示默认将CPU0设置为允许热插拔.
Debug CPU0 hotplug
CONFIG_DEBUG_HOTPLUG_CPU0
仅用于调试目的.
Compat VDSO support
CONFIG_COMPAT_VDSO
是否将VDSO(Virtual Dynamic Shared Object)映射到旧式的确定性地址.如果Glibc版本大于等于2.3.3选"N",否则就选"Y".
Built-in kernel command line
CONFIG_CMDLINE_BOOL
将内核引导参数直接编进来.在无法向内核传递引导参数的情况下(比如在嵌入式系统上,或者想使用 EFI stub kernel),这就是唯一的救命稻草了.如果你使用grub之类的引导管理器,那么就可以不需要此特性.
Built-in kernel command string
CONFIG_CMDLINE
将要编译进内核的引导参数字符串.
Built-in command line overrides boot loader arguments
CONFIG_CMDLINE_OVERRIDE
开启此项表示完全忽略引导加载器传递过来的参数,并仅仅只使用CONFIG_CMDLINE所指定的参数.通常情况下建议关闭此项,除非你确定引导加载器在传递内核引导参数的时候不能正常工作.

Power management and ACPI options
电源管理和ACPI选项

Suspend to RAM and standby
CONFIG_SUSPEND
"休眠到内存"(ACPI S3)支持.也就是系统休眠后,除了内存之外,其他所有部件都停止工作,重开机之后可以直接从内存中恢复运行状态.要使用此功能,你需要执行"echo mem > /sys/power/state"命令,还需要在BIOS中开启S3支持,否则可能会有问题.
Enable freezer for suspend to RAM/standby
CONFIG_SUSPEND_FREEZER
选"Y".除非你知道自己在做什么
Hibernation (aka 'suspend to disk')
CONFIG_HIBERNATION
"休眠到硬盘"(ACPI S4)支持.也就是将内存的内容保存到硬盘(hibernation),所有部件全都停止工作.要使用此功能,你首先需要使用内核引导参数"resume=/dev/swappartition",然后执行"echo disk > /sys/power/state"命令.如果你不想从先前的休眠状态中恢复,那么可以使用"noresume"内核引导参数.更多信息,可以参考"Documentation/power/swsusp.txt"文件.
Default resume partition
CONFIG_PM_STD_PARTITION
默认的休眠分区.这个分区必须是swap分区.不过这里设置的值会被明确的内核引导参数中的值覆盖.
Opportunistic sleep
CONFIG_PM_AUTOSLEEP
这是一种从安卓借鉴过来的休眠方式.这个特性在安卓系统上被称为"suspend blockers"或"wakelocks".这是一种更激进的电源管理模式,以尽可能节约电力为目的.系统默认就处于休眠状态,仅为内存和少数唤醒系统所必须的设备供电,当有任务(唤醒源)需要运行的时候才唤醒相关组件工作,工作完成后又立即进入休眠状态.不过这些特性需要相应的设备驱动程序的支持.目前除了安卓设备,在PC和服务器领域,能够利用此特性的驱动还比较少,不过这是一项非常有前途的电源技术,喜欢尝鲜的可以考虑开启.
User space wakeup sources interface
CONFIG_PM_WAKELOCKS
允许用户空间的程序通过sys文件系统接口,创建/激活/撤销系统的"唤醒源".需要与CONFIG_PM_AUTOSLEEP配合使用.
Maximum number of user space wakeup sources (0 = no limit)
CONFIG_PM_WAKELOCKS_LIMIT
用户空间程序允许使用的"唤醒源"数量,"0"表示无限,最大值是"100000".
Garbage collector for user space wakeup sources
CONFIG_PM_WAKELOCKS_GC
对"唤醒源"对象使用垃圾回收.主要用于调试目的和Android环境.
Run-time PM core functionality
CONFIG_PM_RUNTIME
允许IO设备(比如硬盘/网卡/声卡)在系统运行时进入省电模式,并可在收到(硬件或驱动产生的)唤醒信号后恢复正常.此功能通常需要硬件的支持.建议在笔记本/嵌入式等需要节约电力的设备上选"Y".
Power Management Debug Support
CONFIG_PM_DEBUG
仅供调试使用
Enable workqueue power-efficient mode by default
CONFIG_WQ_POWER_EFFICIENT_DEFAULT
因为"per-cpu workqueue"的缓存更靠近对应的CPU,所以它比"unbound workqueue"拥有更好的性能,因此"per-cpu workqueue"首选的默认值.但另一方面"per-cpu workqueue"通常又比"unbound workqueue"需要消耗更多的电能.如果使用了"workqueue.power_efficient"内核引导参数,那么将默认使用"unbound workqueue"而不是"per-cpu workqueue"以降低功耗,但是性能会有微小的损失.选中此项表示默认开启"workqueue.power_efficient"内核引导参数.
ACPI (Advanced Configuration and Power Interface) Support
CONFIG_ACPI
高级配置与电源接口(Advanced Configuration and Power Interface)包括了软件和硬件方面的规范,目前已被软硬件厂商广泛支持,并且取代了许多过去的配置与电源管理接口,包括 PnP BIOS (Plug-and-Play BIOS), MPS(CONFIG_X86_MPPARSE), APM(Advanced Power Management) 等.总之,ACPI已经成为x86平台必不可少的组件,如果你没有特别的理由,务必选中此项.
Deprecated /proc/acpi files
CONFIG_ACPI_PROCFS
过时的 /proc/acpi 接口支持,建议关闭.
Deprecated power /proc/acpi directories
CONFIG_ACPI_PROCFS_POWER
过时的 /proc/acpi 接口支持,建议关闭.
EC read/write access through /sys/kernel/debug/ec
CONFIG_ACPI_EC_DEBUGFS
仅供调试使用.
Deprecated /proc/acpi/event support
CONFIG_ACPI_PROC_EVENT
过时的 /proc/acpi/event 接口支持,建议关闭.
AC Adapter
CONFIG_ACPI_AC
允许在外接交流电源和内置电池之间进行切换.
Battery
CONFIG_ACPI_BATTERY
允许通过 /proc/acpi/battery 接口查看电池信息.
Button
CONFIG_ACPI_BUTTON
允许守护进程通过 /proc/acpi/event 接口捕获power/sleep/lid(合上笔记本)按钮事件,并执行相应的动作,软关机(poweroff)也需要它的支持.
Video
CONFIG_ACPI_VIDEO
对主板上的集成显卡提供ACPI支持.注意:仅支持集成显卡.
Fan
CONFIG_ACPI_FAN
允许用户层的程序对风扇进行控制(开/关/查询状态)
Dock
CONFIG_ACPI_DOCK
支持兼容ACPI规范的扩展坞(比如 IBM Ultrabay 和 Dell Module Bay)支持.
Processor
CONFIG_ACPI_PROCESSOR
在支持 ACPI C2/C3 的CPU上,将ACPI安装为idle处理程序.有几种CPU频率调节驱动依赖于它.而且目前的CPU都已经支持ACPI规范,建议开启此项.
IPMI
CONFIG_ACPI_IPMI
允许ACPI使用IPMI(智能平台管理接口)的请求/应答消息访问BMC(主板管理控制器).IPMI通常出现在服务器中,以允许通过诸如ipmitool这样的工具监视服务器的物理健康特征(温度/电压/风扇状态/电源状态).
Processor Aggregator
CONFIG_ACPI_PROCESSOR_AGGREGATOR
支持 ACPI 4.0 加入的处理器聚合器(processor Aggregator)功能,以允许操作系统对系统中所有的CPU进行统一的配置和控制.目前只支持逻辑处理器idling功能,其目标是降低耗电量.
Thermal Zone
CONFIG_ACPI_THERMAL
ACPI thermal zone 支持.系统温度过高时可以及时调整工作状态以避免你的CPU被烧毁.目前所有CPU都支持此特性.务必开启.参见CONFIG_THERMAL选项.
NUMA support
CONFIG_ACPI_NUMA
通过读取系统固件中的ACPI表,获得NUMA系统的CPU及物理内存分布信息.NUMA系统必选.
Custom DSDT Table file to include
CONFIG_ACPI_CUSTOM_DSDT_FILE
允许将一个定制过的DSDT编译进内核.详情参见"Documentation/acpi/dsdt-override.txt"文档.看不懂的请保持空白.
ACPI tables override via initrd
CONFIG_ACPI_INITRD_TABLE_OVERRIDE
允许initrd更改 ACPI tables 中的任意内容. ACPI tables 是BIOS提供给OS的硬件配置数据,包括系统硬件的电源管理和配置管理.详情参见"Documentation/acpi/initrd_table_override.txt"文件.
Debug Statements
CONFIG_ACPI_DEBUG
详细的ACPI调试信息,不搞开发就别选.
PCI slot detection driver
CONFIG_ACPI_PCI_SLOT
将每个PCI插槽都作为一个单独的条目列在 /sys/bus/pci/slots/ 目录中,有助于将设备的物理插槽位置与逻辑的PCI总线地址进行对应.不确定的选"No".
Power Management Timer Support
CONFIG_X86_PM_TIMER
ACPI PM Timer,简称"ACPI Timer",是一种集成在主板上的硬件时钟发生器,提供3.579545MHz固定频率.这是比较传统的硬件时钟发生器(HPET则是比较新型的硬件时钟发生器),目前所有的主板都支持,而且是ACPI规范不可分割的部分.除非你确定不需要,否则必选.
Container and Module Devices
CONFIG_ACPI_CONTAINER
支持 NUMA节点/CPU/内存 的热插拔. Device ID: ACPI0004, PNP0A05, PNP0A06
Memory Hotplug
CONFIG_ACPI_HOTPLUG_MEMORY
内存热插拔支持. Device ID: PNP0C80
Smart Battery System
CONFIG_ACPI_SBS
智能电池系统(Smart Battery System)可以让笔记型电脑显示及管理详细精确的电池状态信息.使用锂电池的笔记本电脑必备利器.但遗憾的是并不是所有笔记本都支持这项特性.
Hardware Error Device
CONFIG_ACPI_HED
Hardware Error Device (Device ID: PNP0C33) 能够通过 SCI 报告一些硬件错误(通常是已经被纠正的错误).如果你的系统中有设备ID为"PNP0C33"的设备(比如某些Intel芯片组),那么就选上.
Allow ACPI methods to be inserted/replaced at run time
CONFIG_ACPI_CUSTOM_METHOD
允许在不断电的情况下直接对ACPI的功能进行删改,包含一定危险性,它允许root任意修改内存中内核空间的内容.仅用于调试.
Boottime Graphics Resource Table support
CONFIG_ACPI_BGRT
在 /sys/firmware/acpi/bgrt/ 中显示 ACPI Boottime Graphics Resource Table ,以允许操作系统获取固件中的启动画面(splash).
ACPI Platform Error Interface (APEI)
CONFIG_ACPI_APEI
高级平台错误接口(ACPI Platform Error Interface)是RAS(Reliability, Availability and Serviceability)的一部分,是定义在 ACPI 4.0 规范中的一个面向硬件错误管理的接口,主要是为了统一 firmware/BIOS 和 OS 之间的错误交互机制,使用标准的错误接口进行管理,同时也扩展了错误接口的内容以便实现更加灵活丰富的功能.
APEI Generic Hardware Error Source
CONFIG_ACPI_APEI_GHES
"Firmware First Mode"支持.由于BIOS/FIRMWARE是平台相关的,因此BIOS/FIRMWARE比OS更清楚硬件平台的配置情况,甚至包含各种必须的修正/定制/优化.这样,在"Firmware First"模式下,BIOS/FIRMWARE利用这一优势,可以有针对性的对发生的硬件错误进行分析/处理/分发,也可以更准确的记录错误的现场信息.这样,不但对硬件错误可以做出更准确,更复杂的处理,而且可以降低OS的复杂性和冗余度.建议开启.
APEI PCIe AER logging/recovering support
CONFIG_ACPI_APEI_PCIEAER
让 PCIe AER errors 首先通过 APEI firmware 进行报告.
APEI memory error recovering support
CONFIG_ACPI_APEI_MEMORY_FAILURE
让 Memory errors 首先通过 APEI firmware 进行报告.
APEI Error INJection (EINJ)
CONFIG_ACPI_APEI_EINJ
仅供调试使用.
APEI Error Record Serialization Table (ERST) Debug Support
CONFIG_ACPI_APEI_ERST_DEBUG
仅供调试使用
SFI (Simple Firmware Interface) Support
CONFIG_SFI
简单固件接口规范(Simple Firmware Interface)使用一种轻量级的简单方法(通过内存中的一张静态表格)从firmware向操作系统传递信息.目前这个规范仅用于第二代 Intel Atom 平台,其核心名称是"Moorestown".
CPU Frequency scaling
CONFIG_CPU_FREQ
CPUfreq子系统允许动态改变CPU主频,达到省电和降温的目的.现如今的CPU都已经支持动态频率调整,建议开启.不过,如果你是为虚拟机编译内核,就没有必要开启了,由宿主机内核去控制就OK了.
CPU frequency translation statistics
CONFIG_CPU_FREQ_STAT
通过sysfs文件系统输出CPU频率变化的统计信息
CPU frequency translation statistics details
CONFIG_CPU_FREQ_STAT_DETAILS
输出更详细的CPU频率变化统计信息
Default CPUFreq governor
默认的CPU频率调节策略.不同策略拥有不同的调节效果.
'performance' governor
CONFIG_CPU_FREQ_GOV_PERFORMANCE
'性能'优先,静态的将频率设置为cpu支持的最高频率.最耗电,发热量最大,性能/效率比最低.不建议使用.
'powersave' governor
CONFIG_CPU_FREQ_GOV_POWERSAVE
'节能'优先,静态的将频率设置为cpu支持的最低频率,严重影响性能.此调控器事实上并不能节省电能,因为系统需要花更长的时间才能进入空闲状态(C1E,C3,C6).不建议使用.
'userspace' governor for userspace frequency scaling
CONFIG_CPU_FREQ_GOV_USERSPACE
既允许手动调整cpu频率,也允许用户空间的程序动态的调整cpu频率(需要额外的调频软件).比较麻烦,不建议使用.
'ondemand' cpufreq policy governor
CONFIG_CPU_FREQ_GOV_ONDEMAND
'随需应变',内核周期性的考察CPU负载,当CPU负载超过/低于设定的百分比阈值(/sys/devices/system/cpu/cpufreq/ondemand/up_threshold)时,就自动将cpu频率设为最高/最低值(也就是仅在最高和最低频率间切换),比较适合台式机.[优化建议]将"up_threshold"设为95左右,可以获得更高的"性能/瓦特"比.
'conservative' cpufreq governor
CONFIG_CPU_FREQ_GOV_CONSERVATIVE
'保守',和'ondemand'相似,内核同样周期性的考察CPU负载,但是频率的升降是渐变式的(通常只在相邻的两档频率间切换,但具体取决于"/sys/devices/system/cpu/cpufreq/conservative/freq_step"的百分比设置,设为"100"则等价于仅允许在最高和最低频率间切换):当CPU负载超过百分比上限(/sys/devices/system/cpu/cpufreq/conservative/up_threshold)时,就自动提升一档CPU频率;当CPU负载低于百分比下限(/sys/devices/system/cpu/cpufreq/conservative/down_threshold)时,就自动降低一档CPU频率.更适合用于笔记本/PDA/x86_64环境.[优化建议]'conservative'在默认设置下的"性能/瓦特"比通常不如'ondemand'优秀,但是优化设置之后情况则可能反转.例如,在"down_threshold=93,up_threshold=97"的情况下,可以比"up_threshold=95"的'ondemand'略有优势.
x86 CPU frequency scaling drivers
CPU频率调节器驱动
Intel P state control
CONFIG_X86_INTEL_PSTATE
Intel CPU 的 P-state 驱动,面向"Sandy Bridge"/"Ivy Bridge"/"Haswell"或更新的CPU微架构,可以更好的支持"Turbo Boost 2.0"技术.
Processor Clocking Control interface driver
CONFIG_X86_PCC_CPUFREQ
PCC(Processor Clocking Control)接口支持.此种接口仅对某些HP Proliant系列服务器有意义.更多细节可以参考"Documentation/cpu-freq/pcc-cpufreq.txt"文件.
ACPI Processor P-States driver
CONFIG_X86_ACPI_CPUFREQ
这是首选的驱动(CONFIG_X86_INTEL_PSTATE也依赖于它),同时支持Intel和AMD的CPU.除非你的CPU实在太老,否则必选.
Legacy cpb sysfs knob support for AMD CPUs
CONFIG_X86_ACPI_CPUFREQ_CPB
为了兼容旧的用户空间程序而设置,建议关闭.
AMD Opteron/Athlon64 PowerNow!
CONFIG_X86_POWERNOW_K8
过时的驱动,仅为老旧的K8核心的AMD处理器提供支持.K10以及更新的CPU应该使用CONFIG_X86_ACPI_CPUFREQ驱动.
AMD frequency sensitivity feedback powersave bias
CONFIG_X86_AMD_FREQ_SENSITIVITY
如果你使用 AMD Family 16h 或者更高级别的处理器,同时又使用"ondemand"频率调节器,开启此项可以更有效的进行频率调节(在保证性能的前提下更节能).
Intel Enhanced SpeedStep (deprecated)
CONFIG_X86_SPEEDSTEP_CENTRINO
已被时代抛弃的驱动,仅对老旧的迅驰平台 Intel Pentium M 或者 Intel Xeons 处理器有意义.
Intel Pentium 4 clock modulation
CONFIG_X86_P4_CLOCKMOD
已被时代抛弃的驱动,仅对支持老旧的Speedstep技术的 Intel Pentium 4 / XEON 处理器有意义.而且即便是在这样的CPU上,因为种种兼容性问题可能导致的不稳定,也不建议开启.
CPU idle PM support
CONFIG_CPU_IDLE
CPU idle 指令支持,该指令可以让CPU在空闲时"打盹"以节约电力和减少发热.只要是支持ACPI的CPU就应该开启.由于所有64位CPU都已支持ACPI,所以不必犹豫,开启![提示]为虚拟机编译的内核就没有必要开启了,由宿主机内核去控制就OK了.
Support multiple cpuidle drivers
CONFIG_CPU_IDLE_MULTIPLE_DRIVERS
允许CONFIG_CPU_IDLE为每个不同的CPU使用不同的驱动.仅在你的系统由多个不同型号的CPU组成,并且具有不同的唤醒潜伏时间和状态的时候才需要开启.
Cpuidle Driver for Intel Processors
CONFIG_INTEL_IDLE
专用于Intel CPU的cpuidle驱动.而CONFIG_CPU_IDLE则是用于非Intel的CPU.
Memory power savings
内存节能
Intel chipset idle memory power saving driver
CONFIG_I7300_IDLE
在某些具备内存节能特性的intel服务器芯片组上,让内存也可以在空闲时通过idle指令"打盹".这些芯片组必须具备 I/O AT 支持(例如 Intel 7300).同时内存也需要支持此特性.

Bus options (PCI etc.)
总线选项

PCI support
CONFIG_PCI
PCI是最重要的内部总线,不但PCI与PCI Express设备依赖于它,而且USB/IDE/SATA/SCSI/火线(IEEE 1394)/PCMCIA/CardBus等各种内部和外部总线也都依赖于它.所以必须选"Y",除非你知道自己在干什么.
Support mmconfig PCI config space access
CONFIG_PCI_MMCONFIG
允许通过mmconfig方式访问PCI config space,这种访问方式比传统的IO方式速度更快.建议开启.MMCONFIG的意思是"Memory-Mapped config",它是PCI Express引入的新总线枚举方式.背景知识:PCI设备都有一组叫做'Configuration Space'的寄存器,PCI-E设备在PCI的基础上又增加了一组叫做'Extended Configuration Space'的寄存器.这些寄存器都被映射到了内存中(Memory-Mapped),操作系统理应提供相应的API供设备驱动和诊断程序访问这些'Configuration Space'.但如果操作系统没有提供Memory-Mapped方式的API的话,这些驱动程序和诊断程序就必须自己根据操作系统的底层规则(IO方式)去访问,这显然就增加了开发难度.这个选项的目的就是提供Memory-Mapped方式的API.
Read CNB20LE Host Bridge Windows
CONFIG_PCI_CNB20LE_QUIRK
CNB20LE芯片组PCI热插拔支持.除非你非常明确的知道你需要它,否则请关闭此项.
PCI Express support
CONFIG_PCIEPORTBUS
PCI Express是PCI的升级版并在软件层与PCI兼容,其目标是统一电脑内部总线.基本上只要不是古董机,都早已支持PCI-E了.选"Y".
PCI Express Hotplug driver
CONFIG_HOTPLUG_PCI_PCIE
如果你的主板和设备都支持PCI Express热插拔就可以选上.
Root Port Advanced Error Reporting support
CONFIG_PCIEAER
PCI Express Root Port Advanced Error Reporting (AER) 驱动支持.这样,发送到 Root Port 的 Error reporting messages 就会由 PCI Express AER 处理.建议开启.背景知识:PCI Express 定义了两种错误报告范例:(1)baseline,所有PCI-E组件都必须要支持,功能也比较基础.(2)AER(Advanced Error Reporting),功能比较高级,也更可靠,但并不要求所有组件都支持.
PCI Express ECRC settings control
CONFIG_PCIE_ECRC
允许覆写firmware/bios设置的 PCI Express ECRC(端对端循环冗余校验).建议关闭,除非你确实知道为什么要开启.
PCIe AER error injector support
CONFIG_PCIEAER_INJECT
允许 PCI-E AER 注入,仅用于测试目的.
PCI Express ASPM control
CONFIG_PCIEASPM
PCI Express ASPM(Active State Power Management) 和 Clock Power Management 支持.这是PCI-E规范制定的一种电源管理方案,可以在设备空闲时采用节电模式.建议开启.ASPM可以在运行时通过 /sys/module/pcie_aspm/parameters/policy 进行开启或关闭.
Debug PCI Express ASPM
CONFIG_PCIEASPM_DEBUG
仅供调试.
Default ASPM policy
默认的ASPM电源管理策略.下面的三个选项:"BIOS default"表示使用BIOS中的设置作为默认."Powersave"表示在可能的情况下,默认使用"L0s"和"L1",以尽可能节约电力."Performance"表示禁止使用"L0s"和"L1"(即使BIOS开启也同样禁止),以保证最高性能.
Message Signaled Interrupts (MSI and MSI-X)
CONFIG_PCI_MSI
PCI/PCI-E支持三类中断:(1)INTx使用传统的IRQ中断,可以与现行的驱动程序和操作系统兼容.(2)MSI是PCI2.2规范中新增的,通过写入特殊的内存地址来触发和发送中断,该种方式脱离了中断引脚带来的数目限制,并且延迟小/效率高.不过MSI方式将中断全部落在单个CPU上,对多核CPU利用不佳.(3)MSI-X是在PCI3.0规范中新增的,在MSI的基础上,支持更多的消息数量以及独立的消息地址,可以自动在多个CPU上分担中断,更适合多CPU系统.建议开启.开启后,也可以使用"pci=nomsi"内核引导参数关闭MSI特性.
PCI Debugging
CONFIG_PCI_DEBUG
将PCI调试信息输出到系统日志里.如果你想诊断PCI设备的故障,可以开启,否则应该关闭.
Enable PCI resource re-allocation detection
CONFIG_PCI_REALLOC_ENABLE_AUTO
让内核自动检测"是否需要重新分配PCI资源".即使此项已开启,你依然可以用"pci=realloc=[on|off]"来覆盖它.此项仅在已开启CONFIG_PCI_IOV的情况下才有意义.此时,如果BIOS没有为SR-IOV(Single-Root I/O Virtualization) BAR(基地址寄存器)分配资源,那么内核将会自动对PCI资源进行重新分配.建议与CONFIG_PCI_IOV同开关.
PCI Stub driver
CONFIG_PCI_STUB
PCI Stub driver 的作用是将PCI设备跟目前绑定的驱动分离,暂时由其接管,最后再交给虚拟机自己去驱动这个PCI设备.
Xen PCI Frontend
CONFIG_XEN_PCIDEV_FRONTEND
如果你使用XEN的半虚拟化技术,并且你的硬件支持IOMMU,那么可以开启此项,否则应该关闭.
Interrupts on hypertransport devices
CONFIG_HT_IRQ
允许本地的HyperTransport设备使用中断.这个一般用于AMD平台,Intel平台不支持这个.
PCI IOV support
CONFIG_PCI_IOV
PCI I/O Virtualization支持.这需要硬件支持IOMMU技术(AMD-Vi,Intel VT-d).
PCI PRI support
CONFIG_PCI_PRI
PCI Page Request Interface 支持.它允许IOMMU之后的设备能够从页错误中恢复过来.这需要硬件支持IOMMU技术(AMD-Vi,Intel VT-d).
PCI PASID support
CONFIG_PCI_PASID
PASID(Process Address Space Identifiers)可以被PCI设备用来同时访问多个IO地址空间.这需要硬件支持IOMMU技术(AMD-Vi,Intel VT-d).
PCI IO-APIC hotplug support
CONFIG_PCI_IOAPIC
PCI IO-APIC 热插拔支持.
ISA-style DMA support
CONFIG_ISA_DMA_API
ISA-style DMA控制器支持.目前基本只有LPC总线设备需要使用,最常见的是串口,并口,PS/2键盘,Super I/O芯片(可以使用Superiotool和sensors-detect工具检测).不确定的选"Y".[说明]这是一个历史遗留问题,对于ISA架构,DMA操作是由一个专用的"DMA控制器"(最常见的是Intel 8237)来执行的,但是到了PCI架构,由于每一个PCI设备都可以控制PCI总线(成为"bus master")并直接读写系统内存,所以"DMA控制器"又消失了.此选项只是为那些需要"ISA-DMA控制器"的设备提供了兼容性接口(API)而已.
PCCard (PCMCIA/CardBus) support
CONFIG_PCCARD
PCCard(PCMCIA/CardBus/ExpressCard)接口通常出现在笔记本电脑上,这些接口卡通常大小与信用卡差不多,厚度大约3-5毫米.注意:必须要配合pcmciautils工具才能正常使用PCMCIA设备.
16-bit PCMCIA support
CONFIG_PCMCIA
老旧的 16-bit PCMCIA 卡支持
Load CIS updates from userspace
CONFIG_PCMCIA_LOAD_CIS
有些PCMCIA卡需要从用户空间更新CIS(Card Information Structure)之后才能正常工作.开启此项后,内核将可以使用内置的固件加载器和热插拔子系统自动加载CIS,而不再需要用户空间工具的辅助.建议选"Yes".
32-bit CardBus support
CONFIG_CARDBUS
常见的PCMCIA卡基本上都是32位的CardBus与ExpressCard设备.如果你有这样的卡,就选"Yes".由于绝大多数的卡都是"yenta-compatible"的,所以一般你还需要选中CONFIG_YENTA项.
CardBus yenta-compatible bridge support
CONFIG_YENTA
使用PCMCIA卡的基本上都需要选择这一项,子项是一些拥有自己特定扩展的硬件,请按实际情况选择.
{省略的部分请按照自己实际使用的PCMCIA卡选择}
Support for PCI Hotplug
CONFIG_HOTPLUG_PCI
PCI热插拔不仅仅针对PCI和PCI-E设备,也包括CardBus与ExpressCard设备.请按需选择.
{省略的部分请按照自己实际使用PCI控制器进行选择}RapidIO support
CONFIG_RAPIDIO
RapidIO总线支持.这种总线主要用于嵌入式系统.
Discovery timeout duration (seconds)
CONFIG_RAPIDIO_DISC_TIMEOUT
等待主机完成枚举(也就是初始化)的超时秒数.
Enable RapidIO Input/Output Ports
CONFIG_RAPIDIO_ENABLE_RX_TX_PORTS
开启所有 RapidIO Input/Output 端口.
DMA Engine support for RapidIO
CONFIG_RAPIDIO_DMA_ENGINE
使用DMA引擎(CONFIG_DMADEVICES)进行RapidIO数据传输
RapidIO subsystem debug messages
CONFIG_RAPIDIO_DEBUG
将RapidIO调试信息输出到系统日志里.如果你想诊断RapidIO设备的故障,可以开启,否则应该关闭.
{省略的部分请按照自己实际使用的控制器进行选择}
Mark VGA/VBE/EFI FB as generic system framebuffer
CONFIG_X86_SYSFB
此选项的主要是为simplefb(可作为VGA/VBE/EFI FB的单一替代品通用于BIOS和UEFI平台)提供支持,仅在你确实需要开启CONFIG_FB_SIMPLE选项时才需要选"Y",否则请选"N".

Executable file formats / Emulations
可执行文件格式/仿真

Kernel support for ELF binaries
CONFIG_BINFMT_ELF
ELF是最常用的跨平台二进制文件格式,支持动态连接,支持不同的硬件平台,支持不同的操作系统.必选,除非你知道自己在做什么.
Write ELF core dumps with partial segments
CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS
如果你打算在此Linux上开发应用程序或者帮助别人调试bug,那么就选"Y",否则选"N".注意这里的调试和开发不是指内核调试和开发,是应用程序的调试和开发.
Kernel support for scripts starting with #!
CONFIG_BINFMT_SCRIPT
支持以"#!/path/to/interpreter"行开头的脚本.务必"Y",不要"M"或"N",除非你知道自己在做什么.
Kernel support for MISC binaries
CONFIG_BINFMT_MISC
允许插入二进制封装层到内核中,运行Java,.NET(Mono-based),Python,Emacs-Lisp等语言编写的程序时需要它,DOSEMU也需要它.想要更方便的使用此特性,你还需要使用"mount binfmt_misc -t binfmt_misc /proc/sys/fs/binfmt_misc"挂载binfmt_misc伪文件系统.具体详情可以参考"Documentation/binfmt_misc.txt"文档.
Enable core dump support
CONFIG_COREDUMP
核心转储(core dump)支持.如果你打算在此Linux上开发应用程序或者帮助别人调试bug,那么就选"Y",否则选"N".注意这里的调试和开发不是指内核调试和开发,是应用程序的调试和开发.
IA32 Emulation
CONFIG_IA32_EMULATION
允许在64位内核中运行32位代码.除非你打算使用纯64位环境,否则请开启此项.提示:GRUB2支持引导纯64位内核,但是GRUB不支持.
IA32 a.out support
CONFIG_IA32_AOUT
早期UNIX系统的可执行文件格式(32位),目前已经被ELF格式取代.除非你需要使用古董级的二进制程序.否则请关闭.
x32 ABI for 64-bit mode
CONFIG_X86_X32
允许32位程序使用完整的64位寄存器,以减小内存占用(memory footprint).这可以提高32位程序的运行性能.如果你使用binutils-2.22以上的版本(支持elf32_x86_64),就选"Y",否则选"N".

Networking support
网络支持

Networking options
CONFIG_NET
网络选项.systemd依赖于它
Packet socket
CONFIG_PACKET
链路层PF_PACKET套接字支持.可以让应用程序(比如:抓包工具tcpdump, DHCP客户端dhclient)直接与网络设备通讯,而无需使用内核中的其它中介协议.不确定的选"Y"或"M".
Packet: sockets monitoring interface
CONFIG_PACKET_DIAG
PF_PACKET套接字监控接口,ss这样的诊断工具需要它.
Unix domain sockets
CONFIG_UNIX
Unix domain sockets 支持.许多程序都使用它在操作系统内部进行进程间通信(IPC),比如: X Window, syslog, udev 等等.选"Y",除非你确实知道自己在做什么.
UNIX: socket monitoring interface
CONFIG_UNIX_DIAG
UNIX套接字监控接口,ss这样的工具需要它.
Transformation user configuration interface
CONFIG_XFRM_USER
为IPsec相关的工具提供Transformation(XFRM)用户配置接口
Transformation sub policy support
CONFIG_XFRM_SUB_POLICY
XFRM子策略支持,不确定的选"N".
Transformation migrate database
CONFIG_XFRM_MIGRATE
用于动态的更新 IPsec SA(security association) 的定位器(locator).这个特性对于手机这类移动设备来讲至关重要,因为它需要在不同的基站之间迁移.不确定的选"N".
Transformation statistics
CONFIG_XFRM_STATISTICS
转换统计,这不是SNMP/MIB规范的内容.用于调试目的.不确定的选"N".
PF_KEY sockets
CONFIG_NET_KEY
PF_KEYv2 套接字支持(与KAME兼容).PF_KEY协议族主要用来处理SA(安全关联),对SADB(SA数据库)进行管理,主要用在IPsec协议中.PF_KEY_v2的编程API在RFC2367中定义.
PF_KEY MIGRATE
CONFIG_NET_KEY_MIGRATE
向PF_KEYv2套接字中添加一个 PF_KEY MIGRATE 消息. PF_KEY MIGRATE 消息可用于动态的更新 IPsec SA(security association) 的定位器(locator).这个特性对于手机这类移动设备来讲至关重要,因为它需要在不同的基站之间迁移.不确定的选"N".
TCP/IP networking
CONFIG_INET
TCP/IP协议,必选!
IP: multicasting
CONFIG_IP_MULTICAST
IP组播(IP multicasting)支持.指的是一个发送者向一组特定的接收者发送数据,但只需发送一份数据副本.实际应用的场合很少,MBONE算是其中之一,与RTP等音视频协议相结合也算一种.不确定的选"N".
IP: advanced router
CONFIG_IP_ADVANCED_ROUTER
高级路由支持,需要开启内核的IP转发功能(echo 1 > /proc/sys/net/ipv4/ip_forward)才能正常工作.如果这个Linux系统用作专业的路由器就选上,选上之后还需要按需选择其下的子项.一般的主机不需要这个.
FIB TRIE statistics
CONFIG_IP_FIB_TRIE_STATS
主要用于测试TRIE性能
IP: policy routing
CONFIG_IP_MULTIPLE_TABLES
策略路由
IP: equal cost multipath
CONFIG_IP_ROUTE_MULTIPATH
用于基于目的地址的负载均衡
IP: verbose route monitoring
CONFIG_IP_ROUTE_VERBOSE
显示冗余的路由监控信息
IP: kernel level autoconfiguration
CONFIG_IP_PNP
在内核启动时自动配置网卡的ip地址/路由表,配置信息来自于以下途径:内核引导参数,自举协议(BOOTP),反向地址转换协议(RARP),动态主机配置协议(DHCP).通常,需要从网络启动的无盘工作站才需要这个东西(此时还需要开启CONFIG_ROOT_NFS),一般的发行版都通过启动脚本(dhcpcd/dhclient/ifconfig)配置网络.不确定的选"N".
IP: DHCP support
CONFIG_IP_PNP_DHCP
DHCP协议支持
IP: BOOTP support
CONFIG_IP_PNP_BOOTP
BOOTP协议支持
IP: RARP support
CONFIG_IP_PNP_RARP
RARP协议支持
IP: tunneling
CONFIG_NET_IPIP
IP隧道,主要目的是为了在TCP/IP网络中传输其他协议的数据包,当然也包括IP数据包(例如用于实现VPN).
IP: GRE demultiplexer
CONFIG_NET_IPGRE_DEMUX
GRE demultiplexer 支持.被CONFIG_NET_IPGRE和CONFIG_PPTP所依赖.
IP: GRE tunnels over IP
CONFIG_NET_IPGRE
基于IP的通用路由封装(Generic Routing Encapsulation)隧道支持.该驱动主要用于对端是Cisco路由器的场合,因为Cisco的路由器特别偏好GRE隧道(而不是CONFIG_NET_IPIP),并且GRE还允许通过隧道对组播进行再分发.
IP: broadcast GRE over IP
CONFIG_NET_IPGRE_BROADCAST
GRE/IP的一种应用是构建一个广播WAN(Wide Area Network),而其看上去却很像一个跑在互联网上的LAN(Local Area Network).如果你想要创建这样的网络,那么就选"Y"(还要加上CONFIG_IP_MROUTE).
IP: multicast routing
CONFIG_IP_MROUTE
组播路由支持.实际应用的场合很少,MBONE算是其中之一,不确定的选"N".
IP: multicast policy routing
CONFIG_IP_MROUTE_MULTIPLE_TABLES
通常,组播路由器上会运行一个单独的用户态守护进程,根据源地址和目的地址来处理数据包.开启此项后,将能同时考虑数据包所带的标记(mark)和所通过的网络接口,并可在用户空间同时运行多个守护进程,每一个进程处理一张路由表.
IP: PIM-SM version 1 support
CONFIG_IP_PIMSM_V1
Sparse Mode PIM (Protocol Independent Multicast) version 1 支持. 该协议被Cisco路由器广泛支持,你需要特定的软件(pimd-v1)才能使用它.
IP: PIM-SM version 2 support
CONFIG_IP_PIMSM_V2
Sparse Mode PIM (Protocol Independent Multicast) version 2 支持. 该协议的使用并不广泛,你需要特定的软件(pimd 或 gated-5)才能使用它.
IP: ARP daemon support
CONFIG_ARPD
通常情况下,内核自身会使用ARP协议解析本地网络中的IP地址与MAC地址的对应关系,并进行缓存.开启此项后,内核将使用用户空间的守护进程进行ARP解析.这主要是为了使用其他的替代解析协议(比如mGRE隧道中的NHRP),或调试目的.不确定的选"N".
IP: TCP syncookie support
CONFIG_SYN_COOKIES
TCP syncookie 支持,这是抵抗SYN flood攻击的好东西.此特性的开关可以通过"/proc/sys/net/ipv4/tcp_syncookies"文件控制,写入"1"表示开启,写入"0"表示关闭.建议服务器环境开启此项.
Virtual (secure) IP: tunneling
CONFIG_NET_IPVTI
虚拟IP隧道.可以和xfrm隧道一起使用,以实现IPSEC安全隧道,并在其上使用路由协议.不确定的选"N".
IP: AH transformation
CONFIG_INET_AH
IPsec AH 支持.IPsec验证头(AH)可对整个数据包(IP报头与数据)提供身份验证/完整性/抗重播保护.但是它不提供保密性,即它不对数据进行加密.由于这个原因,AH头正在慢慢被ESP头取代.
IP: ESP transformation
CONFIG_INET_ESP
IPsec ESP 支持.IPsec封装安全负载(ESP)不仅为IP负载提供身份验证/完整性/抗重播保护,还提供保密性,也就是还对数据进行加密.ESP有两种使用模式:传输模式(ESP不对整个数据包进行签名,只对IP负载(不含IP报头)进行保护)和隧道模式(将原始IP包封装进新的带有ESP头的IP包内,可提供完整的保护).ESP可以独立使用,也可与AH组合使用(越来越少).
IP: IPComp transformation
CONFIG_INET_IPCOMP
IP静荷载压缩协议(IP Payload Compression Protocol)(RFC3173)支持.用于支持IPsec
IP: IPsec transport mode
CONFIG_INET_XFRM_MODE_TRANSPORT
IPsec传输模式.常用于对等通信,用以提供内网安全.数据包经过了加密但IP头没有加密,因此任何标准设备或软件都可查看和使用IP头
IP: IPsec tunnel mode
CONFIG_INET_XFRM_MODE_TUNNEL
IPsec隧道模式.用于提供外网安全(包括虚拟专用网络).整个数据包(数据头和负载)都已经过加密处理且分配有新的ESP头/IP头/验证尾,从而能够隐藏受保护站点的拓扑结构
IP: IPsec BEET mode
CONFIG_INET_XFRM_MODE_BEET
IPsec BEET模式.
Large Receive Offload (ipv4/tcp)
CONFIG_INET_LRO
LRO(Large Receive Offload) (ipv4/tcp) 支持.它通过将多个TCP数据整合在一个skb结构中,并在稍后的某个时刻作为一个大的数据包交付给上层的网络协议栈,以减少上层协议栈处理skb的开销,提高Linux系统接收TCP数据包的能力.目前,主流网卡驱动都已支持此特性.建议开启.不过,LRO不应该在路由器上开启,因为它破坏了end-to-end原则,并会对路由性能造成显著的不利影响.
INET: socket monitoring interface
CONFIG_INET_DIAG
INET(TCP,DCCP,...) socket 监视接口,一些Linux本地工具(如:包含ss的iproute2)需要使用它
UDP: socket monitoring interface
CONFIG_INET_UDP_DIAG
UDP socket 监视接口,一些Linux本地工具(如:包含ss的iproute2)需要使用它
TCP: advanced congestion control
CONFIG_TCP_CONG_ADVANCED
高级拥塞控制,子项提供多种拥塞控制算法供选用.如果没有特殊需求就别选了,内核会自动将默认的拥塞控制设为"CUBIC"并将"new Reno"作为候补.仅在你确实知道自己需要的情况下选"Y".不确定的选"N".
TCP: MD5 Signature Option support (RFC2385)
CONFIG_TCP_MD5SIG
RFC2385中描述了一种对TCP会话进行MD5签名的保护机制.目前仅用于保护互联网运营商骨干路由器间的BGP会话.一般的路由器/服务器等设备根本不需要这个.
The IPv6 protocol
CONFIG_IPV6
引领未来的IPv6支持.
IPv6: Privacy Extensions (RFC 3041) support
CONFIG_IPV6_PRIVACY
IPv6利用"Stateless Address Autoconfiguration"在无DHCP服务器的情况下,产生可用的"临时IPv6地址".而本选项则为这个机制增加"隐私扩展"(RFC4941)保护.默认状态下,内核并不生产"临时地址",需要"echo 2 >/proc/sys/net/ipv6/conf/all/use_tempaddr"才能开启
IPv6: Router Preference (RFC 4191) support
CONFIG_IPV6_ROUTER_PREF
主机连上IPv6网络后,会发出路由器邀请包(Router Solicitation),路由器则应答路由器公告包(Router Advertisement),其中包含网关地址/IPv6前缀/DNS地址,这样主机就能取得IPv6地址,并连接到互联网上,这就是无状态地址自动分配(StateLess Address AutoConfiguration)."Router Preference"是"Router Advertisement"包的可选扩展.它可以改进主机选中路由器的能力,特别是在多归属(multi-homed)网络中.不确定的选"N".
IPv6: Route Information (RFC 4191) support
CONFIG_IPV6_ROUTE_INFO
对"Route Information"的实验性支持.
IPv6: Enable RFC 4429 Optimistic DAD
CONFIG_IPV6_OPTIMISTIC_DAD
乐观重复地址检测(Optimistic Duplicate Address Detection)的实验性支持.可以更快的进行自动地址配置.不确定的选"N".
IPv6: AH transformation
CONFIG_INET6_AH
IPsec AH 支持.不确定的选"Y"或"M".AH头正在慢慢被ESP头取代.
IPv6: ESP transformation
CONFIG_INET6_ESP
IPsec ESP 支持.不确定的选"Y"或"M".
IPv6: IPComp transformation
CONFIG_INET6_IPCOMP
IPv6静荷载压缩协议(IP Payload Compression Protocol)(RFC3173)支持.用于支持IPsec.不确定的选"Y"或"M".
IPv6: Mobility
CONFIG_IPV6_MIP6
移动IPv6(RFC3775)支持.主要用于移动设备.不确定的选"N".
IPv6: IPsec transport mode
CONFIG_INET6_XFRM_MODE_TRANSPORT
IPsec传输模式.常用于对等通信,用以提供内网安全.数据包经过了加密但IP头没有加密,因此任何标准设备或软件都可查看和使用IP头.不确定的选"Y"或"M".
IPv6: IPsec tunnel mode
CONFIG_INET6_XFRM_MODE_TUNNEL
IPsec隧道模式.用于提供外网安全(包括虚拟专用网络).整个数据包(数据头和负载)都已经过加密处理且分配有新的ESP头/IP头/验证尾,从而能够隐藏受保护站点的拓扑结构.不确定的选"Y"或"M".
IPv6: IPsec BEET mode
CONFIG_INET6_XFRM_MODE_BEET
IPsec BEET模式.不确定的选"Y"或"M".
IPv6: MIPv6 route optimization mode
CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION
移动IPv6(Mobile IPv6)路由优化模式.主要用于移动设备.不确定的选"N".
IPv6: IPv6-in-IPv4 tunnel (SIT driver)
CONFIG_IPV6_SIT
在IPv4网络上建立IPv6隧道.如果你希望可以通过IPv4网络接入一个IPv6网络,可以选"Y"或"M",否则选"N".
IPv6: IPv6 Rapid Deployment (6RD)
CONFIG_IPV6_SIT_6RD
IPv6快速部署(6RD)支持.不确定的选"N".
IPv6: IP-in-IPv6 tunnel (RFC2473)
CONFIG_IPV6_TUNNEL
IPv6-in-IPv6/IPv4-in-IPv6 隧道(RFC2473)支持.不确定的选"N".
IPv6: GRE tunnel
CONFIG_IPV6_GRE
基于IPv6的通用路由封装(Generic Routing Encapsulation)隧道支持.该驱动主要用于对端是Cisco路由器的场合,因为Cisco的路由器特别偏好GRE隧道(而不是CONFIG_IPV6_TUNNEL),并且GRE还允许通过隧道对组播进行再分发.
IPv6: Multiple Routing Tables
CONFIG_IPV6_MULTIPLE_TABLES
多重路由表(Multiple Routing Tables)支持.不确定的选"N".
IIPv6: source address based routing
CONFIG_IPV6_SUBTREES
允许根据源地址或前缀进行路由.不确定的选"N".
IPv6: multicast routing
CONFIG_IPV6_MROUTE
测试性的IPv6组播路由支持.实际应用的场合很少,不确定的选"N".
IPv6: multicast policy routing
CONFIG_IPV6_MROUTE_MULTIPLE_TABLES
通常,组播路由器上会运行一个单独的用户态守护进程,根据源地址和目的地址来处理数据包.开启此项后,将能同时考虑数据包所带的标记(mark)和所通过的网络接口,并可在用户空间同时运行多个守护进程,每一个进程处理一张路由表.
IPv6: PIM-SM version 2 support
CONFIG_IPV6_PIMSM_V2
IPv6 PIM multicast routing protocol PIM-SMv2 支持.
NetLabel subsystem support
CONFIG_NETLABEL
NetLabel子系统支持.NetLabel子系统为诸如CIPSO与RIPSO之类能够在分组信息上添加标签的协议提供支持,看不懂就别选了.
Security Marking
CONFIG_NETWORK_SECMARK
对网络包进行安全标记,类似于nfmark,但主要是为安全目的而设计.看不懂的就别选了
Timestamping in PHY devices
CONFIG_NETWORK_PHY_TIMESTAMPING
允许在硬件支持的前提下,为物理层(PHY)数据包打上时间戳.这会略微增加发送与接收的开销.不确定的选"N".
Network packet filtering framework (Netfilter)
CONFIG_NETFILTER
Netfilter可以对数据包进行过滤和修改,可以作为防火墙("packet filter"或"proxy-based")或网关(NAT)或代理(proxy)或网桥使用.
Network packet filtering debugging
CONFIG_NETFILTER_DEBUG
仅供开发者调试Netfilter使用
Advanced netfilter configuration
CONFIG_NETFILTER_ADVANCED
选"Y"将会显示所有模块供用户选择,选"N"则会隐藏一些不常用的模块,并自动将常用模块设为"M".
Bridged IP/ARP packets filtering
CONFIG_BRIDGE_NETFILTER
如果你希望使用桥接防火墙就打开它.不确定的选"N".
Core Netfilter Configuration
核心Netfilter配置(当包流过Chain时如果match某个规则那么将由该规则的target来处理,否则将由同一个Chain中的下一个规则进行匹配,若不match所有规则那么最终将由该Chain的policy进行处理)
Netfilter NFACCT over NFNETLINK interface
CONFIG_NETFILTER_NETLINK_ACCT
允许通过NFNETLINK接口支持NFACCT(记账).
Netfilter NFQUEUE over NFNETLINK interface
CONFIG_NETFILTER_NETLINK_QUEUE
允许通过NFNETLINK接口支持NFQUEUE(排队).
Netfilter LOG over NFNETLINK interface
CONFIG_NETFILTER_NETLINK_LOG
允许通过NFNETLINK接口支持"LOG"(日志).该选项废弃了ipt_ULOG和ebg_ulog机制,并打算在将来废弃基于syslog的ipt_LOG和ip6t_LOG模块.
Netfilter connection tracking support
CONFIG_NF_CONNTRACK
连接追踪(connection tracking)支持,连接跟踪把所有连接都保存在一个表格内,并将每个包关联到其所属的连接.可用于报文伪装或地址转换,也可用于增强包过滤能力.
Connection mark tracking support
CONFIG_NF_CONNTRACK_MARK
允许对连接进行标记,与针对单独的包进行标记的不同之处在于它是针对连接流的. CONNMARK target 和 connmark match 需要它的支持.
Connection tracking security mark support
CONFIG_NF_CONNTRACK_SECMARK
允许对连接进行安全标记,通常这些标记包(SECMARK)复制到其所属连接(CONNSECMARK),再从连接复制到其关联的包(SECMARK).
Connection tracking zones
CONFIG_NF_CONNTRACK_ZONES
"conntrack zones"支持.通常,每个连接需要一个全局唯一标示符,而"conntrack zones"允许在不同zone内的连接使用相同的标识符.
Supply CT list in procfs (OBSOLETE)
CONFIG_NF_CONNTRACK_PROCFS
已被废弃,选"N".
Connection tracking events
CONFIG_NF_CONNTRACK_EVENTS
连接跟踪事件支持.如果启用这个选项,连接跟踪代码将提供一个"notifier"链,它可以被其它内核代码用来获知连接跟踪状态的改变
Connection tracking timeout
CONFIG_NF_CONNTRACK_TIMEOUT
连接跟踪"timeout"扩展.这样你就可以在网络流上通过 CT target 附加超时策略.
Connection tracking timestamping
CONFIG_NF_CONNTRACK_TIMESTAMP
时间戳支持.这样你就能在连接建立和断开时打上时间戳.
DCCP protocol connection tracking support
CONFIG_NF_CT_PROTO_DCCP
DCCP协议支持.
SCTP protocol connection tracking support
CONFIG_NF_CT_PROTO_SCTP
SCTP协议支持.
UDP-Lite protocol connection tracking support
CONFIG_NF_CT_PROTO_UDPLITE
UDP-Lite支持.
Amanda backup protocol support
CONFIG_NF_CONNTRACK_AMANDA
Amanda备份协议支持.
FTP protocol support
CONFIG_NF_CONNTRACK_FTP
文件传输协议(FTP)支持.跟踪FTP连接需要额外的帮助程序.
H.323 protocol support
CONFIG_NF_CONNTRACK_H323
H.323协议支持.
IRC protocol support
CONFIG_NF_CONNTRACK_IRC
IRC扩展协议DCC(Direct Client-to-Client Protocol)支持.该协议允许用户之间绕开服务器直接聊天和传输文件.
NetBIOS name service protocol support
CONFIG_NF_CONNTRACK_NETBIOS_NS
NetBIOS协议支持.
SNMP service protocol support
CONFIG_NF_CONNTRACK_SNMP
SNMP协议支持.
PPtP protocol support
CONFIG_NF_CONNTRACK_PPTP
RFC2637 点对点隧道协议(Point to Point Tunnelling Protocol) 协议支持.
SANE protocol support
CONFIG_NF_CONNTRACK_SANE
SANE协议支持.
SIP protocol support
CONFIG_NF_CONNTRACK_SIP
SIP协议支持.
TFTP protocol support
CONFIG_NF_CONNTRACK_TFTP
TFTP协议支持.
Connection tracking netlink interface
CONFIG_NF_CT_NETLINK
基于netlink的用户接口支持.
Connection tracking timeout tuning via Netlink
CONFIG_NF_CT_NETLINK_TIMEOUT
通过Netlink机制支持对连接追踪超时进行细粒度的调节:允许为特定的网络流指定超时策略,而不是使用统一的全局超时策略.
Connection tracking helpers in user-space via Netlink
CONFIG_NF_CT_NETLINK_HELPER
通过Netlink机制为用户空间的连接追踪帮助程序提供基础框架.
NFQUEUE integration with Connection Tracking
CONFIG_NETFILTER_NETLINK_QUEUE_CT
开启此项后,即使网络包已经在队列(NFQUEUE)中,它依然可以包含连接追踪信息.
Transparent proxying support
CONFIG_NETFILTER_TPROXY
透明代理支持,也就是可以处理非本地的 IPv4 TCP/UDP 套接字.此功能需要配合一些iptables规则和策略路由才能工作.详见"Documentation/networking/tproxy.txt"文档.
Netfilter Xtables support (required for ip_tables)
CONFIG_NETFILTER_XTABLES
如果你打算使用 ip_tables, ip6_tables, arp_tables 之一就必须选上
nfmark target and match support
CONFIG_NETFILTER_XT_MARK
"nfmark"是用户给包打上的一个自定义标记.用于match时,允许基于"nfmark"值对包进行匹配.用于target时,允许在"mangle"表中创建规则以改变包的"nfmark"值.
ctmark target and match support
CONFIG_NETFILTER_XT_CONNMARK
"ctmark"是用户以连接为组,给同一连接中的所有包打上的自定义标记.用法与"nfmark"相似.
set target and match support
CONFIG_NETFILTER_XT_SET
"set"是ipset工具创建的IP地址集合.使用match可以对IP地址集合进行匹配,使用target可以对集合中的项进行增加和删除.
AUDIT target support
CONFIG_NETFILTER_XT_TARGET_AUDIT
为被drop/accept的包创建审计记录.
CHECKSUM target support
CONFIG_NETFILTER_XT_TARGET_CHECKSUM
用于"mangle"表,为缺少校验和的包添加checksum字段的值.主要是为了兼容一些老旧的网络程序(例如某些dhcp客户端).
"CLASSIFY" target support
CONFIG_NETFILTER_XT_TARGET_CLASSIFY
允许为包设置优先级,一些qdiscs排队规则(atm,cbq,dsmark,pfifo_fast,htb,prio)需要使用它
"CONNMARK" target support
CONFIG_NETFILTER_XT_TARGET_CONNMARK
这只是一个兼容旧配置的选项,等价于CONFIG_NETFILTER_XT_CONNMARK
"CONNSECMARK" target support
CONFIG_NETFILTER_XT_TARGET_CONNSECMARK
针对链接进行安全标记,同时还会将连接上的标记还原到包上(如果链接中的包尚未进行安全标记),通常与 SECMARK target 联合使用
"CT" target support
CONFIG_NETFILTER_XT_TARGET_CT
允许为包加上连接追踪相关的参数,比如"event"和"helper".
"DSCP" and "TOS" target support
CONFIG_NETFILTER_XT_TARGET_DSCP
DSCP target 允许对IPv4/IPv6包头部的DSCP(Differentiated Services Codepoint)字段(常用于Qos)进行修改. TOS target 允许在"mangle"表创建规则以修改IPv4包头的TOS(Type Of Service)字段或IPv6包头的Priority字段.
"HL" hoplimit target support
CONFIG_NETFILTER_XT_TARGET_HL
HL(IPv6)/TTL(IPv4) target 允许更改包头的 hoplimit/time-to-live 值.
"HMARK" target support
CONFIG_NETFILTER_XT_TARGET_HMARK
允许在"raw"和"mangle"表中创建规则,以根据特定范围的哈希计算结果设置"skbuff"标记.
IDLETIMER target support
CONFIG_NETFILTER_XT_TARGET_IDLETIMER
每个被匹配的包的定时器都会被强制指定为规则指定的值,当超时发生时会触发一个sysfs文件系统的通知.剩余时间可以通过sysfs读取.
"LED" target support
CONFIG_NETFILTER_XT_TARGET_LED
允许在满足特定条件的包通过的时候,触发LED灯闪烁.比如可以用于控制网卡的状态指示灯仅在有SSH活动的时候才闪烁.
LOG target support
CONFIG_NETFILTER_XT_TARGET_LOG
允许向syslog中记录包头信息.
"MARK" target support
CONFIG_NETFILTER_XT_TARGET_MARK
这只是一个兼容旧配置的选项,等价于CONFIG_NETFILTER_XT_MARK
"NETMAP" target support
CONFIG_NETFILTER_XT_TARGET_NETMAP
NETMAP用于实现一对一的静态NAT(地址转换).
"NFLOG" target support
CONFIG_NETFILTER_XT_TARGET_NFLOG
通过nfnetlink_log记录日志.
"NFQUEUE" target Support
CONFIG_NETFILTER_XT_TARGET_NFQUEUE
用于替代老旧的 QUEUE target. 因为NFQUEUE能支持最多65535个队列,而QUEUE只能支持一个.
"NOTRACK" target support (DEPRECATED)
CONFIG_NETFILTER_XT_TARGET_NOTRACK
已被废弃,勿选.
"RATEEST" target support
CONFIG_NETFILTER_XT_TARGET_RATEEST
RATEEST target 允许测量网络流的传输速率.[注: rateest match 允许根据速率进行匹配.]
REDIRECT target support
CONFIG_NETFILTER_XT_TARGET_REDIRECT
REDIRECT是一种特别的NAT:所有进入的连接都被映射到其入口网卡的地址,这样这些包就会"流入"本机而不是"流过"本机.这主要用于实现透明代理.
"TEE" - packet cloning to alternate destination
CONFIG_NETFILTER_XT_TARGET_TEE
对包进行克隆,并将克隆的副本路由到另一个临近的路由器(Next Hop).
"TPROXY" target support
CONFIG_NETFILTER_XT_TARGET_TPROXY
类似于REDIRECT,但并不依赖于连接追踪和NAT,也只能用于"mangle"表,用于将网络流量重定向到透明代理.
"TRACE" target support
CONFIG_NETFILTER_XT_TARGET_TRACE
允许对包打标记,这样内核就可以记录每一个匹配到的规则.
"SECMARK" target support
CONFIG_NETFILTER_XT_TARGET_SECMARK
允许对包进行安全标记,用于安全子系统
"TCPMSS" target support
CONFIG_NETFILTER_XT_TARGET_TCPMSS
允许更改 TCP SYN 包的MSS(Maximum Segment Size)值,通常=MTU-40.
"TCPOPTSTRIP" target support
CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP
允许从TCP包头中剥离所有TCP选项.
"addrtype" address type match support
CONFIG_NETFILTER_XT_MATCH_ADDRTYPE
根据地址类型进行匹配: UNICAST, LOCAL, BROADCAST, ...
"bpf" match support
CONFIG_NETFILTER_XT_MATCH_BPF
BPF(BSD Packet Filter)是一个强大的包匹配模块,用于匹配那些让过滤器返回非零值的包.
"cluster" match support
CONFIG_NETFILTER_XT_MATCH_CLUSTER
这个模块可以用于创建网络服务器/防火墙集群,而无需借助价格昂贵的负载均衡设备.通常,在包必须被本节点处理的条件下,这个match返回"true".这样,所有节点都可以看到所有的包,但只有匹配的节点才需要进行处理,这样就将负载进行了分摊.而分摊算法是基于对源地址的哈希值.
"comment" match support
CONFIG_NETFILTER_XT_MATCH_COMMENT
这是一个"伪match",目的是允许你在iptables规则集中加入注释
"connbytes" per-connection counter match support
CONFIG_NETFILTER_XT_MATCH_CONNBYTES
允许针对单个连接内部每个方向(进/出)匹配已经传送的字节数/包数
"connlabel" match support
CONFIG_NETFILTER_XT_MATCH_CONNLABEL
允许向连接分配用户自定义的标签名.内核仅存储bit值,而名称和bit之间的对应关系由用户空间处理.与"connmark"的不同之处在于:可以同时为一个连接分配32个标志位(flag bit).
"connlimit" match support
CONFIG_NETFILTER_XT_MATCH_CONNLIMIT
允许根据每一个客户端IP地址(或每一段客户端IP地址段)持有的并发连接数进行匹配.
"connmark" connection mark match support
CONFIG_NETFILTER_XT_MATCH_CONNMARK
这只是一个兼容旧配置的选项,等价于CONFIG_NETFILTER_XT_CONNMARK
"conntrack" connection tracking match support
CONFIG_NETFILTER_XT_MATCH_CONNTRACK
通用连接跟踪匹配,是"state"的超集,它允许额外的链接跟踪信息,在需要设置一些复杂的规则(比如网关)时很有用
"cpu" match support
CONFIG_NETFILTER_XT_MATCH_CPU
根据处理包所使用的CPU是哪个进行匹配
"dccp" protocol match support
CONFIG_NETFILTER_XT_MATCH_DCCP
DCCP是打算取代UDP的新传输协议,它在UDP的基础上增加了流控和拥塞控制机制,面向实时业务
"devgroup" match support
CONFIG_NETFILTER_XT_MATCH_DEVGROUP
允许根据网卡所属的"设备组"进行匹配
"dscp" and "tos" match support
CONFIG_NETFILTER_XT_MATCH_DSCP
dscp match 允许根据IPv4/IPv6包头的DSCP字段进行匹配, tos match 允许根据IPv4包头的TOS字段进行匹配
"ecn" match support
CONFIG_NETFILTER_XT_MATCH_ECN
允许根据IPv4 TCP包头的ECN字段进行匹配
"esp" match support
CONFIG_NETFILTER_XT_MATCH_ESP
允许对IPSec包的ESP头中的SPI(安全参数序列)范围进行匹配
"hashlimit" match support
CONFIG_NETFILTER_XT_MATCH_HASHLIMIT
此项的目的是取代"limit",它基于你选定的源/目的地址和/或端口动态创建"limit bucket"哈希表.这样你就可以迅速创建类似这样的匹配规则:(1)为给定的目的地址以每秒10k个包的速度进行匹配;(2)为给定的源地址以每秒500个包的速率进行匹配
"helper" match support
CONFIG_NETFILTER_XT_MATCH_HELPER
加载特定协议的连接跟踪辅助模块,由该模块过滤所跟踪的连接类型的包,比如ip_conntrack_ftp模块
"hl" hoplimit/TTL match support
CONFIG_NETFILTER_XT_MATCH_HL
基于IPv6包头的hoplimit字段,或IPv4包头的time-to-live字段进行匹配
"iprange" address range match support
CONFIG_NETFILTER_XT_MATCH_IPRANGE
根据IP地址范围进行匹配,而普通的iptables只能根据"IP/mask"的方式进行匹配.
"ipvs" match support
CONFIG_NETFILTER_XT_MATCH_IPVS
允许根据包的IPVS属性进行匹配
"length" match support
CONFIG_NETFILTER_XT_MATCH_LENGTH
允许对包的长度进行匹配
"limit" match support
CONFIG_NETFILTER_XT_MATCH_LIMIT
允许根据包的进出速率进行规则匹配,常和"LOG target"配合使用以抵抗某些Dos攻击
"mac" address match support
CONFIG_NETFILTER_XT_MATCH_MAC
允许根据以太网的MAC地址进行匹配
"mark" match support
CONFIG_NETFILTER_XT_MATCH_MARK
这只是一个兼容旧配置的选项,等价于CONFIG_NETFILTER_XT_MARK
"multiport" Multiple port match support
CONFIG_NETFILTER_XT_MATCH_MULTIPORT
允许对TCP或UDP包同时匹配多个不连续的端口(通常情况下只能匹配单个端口或端口范围)
"nfacct" match support
CONFIG_NETFILTER_XT_MATCH_NFACCT
允许通过nfnetlink_acct使用扩展记账
"osf" Passive OS fingerprint match
CONFIG_NETFILTER_XT_MATCH_OSF
开启Passive OS Fingerprinting模块,以允许通过进入的TCP SYN包被动匹配远程操作系统.规则和加载程序可以从这里获取:http://www.ioremap.net/projects/osf
"owner" match support
CONFIG_NETFILTER_XT_MATCH_OWNER
基于创建套接字的本地进程身份(user/group)进行匹配,还可以用于检查一个套接字是否确实存在
IPsec "policy" match support
CONFIG_NETFILTER_XT_MATCH_POLICY
基于IPsec policy进行匹配
"physdev" match support
CONFIG_NETFILTER_XT_MATCH_PHYSDEV
允许对进入或离开所经过的物理网口进行匹配
"pkttype" packet type match support
CONFIG_NETFILTER_XT_MATCH_PKTTYPE
允许对封包目的地址类别(广播/组播/直播)进行匹配
"quota" match support
CONFIG_NETFILTER_XT_MATCH_QUOTA
允许对总字节数的限额值进行匹配
"rateest" match support
CONFIG_NETFILTER_XT_MATCH_RATEEST
根据 RATEEST target 评估的速率值进行匹配
"realm" match support
CONFIG_NETFILTER_XT_MATCH_REALM
允许根据iptables中的路由子系统中的realm值进行匹配.它与tc中的CONFIG_NET_CLS_ROUTE4非常类似.
"recent" match support
CONFIG_NETFILTER_XT_MATCH_RECENT
recent match 用于创建一个或多个最近使用过的地址列表,然后又可以根据这些列表再进行匹配.
"sctp" protocol match support
CONFIG_NETFILTER_XT_MATCH_SCTP
支持根据流控制传输协议(SCTP)源/目的端口和"chunk type"进行匹配.
"socket" match support
CONFIG_NETFILTER_XT_MATCH_SOCKET
can be used to match packets for which a TCP or UDP socket lookup finds a valid socket. It can be used in combination with the MARK target and policy routing to implement full featured non-locally bound sockets.
"state" match support
CONFIG_NETFILTER_XT_MATCH_STATE
这是对包进行分类的有力工具,它允许利用连接跟踪信息对连接中处于特定状态的包进行匹配
"statistic" match support
CONFIG_NETFILTER_XT_MATCH_STATISTIC
允许根据一个给定的百分率对包进行周期性的或随机性的匹配
"string" match support
CONFIG_NETFILTER_XT_MATCH_STRING
允许根据包所承载的数据中包含的特定字符串进行匹配
"tcpmss" match support
CONFIG_NETFILTER_XT_MATCH_TCPMSS
允许根据TCP SYN包头中的MSS(最大分段长度)选项的值进行匹配
"time" match support
CONFIG_NETFILTER_XT_MATCH_TIME
根据包的到达时刻(外面进入的包)或者离开时刻(本地生成的包)进行匹配
"u32" match support
CONFIG_NETFILTER_XT_MATCH_U32
"u32"允许从包中提取拥有特定mask的最多4字节数据,将此数据移动(shift)特定的位数,然后测试其结果是否位于特定的集合范围内.更多细节可以直接参考内核源码(net/netfilter/xt_u32.c)
IP set support
CONFIG_IP_SET
为内核添加IP集(IP set)支持,然后就可以使用CONFIG_NETFILTER_XT_SET功能.此特性必须配合用户态工具ipset一起使用.
Maximum number of IP sets
CONFIG_IP_SET_MAX
默认的最大"set"数,取值范围是[2,65534].此值也可以由ip_set模块的max_sets参数设置.
bitmap:ip set support
CONFIG_IP_SET_BITMAP_IP
"bitmap:ip"集合类型.根据IP地址范围设定集合.
bitmap:ip,mac set support
CONFIG_IP_SET_BITMAP_IPMAC
"bitmap:ip,mac"集合类型.根据IP/MAC地址对范围设定集合.
bitmap:port set support
CONFIG_IP_SET_BITMAP_PORT
"bitmap:port"集合类型.根据端口范围设定集合.
hash:ip set support
CONFIG_IP_SET_HASH_IP
"hash:ip"集合类型.为多个离散的IP地址设定集合.
hash:ip,port set support
CONFIG_IP_SET_HASH_IPPORT
"hash:ip,port"集合类型.为多个离散的IP/MAC地址对设定集合.
hash:ip,port,ip
CONFIG_IP_SET_HASH_IPPORTIP
"hash:ip,port,ip"集合类型.为多个离散的IP/端口/IP三元组设定集合.
hash:ip,port,net set support
CONFIG_IP_SET_HASH_IPPORTNET
"hash:ip,port,net"集合类型.为多个离散的IP/端口/网段三元组设定集合.
hash:net set support
CONFIG_IP_SET_HASH_NET
"hash:net"集合类型.为多个离散的网段设定集合
hash:net,port set support
CONFIG_IP_SET_HASH_NETPORT
"hash:net,port"集合类型.为多个离散的网段/端口对设定集合
hash:net,iface set support
CONFIG_IP_SET_HASH_NETIFACE
"hash:net,iface"集合类型.为多个离散的网段/网卡接口对设定集合
list:set set support
CONFIG_IP_SET_LIST_SET
"list:set"集合类型.将多个集合组成一个更大的集合
IP virtual server support
CONFIG_IP_VS
IPVS(IP Virtual Server)支持.IPVS可以帮助LVS基于多个后端真实服务器创建一个高性能的虚拟服务器.可以使用三种具体的方法实现:NAT,隧道,直接路由(使用较广).
IPv6 support for IPVS
CONFIG_IP_VS_IPV6
为IPVS添加IPv6支持
IP virtual server debugging
CONFIG_IP_VS_DEBUG
为IPVS添加调试支持
IPVS connection table size (the Nth power of 2)
CONFIG_IP_VS_TAB_BITS
设置IPVS连接哈希表的大小(2CONFIG_IP_VS_TAB_BITS),取值范围是[8,20],默认值12的意思是哈希表的大小是212=4096项.IPVS连接哈希表使用链表来处理哈希碰撞.使用大的哈希表能够显著减少碰撞几率,特别是哈希表中有成千上万连接的时候.比较恰当的值差不多等于每秒的新建连接数乘以每个连接的平均持续秒数.太小的值会造成太多碰撞,从而导致性能大幅下降;太大的值又会造成占用太多不必要的内存(每个表项8字节+每个连接128字节).该值也可以通过ip_vs模块的conn_tab_bits参数进行设置.
TCP load balancing support
CONFIG_IP_VS_PROTO_TCP
TCP传输协议负载均衡支持
UDP load balancing support
CONFIG_IP_VS_PROTO_UDP
UDP传输协议负载均衡支持
ESP load balancing support
CONFIG_IP_VS_PROTO_ESP
IPSec ESP(Encapsulation Security Payload)传输协议负载均衡支持
AH load balancing support
CONFIG_IP_VS_PROTO_AH
IPSec AH(Authentication Header)传输协议负载均衡支持.
SCTP load balancing support
CONFIG_IP_VS_PROTO_SCTP
SCTP传输协议负载均衡支持
round-robin scheduling
CONFIG_IP_VS_RR
循环分散算法:最简单的调度算法,将连接简单的循环分散到后端服务器上
weighted round-robin scheduling
CONFIG_IP_VS_WRR
基于权重的循环分散算法:在循环分散的基础上,权重较高的后端服务器接纳较多的连接
least-connection scheduling
CONFIG_IP_VS_LC
最少连接算法:将连接优先分配到活动连接最少的后端服务器
weighted least-connection scheduling
CONFIG_IP_VS_WLC
基于权重的最少连接算法:结合考虑活动连接数与服务器权重
locality-based least-connection scheduling
CONFIG_IP_VS_LBLC
基于目的IP的最少连接算法(常用于缓存集群):优先根据目的IP地址将连接分配到特定的后端,仅在这些后端过载时(活动连接数大于其权重)才分散到其他后端.
locality-based least-connection with replication scheduling
CONFIG_IP_VS_LBLCR
与LBLC类似,不同之处在于:前端负载均衡器会像NAT一样同时记住客户端IP与后端的对应关系,并在新的连接到来的时候,复用这个对应关系.
destination hashing scheduling
CONFIG_IP_VS_DH
目标地址哈希表算法:简单的根据静态设定的目标IP地址哈希表将连接分发到后端
source hashing scheduling
CONFIG_IP_VS_SH
源地址哈希表算法:简单的根据静态设定的源IP地址哈希表将连接分发到后端
shortest expected delay scheduling
CONFIG_IP_VS_SED
最小期望延迟算法:将连接分配到根据期望延迟公式((Ci+1)/Ui)算得的延迟最小的后端."i"是后端服务器编号,"Ci"是该服务器当前的连接数,"Ui"是该服务器的权重.
never queue scheduling
CONFIG_IP_VS_NQ
无排队算法:这是一个两阶段算法,如果有空闲服务器,就直接分发到空闲服务器(而不是等待速度最快的服务器),如果没有空闲服务器,就分发到期望延迟最小的服务器(SED算法).
IPVS source hashing table size (the Nth power of 2)
CONFIG_IP_VS_SH_TAB_BITS
将源IP地址映射到后端服务器所使用的哈希表的大小(2CONFIG_IP_VS_SH_TAB_BITS),取值范围是[4,20],默认值8的意思是哈希表的大小是28=256项.理想的大小应该是所有后端的权重乘以后端总数?
FTP protocol helper
CONFIG_IP_VS_FTP
FTP协议连接追踪帮助
Netfilter connection tracking
CONFIG_IP_VS_NFCT
Netfilter连接追踪支持
SIP persistence engine
CONFIG_IP_VS_PE_SIP
基于SIP Call-ID提供持久连接支持
IP: Netfilter Configuration
针对IPv4的Netfilter配置
IPv4 connection tracking support (required for NAT)
CONFIG_NF_CONNTRACK_IPV4
IPv4链接跟踪.可用于包伪装或地址转换,也可用于增强包过滤能力
proc/sysctl compatibility with old connection tracking
CONFIG_NF_CONNTRACK_PROC_COMPAT
用于兼容老旧的连接追踪用户态程序
IP tables support (required for filtering/masq/NAT)
CONFIG_IP_NF_IPTABLES
要用iptables就肯定要选上
"ah" match support
CONFIG_IP_NF_MATCH_AH
允许对IPSec包头的AH字段进行匹配
"ecn" match support
CONFIG_IP_NF_MATCH_ECN
这只是一个兼容旧配置的选项,等价于CONFIG_NETFILTER_XT_MATCH_ECN
"rpfilter" reverse path filter match support
CONFIG_IP_NF_MATCH_RPFILTER
对进出都使用同一个网络接口的包进行匹配
"ttl" match support
CONFIG_IP_NF_MATCH_TTL
这只是一个兼容旧配置的选项,等价于CONFIG_NETFILTER_XT_MATCH_HL
Packet filtering
CONFIG_IP_NF_FILTER
定义filter表,以允许对包进行过滤
REJECT target support
CONFIG_IP_NF_TARGET_REJECT
允许返回一个ICMP错误包而不是简单的丢弃包
ULOG target support
CONFIG_IP_NF_TARGET_ULOG
反对使用该选项,因为它已经被CONFIG_NETFILTER_NETLINK_LOG代替
IPv4 NAT
CONFIG_NF_NAT_IPV4
允许进行伪装/端口转发以及其它的NAT功能,仅在你需要使用iptables中的nat表时才需要选择
MASQUERADE target support
CONFIG_IP_NF_TARGET_MASQUERADE
SNAT是指在数据包从网卡发送出去的时候,把数据包中的源地址部分替换为指定的IP,这样,接收方就认为数据包的来源是被替换的那个IP的主机.伪装(MASQUERADE)是一种特殊类型的SNAT:MASQUERADE是用发送数据的网卡上的IP来替换源IP,用于那些IP不固定的场合(比如拨号或者通过DHCP分配)
NETMAP target support
CONFIG_IP_NF_TARGET_NETMAP
这只是一个兼容旧配置的选项,等价于CONFIG_NETFILTER_XT_TARGET_NETMAP.
REDIRECT target support
CONFIG_IP_NF_TARGET_REDIRECT
这只是一个兼容旧配置的选项,等价于CONFIG_NETFILTER_XT_TARGET_REDIRECT.
Basic SNMP-ALG support
CONFIG_NF_NAT_SNMP_BASIC
为SNMP荷载实现ALG(Application Layer Gateway)支持(RFC2962).
Packet mangling
CONFIG_IP_NF_MANGLE
在iptables中启用mangle表以便对包进行各种修改,常用于改变包的路由
CLUSTERIP target support
CONFIG_IP_NF_TARGET_CLUSTERIP
CLUSTERIP target 允许你无需使用昂贵的负载均衡设备也能创建廉价的负载均衡集群
ECN target support
CONFIG_IP_NF_TARGET_ECN
用于mangle表,可以去除IPv4包头的ECN(Explicit Congestion Notification)位,主要用于在保持ECN功能的前提下,去除网络上的"ECN黑洞".
"TTL" target support
CONFIG_IP_NF_TARGET_TTL
这只是一个兼容旧配置的选项,等价于CONFIG_NETFILTER_XT_TARGET_HL.
raw table support (required for NOTRACK/TRACE)
CONFIG_IP_NF_RAW
在iptables中添加一个raw表,该表在netfilter框架中非常靠前,并在PREROUTING和OUTPUT链上有钩子,从而可以对收到的数据包在连接跟踪前进行处理
Security table
CONFIG_IP_NF_SECURITY
在iptables中添加一个security表,以支持强制访问控制(Mandatory Access Control)策略
ARP tables support
CONFIG_IP_NF_ARPTABLES
arptables支持
ARP packet filtering
CONFIG_IP_NF_ARPFILTER
ARP包过滤.对于进入和离开本地的ARP包定义一个filter表,在桥接的情况下还可以应用于被转发的ARP包
ARP payload mangling
CONFIG_IP_NF_ARP_MANGLE
允许对ARP包的荷载部分进行修改,比如修改源和目标物理地址
IPv6: Netfilter Configuration
针对IPv6的Netfilter配置.其子项内容类似于IPv4,需要的话可以参考前面IPv4的Netfilter配置进行选择
DECnet: Netfilter Configuration
针对DECnet的Netfilter配置
Ethernet Bridge tables (ebtables) support
CONFIG_BRIDGE_NF_EBTABLES
针对以太网桥的ebtables Netfilter配置
The DCCP Protocol
CONFIG_IP_DCCP
数据报拥塞控制协议(Datagram Congestion Control Protocol)在UDP的基础上增加了流控和拥塞控制机制,使数据报协议能够更好地用于流媒体业务的传输
The SCTP Protocol
CONFIG_IP_SCTP
流控制传输协议(Stream Control Transmission Protocol)是一种新兴的传输层协议.TCP协议一次只能连接一个IP地址而在SCTP协议一次可以连接多个IP地址且可以自动平衡网络负载,一旦某一个IP地址失效会自动将网络负载转移到其他IP地址上
The RDS Protocol
CONFIG_RDS
可靠数据报套接字(Reliable Datagram Sockets)协议支持.
The TIPC Protocol
CONFIG_TIPC
透明内部进程间通信协议(Transparent Inter Process Communication),以共享内存为基础实现任务和资源的调度,专门用于集群内部通信
Asynchronous Transfer Mode (ATM)
CONFIG_ATM
异步传输模式(ATM)支持.主要用于高速LAN和WAN.目前已经日薄西山了.
Layer Two Tunneling Protocol (L2TP)
CONFIG_L2TP
第二层隧道协议(RFC2661)支持
802.1d Ethernet Bridging
CONFIG_BRIDGE
802.1d以太网桥(例如为虚拟机提供桥接网卡支持)
802.1Q/802.1ad VLAN Support
CONFIG_VLAN_8021Q
802.1Q虚拟局域网
DECnet Support
CONFIG_DECNET
DECnet协议
ANSI/IEEE 802.2 LLC type 2 Support
CONFIG_LLC2
PF_LLC类型套接字支持.也就是IEEE 802.2 LLC 2
The IPX protocol
CONFIG_IPX
IPX协议是由Novell公司提出的运行于OSI模型第三层的协议,具有可路由的特性,IPX的地址分为网络地址和主机地址,网络地址由管理员分配,主机地址为MAC地址.由于IP协议的广泛使用,IPX的应用早已日薄西山.
Appletalk protocol support
CONFIG_ATALK
Appletalk是苹果公司创建的一组网络协议,仅用于苹果系列计算机.
CCITT X.25 Packet Layer
CONFIG_X25
CCITT X.25协议集支持.
LAPB Data Link Driver
CONFIG_LAPB
LAPB协议支持.
Phonet protocols family
CONFIG_PHONET
PhoNet是Nokia开发的面相数据包的通信协议,仅用于Nokia maemo/meego产品.
IEEE Std 802.15.4 Low-Rate Wireless Personal Area Networks support
CONFIG_IEEE802154
IEEE Std 802.15.4 定义了一个低速率/低功耗/低复杂度的短距离个人无线网络规范.主要用于物联网中的传感器/交换器之类设备之间的互联.
6lowpan support over IEEE 802.15.4
CONFIG_IEEE802154_6LOWPAN
在IEEE 802.15.4上支持IPv6压缩.
Generic IEEE 802.15.4 Soft Networking Stack (mac802154)
CONFIG_MAC802154
为SoftMAC设备(仅实现了PHY层)实现硬件独立的IEEE Std 802.15.4协议栈.使用HardMAC设备的用户应该选"N".[注意]这里的实现既未经过认证,也未进行充分的兼容性测试.
QoS and/or fair queueing
CONFIG_NET_SCHED
QoS(Quality of Service)支持.当内核有多个包需要通过网络发送的时候,它需要决定哪个包先发,那个包后发,哪个包丢弃.这就是包调度算法.关闭此项表示内核使用最简单的FIFO算法,开启此项后就可以使用多种不同的调度算法(需要配合用户层工具iproute2+tc).QoS还用于支持diffserv(Differentiated Services)和RSVP(Resource Reservation Protocol)功能.包调度的状态信息可以从"/proc/net/psched"文件中获取.仅在你确实需要的时候选"Y".
Data Center Bridging support
CONFIG_DCB
DCB(Data Center Bridging)支持.数据中心桥接是一组可增强传统以太网功能,以管理通信的功能,尤其适用于网络通信流量和传输率都很高的环境中.光纤通道可专用于承载此类型的通信.但是,如果使用专用链路来仅提供光纤通道通信,则成本可能会很高.因此,更多情况下使用以太网光纤通道.DCB功能可满足光纤通道对遍历以太网时包丢失的敏感度要求.DCB允许对等方基于优先级区分通信.通过区分优先级,可确保在主机之间发生拥塞时,保持较高优先级通信的包完整性.使用DCB交换协议,通信主机可以交换会影响高速网络通信的配置信息.然后,对等方可对公用配置进行协商,确保通信流不中断,同时防止高优先级包出现包丢失.这些功能都需要底层的网卡支持.一般网卡都是不支持的.所以不确定的可以选"N".
DNS Resolver support
CONFIG_DNS_RESOLVER
内核DNS解析支持.用于支持CONFIG_AFS_FS/CONFIG_CIFS/CONFIG_CIFS_SMB2模块.此功能需要用户态程序"/sbin/dns.resolve"和配置文件"/etc/request-key.conf"的支持.更多信息参见"Documentation/networking/dns_resolver.txt"文档,不确定的选"N".
B.A.T.M.A.N. Advanced Meshing Protocol
CONFIG_BATMAN_ADV
B.A.T.M.A.N.(更好的移动无线网络方案)是一种用于 multi-hop ad-hoc mesh 网络的路由协议.它是一种去中心化分布式无线Adhoc模式,特别适用于自然灾害等紧急情况下,创建临时的无线网络.不确定的选"N".
Open vSwitch
CONFIG_OPENVSWITCH
Open vSwitch 是一个多层虚拟交换标准.此选项提供了内核级的高速转发功能(需要配合用户态守护进程ovs-vswitchd来实现).
Virtual Socket protocol
CONFIG_VSOCKETS
这是一个类似于TCP/IP的协议,用于虚拟机之间以及虚拟机与宿主之间的通信.开启此项后,还需要从子项中选择适用于特定虚拟化技术的传输协议.
VMware VMCI transport for Virtual Sockets
CONFIG_VMWARE_VMCI_VSOCKETS
适用于VMware虚拟化技术的VMCI传输协议支持.
NETLINK: mmaped IO
CONFIG_NETLINK_MMAP
基于内存映射机制的 netlink IO 支持.这样可以避免在用户空间与内存空间之间复制数据,从而提升操作速度.建议开启.
NETLINK: socket monitoring interface
CONFIG_NETLINK_DIAG
NETLINK socket 监视接口.ss这样的诊断工具需要它.
Network priority cgroup
CONFIG_NETPRIO_CGROUP
Cgroup子系统支持:基于每个网络接口为每个进程分配网络使用优先级.
enable BPF Just In Time compiler
CONFIG_BPF_JIT
BPF(Berkeley Packet Filter)的过滤功能通常由一个解释器(interpreter)解释执行BPF虚拟机指令的方式工作.开启此项,内核在加载过滤指令后,会将其编译为本地指令,以加快执行速度.网络嗅探程序(libpcap/tcpdump)可以从中受益.注意:需要"echo 1 > /proc/sys/net/core/bpf_jit_enable"之后才能生效.
Network testing
网络测试,仅供调试使用
Amateur Radio support
CONFIG_HAMRADIO
业余无线电支持.供无线电爱好者进行自我训练/相互通讯/技术研究
CAN bus subsystem support
CONFIG_CAN
CAN(Controller Area Network)是一个低速串行通信协议.被广泛地应用于工业自动化/船舶/医疗设备/工业设备等嵌入式领域.更多信息参见"Documentation/networking/can.txt"文件.
IrDA (infrared) subsystem support
CONFIG_IRDA
红外线通讯技术支持,主要用于嵌入式环境,某些老旧的笔记本上也可能会有红外接口.
Bluetooth subsystem support
CONFIG_BT
蓝牙支持.蓝牙目前已经基本取代红外线,成为嵌入式设备/智能设备/笔记本的标配近距离(小于10米)通信设备.在Linux上通常使用来自BlueZ的hciconfig和bluetoothd工具操作蓝牙通信.
RFCOMM protocol support
CONFIG_BT_RFCOMM
虚拟串口协议(RFCOMM)是一个面向连接的流传输协议,提供RS232控制和状态信号,从而模拟串口的功能.它被用于支持拨号网络,OBEX(Object Exchange),以及某些蓝牙程序(例如文件传输).
RFCOMM TTY support
CONFIG_BT_RFCOMM_TTY
允许在RFCOMM通道上模拟TTY终端
BNEP protocol support
CONFIG_BT_BNEP
蓝牙网络封装协议(Bluetooth Network Encapsulation Protocol)可以在蓝牙上运行其他网络协议(TCP/IP). Bluetooth PAN(Personal Area Network)需要它的支持.
Multicast filter support
CONFIG_BT_BNEP_MC_FILTER
组播支持
Protocol filter support
CONFIG_BT_BNEP_PROTO_FILTER
协议过滤器支持
CMTP protocol support
CONFIG_BT_CMTP
CMTP(CAPI消息传输协议)用于支持已在上世纪被淘汰的ISDN设备.不确定的选"N".
HIDP protocol support
CONFIG_BT_HIDP
人机接口设备协议(Human Interface Device Protocol)用于支持各种人机接口设备(比如鼠标/键盘/耳机等).
Bluetooth device drivers
各种蓝牙设备驱动
HCI USB driver
CONFIG_BT_HCIBTUSB
使用USB接口的蓝牙设备支持
HCI SDIO driver
CONFIG_BT_HCIBTSDIO
使用SDIO接口的蓝牙设备支持
HCI UART driver
CONFIG_BT_HCIUART
使用串口的蓝牙设备支持.此外,基于UART的蓝牙PCMCIA和CF设备也需要此模块的支持.
UART (H4) protocol support
CONFIG_BT_HCIUART_H4
大多数使用UART接口的蓝牙设备(包括PCMCIA和CF卡)都使用这个协议.
BCSP protocol support
CONFIG_BT_HCIUART_BCSP
基于CSR(Cambridge Silicon Radio)公司的BlueCore系列芯片的蓝牙设备(包括PCMCIA和CF卡)支持
Atheros AR300x serial support
CONFIG_BT_HCIUART_ATH3K
基于Atheros AR300x系列芯片的蓝牙设备支持
HCILL protocol support
CONFIG_BT_HCIUART_LL
基于Texas Instruments公司的BRF芯片的蓝牙设备支持
Three-wire UART (H5) protocol support
CONFIG_BT_HCIUART_3WIRE
Three-wire UART (H5) 协议假定UART通信可能存在各种错误,从而使得CTS/RTS引脚线变得可有可无.看不懂就可以不选.
HCI VHCI (Virtual HCI device) driver
CONFIG_BT_HCIVHCI
模拟蓝牙设备支持.主要用于开发
{大多数蓝牙设备并不需要特定的独立驱动,此处省略的独立驱动仅是为了驱动那些不严格遵守蓝牙规范的芯片}
RxRPC session sockets
CONFIG_AF_RXRPC
RxRPC会话套接字支持(仅包括传输部分,不含表示部分).CONFIG_AFS_FS依赖于它.不确定的选"N".详情参见"Documentation/networking/rxrpc.txt"文档.
Wireless
CONFIG_WIRELESS
无线网络支持.
cfg80211 - wireless configuration API
CONFIG_CFG80211
cfg80211是Linux无线局域网(802.11)配置接口,是使用WiFi的前提.注意:"WiFi"是一个无线网路通信技术的品牌,由WiFi联盟所持有.目的是改善基于IEEE 802.11标准的无线网路产品之间的互通性.现时一般人会把WiFi及IEEE 802.11混为一谈,甚至把WiFi等同于无线网路(WiFi只是无线网络的一种).
nl80211 testmode command
CONFIG_NL80211_TESTMODE
仅供调试和特殊目的使用.
enable developer warnings
CONFIG_CFG80211_DEVELOPER_WARNINGS
仅供调试开发使用
cfg80211 regulatory debugging
CONFIG_CFG80211_REG_DEBUG
仅供调试开发使用
cfg80211 certification onus
CONFIG_CFG80211_CERTIFICATION_ONUS
仅在你确实明白此项含义的情况下,才考虑选"Y",否则请选"N".
enable powersave by default
CONFIG_CFG80211_DEFAULT_PS
若开启此项则表示默认开启省电模式(也就是默认"Soft blocked: yes").关闭此项则表示默认使用BIOS中的状态(通常是上一次关机是的状态).详情参见"Documentation/power/pm_qos_interface.txt"文档.
cfg80211 DebugFS entries
CONFIG_CFG80211_DEBUGFS
仅供调试
use statically compiled regulatory rules database
CONFIG_CFG80211_INTERNAL_REGDB
由于绝大多数发行版都含有CRDA软件包,所以绝大多数人应该选"N".如果你确实需要选"Y",那么请认真阅读"net/wireless/db.txt"文件.
cfg80211 wireless extensions compatibility
CONFIG_CFG80211_WEXT
为那些老旧的用户空间程序提供兼容性,建议关闭.
lib80211 debugging messages
CONFIG_LIB80211_DEBUG
仅供调试
Generic IEEE 802.11 Networking Stack (mac80211)
CONFIG_MAC80211
独立于硬件的通用IEEE 802.11协议栈模块(mac80211).它是驱动开发者用来编写softMAC无线设备驱动的框架,softMAC设备允许用软件实现帧的管理(包括解析和产生80211无线帧),从而让系统能更好的控制硬件,现在大多数的无线网卡都是softMAC设备.不确定的选"Y".
PID controller based rate control algorithm
CONFIG_MAC80211_RC_PID
基于比例-积分-微分控制器(PID controller)的发送速率(TX rate)控制算法.用于CONFIG_MAC80211模块.不确定的选"N".
Minstrel
CONFIG_MAC80211_RC_MINSTREL
minstrel发送速率(TX rate)控制算法.用于CONFIG_MAC80211模块.这是首选的算法,不确定的选"Y".
Minstrel 802.11n support
CONFIG_MAC80211_RC_MINSTREL_HT
minstrel_ht发送速率(TX rate)控制算法.适用于802.11n规范.不确定的选"Y".
Default rate control algorithm
默认发送速率(TX rate)控制算法.相当于mac80211模块"ieee80211_default_rc_algo"参数的值.建议选择"Minstrel"算法.
Enable mac80211 mesh networking (pre-802.11s) support
CONFIG_MAC80211_MESH
802.11s草案是无线网状网络(Mesh Networking)的延伸与增补标准(amendment).它扩展了IEEE 802.11 MAC(介质访问控制)标准,定义了利用自我组态的多点跳跃拓朴(multi-hop topologies),进行无线感知(radio-aware metrics),以支援广播/组播/单播传送网络封包的架构与协定.不确定的选"N".
Enable LED triggers
CONFIG_MAC80211_LEDS
允许在接受/发送数据时触发无线网卡的LED灯闪烁.
Export mac80211 internals in DebugFS
CONFIG_MAC80211_DEBUGFS
在DebugFS中显示mac80211模块内部状态的扩展信息,仅用于调试目的.
Trace all mac80211 debug messages
CONFIG_MAC80211_MESSAGE_TRACING
跟踪所有mac80211模块的调试信息,仅用于调试目的.
Select mac80211 debugging features
CONFIG_MAC80211_DEBUG_MENU
仅供调试
WiMAX Wireless Broadband support
CONFIG_WIMAX
WiMAX(IEEE 802.16)协议支持.随着2010年英特尔放弃WiMAX以及LTE在4G市场成了唯一的主流标准,WiMAX的电信运营商也逐渐向LTE转移,WiMAX论坛也于2012年将TD-LTE纳入WiMAX2.1规范,一些WiMAX运营商也开始将设备升级为TD-LTE.
WiMAX debug level
CONFIG_WIMAX_DEBUG_LEVEL
设置允许使用的最大调试信息详细等级,推荐使用默认值"8",设为"0"表示允许使用所有调试信息.运行时默认禁止使用调试信息,但可通过sysfs文件系统中的debug-levels文件开启调试信息.
RF switch subsystem support
CONFIG_RFKILL
为了节约电力,很多无线网卡和蓝牙设备都有内置的射频开关(RF switche)用于开启和关闭设备(通过rfkill命令).建议选"Y".更多详情参见"Documentation/rfkill.txt"文档
RF switch input support
CONFIG_RFKILL_INPUT
这是个反对使用的特性,一般情况下建议关闭.若关闭此项导致某些笔记本的无线网卡开关按钮失效,可以考虑开启.
Generic rfkill regulator driver
CONFIG_RFKILL_REGULATOR
通用射频开关驱动,其射频开关连接在电压调节器(voltage regulator)上.依赖于CONFIG_REGULATOR框架.不确定的选"N"或"M"
GPIO RFKILL driver
CONFIG_RFKILL_GPIO
通用GPIO射频开关驱动.仅用于嵌入式环境,其射频开关连接在GPIO总线上,比如NVIDIA的Tegra和三星的Exynos 4智能手机SoC芯片.
Plan 9 Resource Sharing Support (9P2000)
CONFIG_NET_9P
实验性的支持Plan 9的9P2000协议.
CAIF support
CONFIG_CAIF
除非你为Android/MeeGo系统编译内核,并且需要使用PF_CAIF类型的socket,否则请选"N".
Ceph core library
CONFIG_CEPH_LIB
仅在你需要使用Ceph分布式文件系统,或者rados块设备(rbd)时选"Y".否则应选"N".
NFC subsystem support
CONFIG_NFC
NFC(近场通信)子系统.这些设备主要用于智能手机之类的嵌入式领域.

Device Drivers
设备驱动程序

Generic Driver Options
驱动程序通用选项
path to uevent helper
CONFIG_UEVENT_HELPER_PATH
早年的内核(切换到基于netlink机制之前),在发生uevent事件(通常是热插拔)时,需要调用用户空间程序(通常是"/sbin/hotplug"),以帮助完成uevent事件的处理.此选项就是用于设定这个帮助程序的路径.由于目前的发行版都已不再需要此帮助程序,所以请保持空白.此外,如果你使用了systemd或udev则必须保持空白.
Maintain a devtmpfs filesystem to mount at /dev
CONFIG_DEVTMPFS
devtmpfs是一种基于CONFIG_TMPFS的文件系统(与proc和sys有几分相似).在系统启动过程中,随着各个设备的初始化完成,内核将会自动在devtmpfs中创建相应的设备节点(使用默认的文件名和权限)并赋予正确的主次设备号.更进一步,在系统运行过程中,随着各种设备插入和拔除,内核也同样会自动在devtmpfs中创建和删除的相应的设备节点(使用默认的文件名和权限)并赋予正确的主次设备号.如果将devtmpfs挂载到"/dev"目录(通常是系统启动脚本),那么便拥有了一个全自动且全功能的"/dev"目录,而且用户空间程序(通常是udevd)还可以对其中的内容进行各种修改(增删节点,改变权限,创建符号链接).目前的发行版和各种嵌入式系统基本都依赖于此,除非你知道自己在做什么,否则请选"Y".
Automount devtmpfs at /dev, after the kernel mounted the rootfs
CONFIG_DEVTMPFS_MOUNT
在内核挂载根文件系统的同时,立即自动将devtmpfs挂载到"/dev"目录.因为此时init进程都还尚未启动,所以这就确保在进入用户空间之前,所有设备文件就都已经准备完毕.开启此选项相当于设置内核引导参数"devtmpfs.mount=1",关闭此选项相当于设置内核引导参数"devtmpfs.mount=0".开启此项后,你就可以放心的使用"init=/bin/sh"直接进入救援模式,而不必担心"/dev"目录空无一物.注意:此选项并不影响基于initramfs的启动,此种情况下,devtmpfs必须被手动挂载.所以,如果你的系统使用initrd或者有专门的启动脚本用于挂载"/dev"目录(大多数发行版都有这样的脚本),或者你看了前面的解释,还是不确定,那就选"N".对于实在想要使用"init=/bin/sh"直接进入救援模式的人来说,还是使用"init=/bin/sh devtmpfs.mount=1"吧!
Select only drivers that don't need compile-time external firmware
CONFIG_STANDALONE
只显示那些编译时不需要额外固件支持的驱动程序,除非你有某些怪异硬件,否则请选"Y".
Prevent firmware from being built
CONFIG_PREVENT_FIRMWARE_BUILD
不编译固件(firmware).固件一般是随硬件的驱动程序提供的,仅在更新固件的时候才需要重新编译.建议选"Y".
Userspace firmware loading support
CONFIG_FW_LOADER
用户空间固件加载支持.如果内核自带的模块需要它,它将会被自动选中.但某些内核树之外的模块也可能需要它,这时候就需要你根据实际情况手动开启了.
Include in-kernel firmware blobs in kernel binary
CONFIG_FIRMWARE_IN_KERNEL
内核源码树中包含了许多驱动程序需要的二进制固件(blob),推荐的方法是通过"make firmware_install"将"firmware"目录中所需的固件复制到系统的"/lib/firmware/"目录中,然后由用户空间帮助程序在需要的时候进行加载.开启此项后,将会把所需的"blob"直接编译进内核,这样就可以无需用户空间程序的帮助,而直接使用这些固件了(例如:当根文件系统依赖于此类固件,而你又不想使用initrd的时候).每个需要此类二进制固件的驱动程序,都会有一个"Include firmware for xxx device"的选项,如果此处选"Y",那么这些选项都将被隐藏.建议选"N".
External firmware blobs to build into the kernel binary
CONFIG_EXTRA_FIRMWARE
指定要额外编译进内核的二进制固件(blob).此选项的值是一个空格分隔的固件文件名字符串,这些文件必须位于CONFIG_EXTRA_FIRMWARE_DIR目录中(其默认值是内核源码树下的"firmware"目录).
Firmware blobs root directory
CONFIG_EXTRA_FIRMWARE_DIR
指定CONFIG_EXTRA_FIRMWARE中列出的文件位于哪个目录.默认值是当前内核源码树下的"firmware"目录.若有需要,你也可以修改成其他目录(例如"/lib/firmware/").
Fallback user-helper invocation for firmware loading
CONFIG_FW_LOADER_USER_HELPER
在内核自己直接加载固件失败后,作为补救措施,调用用户空间帮助程序(通常是udev)再次尝试加载.通常这个动作是不必要的,因此应该选"N",如果你使用了udev或systemd,则必须选"N".仅在某些特殊的固件位于非标准位置时,才需要选"Y".
Driver Core verbose debug messages
CONFIG_DEBUG_DRIVER
让驱动程序核心在系统日志中产生冗长的调试信息,仅供调试
Managed device resources verbose debug messages
CONFIG_DEBUG_DEVRES
为内核添加一个"devres.log"引导参数.当被设为非零值时,将会打印出设备资源管理驱动(devres)的调试信息.仅供调试使用.
Contiguous Memory Allocator
CONFIG_CMA
在使用ARM等嵌入式Linux系统的时候,GPU,Camera,HDMI等都需要预留大量连续内存,这部分内存平时不用,但是传统的做法又必须先预留着.而通过连续内存分配器(Contiguous Memory Allocator)可以做到不预留内存,仅在需要的时候才将大块的连续物理内存分配给相应的驱动程序.这个机制对于那些不支持I/O map和scatter-gather的设备很有作用.详情参见"include/linux/dma-contiguous.h"文件,不确定的选"N".
Bus devices
总线设备.此类设备仅出现在ARM平台.
Connector - unified userspace <-> kernelspace linker
CONFIG_CONNECTOR
统一的用户空间和内核空间连接器,工作在netlink socket协议的顶层.连接器是非常便利的用户态与内核态的通信方式,内核开发者在编写内核子系统或模块时可以采用这种方式方便地进行用户态与内核态的数据交换.内核有两个连接器应用实例:一个是进程事件连接器,另一个是CIFS文件系统.另外还有一个给Gentoo装上启动画面的例子.
Report process events to userspace
CONFIG_PROC_EVENTS
提供一个向用户空间报告进程事件(fork,exec,id变化(uid,gid,suid))的连接器.
Memory Technology Device (MTD) support
CONFIG_MTD
MTD子系统是一个闪存转换层.其主要目的是提供一个介于闪存硬件驱动程序与高级应用程序之间的抽象层,以简化闪存设备的驱动.注意:MTD常用于嵌入式系统,而我们常见的U盘/MMC卡/SD卡/CF卡等移动存储设备以及固态硬盘(SSD),虽然也叫"flash",但它们并不是使用MTD技术的存储器.仅在你需要使用主设备号为31的MTD块设备(/dev/romX,/dev/rromX,/dev/flashX,/dev/rflashX),或者主设备号为90的MTD字符设备(/dev/mtdX,/dev/mtdrX)时选"Y",否则选"N".
Parallel port support
CONFIG_PARPORT
25针并口(LPT接口)支持.古董级的打印机或扫描仪可能使用这种接口.目前已被淘汰.
Plug and Play support
CONFIG_PNP
即插即用(PnP)支持.选"Y"表示让Linux为PnP设备分配中断和I/O端口(需要在BIOS中开启"PnP OS"),选"N"则表示让BIOS来分配(需要在BIOS中关闭"PnP OS").建议选"Y".
PNP debugging messages
CONFIG_PNP_DEBUG_MESSAGES
允许使用"pnp.debug"内核参数在系统启动过程中输出PnP设备的调试信息,建议选"N".
Block devices
CONFIG_BLK_DEV
块设备,建议选"Y".
Normal floppy disk support
CONFIG_BLK_DEV_FD
通用软驱支持.已被时代抛弃的设备
Parallel port IDE device support
CONFIG_PARIDE
通过并口与计算机连接的IDE设备,比如某些老旧的外接光驱或硬盘之类.此类设备早就绝种了
Block Device Driver for Micron PCIe SSDs
CONFIG_BLK_DEV_PCIESSD_MTIP32XX
Micron P320/P325/P420/P425 系列固态硬盘支持
Compressed RAM block device support
CONFIG_ZRAM
zram是一种基于压缩内存的虚拟块设备,它允许你创建"/dev/zramN"块设备文件,并将它当作普通的磁盘一样使用.它完全位于物理内存中,并被实时压缩与解压以节约物理内存的用量,所有对"/dev/zramN"的读写实质上都是对内存的读写,从而可以获得比一般的磁盘快的多的IO速度.常将它用做'/tmp'分区或作为swap分区挂载.你可以把它看作是CONFIG_BLK_DEV_RAM的升级版.具体用法可以参考内核文档'Documentation/blockdev/zram.txt'.
Compaq SMART2 support
CONFIG_BLK_CPQ_DA
基于 Compaq SMART2 控制器的磁盘阵列卡
Compaq Smart Array 5xxx support
CONFIG_BLK_CPQ_CISS_DA
基于 Compaq Smart 控制器的磁盘阵列卡
SCSI tape drive support for Smart Array 5xxx
CONFIG_CISS_SCSI_TAPE
在基于 Compaq Smart 控制器的磁盘阵列卡上使用的磁带机
Mylex DAC960/DAC1100 PCI RAID Controller support
CONFIG_BLK_DEV_DAC960
Mylex DAC960, AcceleRAID, eXtremeRAID PCI RAID 控制器.很古董的设备了.
Micro Memory MM5415 Battery Backed RAM support
CONFIG_BLK_DEV_UMEM
一种使用电池做后备电源的内存,但被用作块设备,可以像硬盘一样被分区
Loopback device support
CONFIG_BLK_DEV_LOOP
loop是指拿文件来模拟块设备(/dev/loopX),比如可以将一个iso9660镜像文件当成文件系统来挂载.建议选"Y".
Number of loop devices to pre-create at init time
CONFIG_BLK_DEV_LOOP_MIN_COUNT
系统预先初始化的loop设备个数.此值可以通过内核引导参数"loop.max_loop"修改.如果你使用util-linux-2.21以上版本,建议设为"0"(loop设备将通过/dev/loop-control动态创建),否则保持默认值即可.
Cryptoloop Support
CONFIG_BLK_DEV_CRYPTOLOOP
使用系统提供的CryptoAPI对loop设备加密.注意:因为不能在Cryptoloop上创建日志型文件系统(CONFIG_DM_CRYPT模块可以),所以Cryptoloop已经逐渐淡出了.建议选"N".
DRBD Distributed Replicated Block Device support
CONFIG_BLK_DEV_DRBD
DRBD(Distributed Replicated Block Device)是一种分布式储存系统.DBRD处于文件系统之下,比文件系统更加靠近操作系统内核及IO栈.DRBD类似RAID1磁盘阵列,只不过RAID1是在同一台电脑内,而DRBD是透过网络.注意:为了进行连接认证,你还需要选中CONFIG_CRYPTO_HMAC以及相应的哈希算法.不确定的选"N".
DRBD fault injection
CONFIG_DRBD_FAULT_INJECTION
模拟IO错误,以用于测试DRBD的行为.主要用于调试目的
Network block device support
CONFIG_BLK_DEV_NBD
让你的电脑成为网络块设备的客户端,也就是可以挂载远程服务器通过TCP/IP网络提供的块设备(/dev/ndX).提示:这与NFS或Coda没有任何关系.更多详情参见"Documentation/blockdev/nbd.txt".不确定的选"N".
NVM Express block device
CONFIG_BLK_DEV_NVME
NVM Express是专门针对PCI-E接口高性能固态硬盘的标准规范.有了这一标准,操作系统厂商只需要编写一种驱动,就可以支持不同厂商的不同PCI-E SSD设备,以解决目前PCI-E SSD产品形态与规格五花八门,缺乏通用性和互用性的问题.
OSD object-as-blkdev support
CONFIG_BLK_DEV_OSD
允许将一个单独的 SCSI OSD(Object-Based Storage Devices) 对象当成普通的块设备来使用.举例来说,你可以在OSD设备上创建一个2G大小的对象,然后通过本模块将其模拟成一个2G大小的块设备使用.不确定的选"N".
Promise SATA SX8 support
CONFIG_BLK_DEV_SX8
基于Promise公司的SATA SX8控制器的RAID卡
RAM block device support
CONFIG_BLK_DEV_RAM
内存中的虚拟磁盘,大小固定.详情参阅"Documentation/blockdev/ramdisk.txt".由于其功能比CONFIG_TMPFS和CONFIG_ZRAM弱许多,使用上也不方便,所以除非你有明确的理由,否则应该选"N",并转而使用CONFIG_TMPFS或CONFIG_ZRAM.
Default number of RAM disks
CONFIG_BLK_DEV_RAM_COUNT
默认RAM disk的数量.请保持默认值,除非你知道自己在做什么.
Default RAM disk size (kbytes)
CONFIG_BLK_DEV_RAM_SIZE
默认RAM disk的大小.请保持默认值,除非你知道自己在做什么.
Support XIP filesystems on RAM block device
CONFIG_BLK_DEV_XIP
XIP(eXecute In Place)支持(指应用程序可以直接在flash闪存内运行,不必再把代码读到系统RAM中).一般用于嵌入式设备.
Packet writing on CD/DVD media
CONFIG_CDROM_PKTCDVD
CD/DVD刻录机支持.详情参见"Documentation/cdrom/packet-writing.txt"文档
Free buffers for data gathering
CONFIG_CDROM_PKTCDVD_BUFFERS
用于收集写入数据的缓冲区个数(每个占用64Kb内存),缓冲区越多性能越好.
Enable write caching
CONFIG_CDROM_PKTCDVD_WCACHE
为CD-R/W设备启用写入缓冲,目前这是一个比较危险的选项.建议关闭.
ATA over Ethernet support
CONFIG_ATA_OVER_ETH
以太网ATA设备(ATA over Ethernet)支持.
Xen virtual block device support
CONFIG_XEN_BLKDEV_FRONTEND
XEN虚拟块设备前端驱动.此驱动用于与实际驱动块设备的后端驱动(通常位于domain0)通信.
Xen block-device backend driver
CONFIG_XEN_BLKDEV_BACKEND
XEN块设备后端驱动(通常位于domain0)允许内核将实际的块设备通过高性能的共享内存接口导出给其他客户端的前端驱动(通常位于非domain0)使用.
Virtio block driver
CONFIG_VIRTIO_BLK
Virtio虚拟块设备驱动.它可以用于KVM或XEN这类基于lguest或QEMU的VMM(Virtual Machine Monitor).
Very old hard disk (MFM/RLL/IDE) driver
CONFIG_BLK_DEV_HD
又老又旧的MFM/RLL/ESDI硬盘驱动.无需犹豫,选"N".
Rados block device (RBD)
CONFIG_BLK_DEV_RBD
rados块设备(rbd)支持.它可以与分布式文件系统Ceph合作,也能独立工作.
IBM FlashSystem 70/80 PCIe SSD Device Driver
CONFIG_BLK_DEV_RSXX
IBM FlashSystem 70/80 PCIe SSD 驱动
Misc devices
杂项设备
{省略的部分请按照实际的硬件状况进行选择}Integrated Circuits ICS932S401
CONFIG_ICS932S401
IDT ICS932S401 系列时钟频率控制芯片支持(可能会出现在某些主板上).
Enclosure Services
CONFIG_ENCLOSURE_SERVICES
SES(SCSI Enclosure Services)是一项目前大多数移动硬盘盒/硬盘托架/电脑主板都支持的硬件控制命令服务,SES可以让主机端透过SCSI命令去控制外接盒内的电源/冷却装置以及其他与数据传输无关的东西.要使用这项技术,外置硬盘盒和主机上的SCSI/ATA芯片都需要支持SES技术才OK.
VMware Balloon Driver
CONFIG_VMWARE_BALLOON
VMware物理内存balloon驱动.参见CONFIG_BALLOON_COMPACTION选项.
Generic on-chip SRAM driver
CONFIG_SRAM
许多SoC系统都有芯片内嵌的SRAM.开启此项后,就可以声明将此段内存范围交给通用内存分配器(genalloc)管理.不确定的选"N".
EEPROM support
EEPROM主要用于保存主板或板卡的BIOS,如果你想通过此Linux系统刷写BIOS可以考虑开启相应的子项.不确定的全部选"N".
Intel Management Engine Interface
CONFIG_INTEL_MEI
Intel芯片组管理引擎,介于固件和系统驱动之间,类似于一种接口(Interface),帮助系统和固件之间交互.如果你的芯片组位于"CONFIG_INTEL_MEI_ME"中,可以选"Y",不过其实也没有多少实际意义.
ME Enabled Intel Chipsets
CONFIG_INTEL_MEI_ME
请根据帮助中列出的芯片组对照实际情况选择.
VMware VMCI Driver
CONFIG_VMWARE_VMCI
VMware VMCI(Virtual Machine Communication Interface)是一个在host和guest之间以及同一host上的guest和guest之间进行高速通信的虚拟设备.VMCI主要是提供一个接口让guest内的程序来调用,通过这个接口能在一个主机上的多个虚拟机之间进行直接的通信,而且无需经过更上层的其他途径,这样将有效地降低网络通信所产生的开支,但是这需要修改虚拟机上的软件,所以VMCI只适用于对虚拟机间通信要求非常高的情况.不确定的选"N".
ATA/ATAPI/MFM/RLL support (DEPRECATED)
CONFIG_IDE
已被废弃的IDE硬盘和ATAPI光驱等接口的驱动(已被CONFIG_ATA取代).选"N",除非你确实知道自己在干什么.
SCSI device support
SCSI子系统
RAID Transport Class
CONFIG_RAID_ATTRS
这只是用来得到RAID信息以及将来可能用于配置RAID方式的一个类.不管你的系统使用的是哪种RAID,都可以放心的关闭此项.不确定的选"N".
SCSI device support
CONFIG_SCSI
SCSI协议支持.有任何SCSI/SAS/SATA/USB/Fibre Channel/FireWire设备之一就必须选上.选"Y".
SCSI target support
CONFIG_SCSI_TGT
内核态的通用SCSI Target实现(原LIO项目).SCSI子系统使用了一种客户机-服务器(C/S)模型.通常,一台计算机是这个模型中的客户机(称为"initiator"),向目标(target)发起块操作请求,这个"target"通常是一个存储设备(例如一块硬盘).此模块的功能是将一台计算机变成一个"target"(就像一个普通的硬盘一样),响应其他"initiator"节点的操作请求,从而让"target"能够提供更加高级的功能:复制,自动精简配置,重复数据删除,高可用性,自动备份等.不确定的选"N".
legacy /proc/scsi/ support
CONFIG_SCSI_PROC_FS
过时的/proc/scsi/接口.某些老旧的刻录程序可能需要它,建议选"N".
SCSI disk support
CONFIG_BLK_DEV_SD
使用SCSI/SAS/SATA/PATA/USB/Fibre Channel存储设备的必选.选"Y".
SCSI tape support
CONFIG_CHR_DEV_ST
通用SCSI磁带驱动
SCSI OnStream SC-x0 tape support
CONFIG_CHR_DEV_OSST
专用于OnStream SC-x0/USB-x0/DI-x0的SCSI磁带/USB盘驱动
SCSI CDROM support
CONFIG_BLK_DEV_SR
通过SCSI/FireWire/USB/SATA/IDE接口连接的DVD/CD驱动器(基本上涵盖了所有常见的接口).
Enable vendor-specific extensions (for SCSI CDROM)
CONFIG_BLK_DEV_SR_VENDOR
仅在某些古董级的SCSI CDROM设备上才需要:NEC/TOSHIBA cdrom, HP Writers
SCSI generic support
CONFIG_CHR_DEV_SG
通用SCSI协议(/dev/sg*)支持.也就是除硬盘/光盘/磁带之外的SCSI设备(例如光纤通道).这些设备还需要额外的用户层工具支持才能正常工作.例如:SANE,Cdrtools,CDRDAO,Cdparanoia
SCSI media changer support
CONFIG_CHR_DEV_SCH
SCSI介质转换设备(SCSI Medium Changer device)是一种控制多个SCSI介质的转换器(例如在多个磁带/光盘之间进行切换),常用于控制磁带库或者CD自动点歌机(jukeboxes).此种设备会在/proc/scsi/scsi中以"Type: Medium Changer"列出.控制此类设备的用户层工具包是scsi-changer.更多细节参见"Documentation/scsi/scsi-changer.txt"文档.不确定的选"N".
SCSI Enclosure Support
CONFIG_SCSI_ENCLOSURE
"Enclosure"是一种用于管理SCSI设备的背板装置.比如移动硬盘盒就是一种常见的"Enclosure"设备.此项主要用于向用户层报告一些"Enclosure"设备的状态,这些状态对于SCSI设备的正常运行并非必须.此项依赖于CONFIG_ENCLOSURE_SERVICES选项.
Probe all LUNs on each SCSI device
CONFIG_SCSI_MULTI_LUN
默认强制在每个SCSI设备上探测所有的逻辑设备数量(Logical Unit Number),其值会被该模块的内核引导参数"max_luns"覆盖.只在一个SCSI设备上有多个逻辑设备时才需要选它,一般的SCSI设备并不需要.一个SCSI设备上有多个逻辑设备的典型例子:多口USB读卡器,CD点唱机(jukebox),处于"mass storage"模式的智能手机,量产为多个设备后的U盘.注意:此项并不影响符合SCSI-3或更高标准的设备,因为这些设备会明确的向内核报告逻辑设备数.
Verbose SCSI error reporting (kernel size +=12K)
CONFIG_SCSI_CONSTANTS
以易读的方式报告SCSI错误,内核将会增大12K
SCSI logging facility
CONFIG_SCSI_LOGGING
启用SCSI日志(默认并不开启,需要"echo [bitmask] > /proc/sys/dev/scsi/logging_level"),可用于跟踪和捕获SCSI设备的错误.关于[bitmask]的说明可以查看"drivers/scsi/scsi_logging.h"文件.
Asynchronous SCSI scanning
CONFIG_SCSI_SCAN_ASYNC
异步扫描的意思是,在内核引导过程中,SCSI子系统可以在不影响其他子系统引导的同时进行SCSI设备的探测(包括同时在多个总线上进行检测),这样可以加快系统的引导速度.但是如果SCSI设备驱动被编译为模块,那么异步扫描将会导致内核引导出现问题(解决方法是加载scsi_wait_scan模块,或者使用"scsi_mod.scan=sync"内核引导参数).不确定的选"N".
SCSI Transports
SCSI接口类型,下面的子项可以全不选,内核中若有其他部分依赖它,会自动选上
Parallel SCSI (SPI) Transport Attributes
CONFIG_SCSI_SPI_ATTRS
传统的并行SCSI(Ultra320/160之类),已逐渐被淘汰
FiberChannel Transport Attributes
CONFIG_SCSI_FC_ATTRS
光纤通道接口
SCSI target support for FiberChannel Transport Attributes
CONFIG_SCSI_FC_TGT_ATTRS
为光纤通道添加"target"模式驱动
iSCSI Transport Attributes
CONFIG_SCSI_ISCSI_ATTRS
iSCSI协议是利用TCP/IP网络传送SCSI命令和数据的I/O技术
SAS Transport Attributes
CONFIG_SCSI_SAS_ATTRS
串行SCSI传输属性支持(SAS对于SPI的关系犹如SATA对于IDE),这是目前的主流接口
SAS Domain Transport Attributes
CONFIG_SCSI_SAS_LIBSAS
为使用了SAS Domain架构的驱动程序提供帮助.SAS Domain即整个SAS交换构架,由"SAS device"和"SAS expander device"组成,其中Device又区分为Initiator和Target,它们可以直接对接起来,也可以经过Expander进行连接,Expander起到通道交换或者端口扩展的作用.看不懂就说明你不需要它.
ATA support for libsas (requires libata)
CONFIG_SCSI_SAS_ATA
在libsas中添加ATA支持,从而让libata和libsas协同工作.
Support for SMP interpretation for SAS hosts
CONFIG_SCSI_SAS_HOST_SMP
在libsas中添加SMP解释器,以允许主机支持SAS SMP协议.
SRP Transport Attributes
CONFIG_SCSI_SRP_ATTRS
SCSI RDMA 协议(SCSI RDMA Protocol)通过将SCSI数据传输阶段映射到Infiniband远程直接内存访问(Remote Direct Memory Access)操作加速了SCSI协议.
SCSI target support for SRP Transport Attributes
CONFIG_SCSI_SRP_TGT_ATTRS
为SRP添加"target"模式驱动
SCSI low-level drivers
CONFIG_SCSI_LOWLEVEL
底层SCSI驱动程序
iSCSI Initiator over TCP/IP
CONFIG_ISCSI_TCP
iSCSI协议利用TCP/IP网络在"initiator"与"targets"间传送SCSI命令和数据.此选项便是iSCSI initiator驱动.相关的用户层工具/文档/配置示例,可以在open-iscsi找到.
iSCSI Boot Sysfs Interface
CONFIG_ISCSI_BOOT_SYSFS
通过sysfs向用户空间显示iSCSI的引导信息.
{此处省略的部分按照实际使用的控制器进行选择}VMware PVSCSI driver support
CONFIG_VMWARE_PVSCSI
VMware半虚拟化的SCSI HBA控制器
Microsoft Hyper-V virtual storage driver
CONFIG_HYPERV_STORAGE
微软的Hyper-V虚拟存储控制器
Intel(R) C600 Series Chipset SAS Controller
CONFIG_SCSI_ISCI
Intel C600 系列芯片组 6Gb/s SAS控制器
virtio-scsi support
CONFIG_SCSI_VIRTIO
virtio虚拟HBA控制器
PCMCIA SCSI adapter support
CONFIG_SCSI_LOWLEVEL_PCMCIA
通过PCMCIA卡与计算机连接的SCSI设备
SCSI Device Handlers
CONFIG_SCSI_DH
针对某些特定SCSI设备的驱动,具体子项请按照实际使用的控制器进行选择
OSD-Initiator library
CONFIG_SCSI_OSD_INITIATOR
OSD(Object-Based Storage Device)协议是一个T10 SCSI命令集,和SCSI处于同一级别,也跟SCSI很类似,分成osd-initiator/osd-target两部分,用于对象存储文件系统,此选项实现了OSD-Initiator库(libosd.ko).更多细节参见"Documentation/scsi/osd.txt"文件.看不懂就说明你不需要.[提示]此选项依赖于CONFIG_CRYPTO_SHA1和CONFIG_CRYPTO_HMAC模块.
OSD Upper Level driver
CONFIG_SCSI_OSD_ULD
提供OSD上层驱动(也就是向用户层提供/dev/osdX设备).从而允许用户层控制OSD设备(比如挂载基于OSD的exofs文件系统).
Serial ATA and Parallel ATA drivers
CONFIG_ATA
SATA与PATA(IDE)设备.桌面级PC以及低端服务器的硬盘基本都是此种接口
Verbose ATA error reporting
CONFIG_ATA_VERBOSE_ERROR
输出详细的ATA命令描述信息.大约会让内核增大6KB.禁用它将会导致调试ATA设备错误变得困难.

Linux-3.10-x86_64 内核配置选项简介相关推荐

  1. 嵌入式Linux应用与开发——内核配置选项含Linux最新版本kernel下载后续操作

    下载官网的最新Linux内核版本,Linux虚拟机中Ubuntu 下载速度慢,更换镜像源后使下载速度正常.这是一个.tar.xz文件,我们要先来解压它.下面是下载内核解压文件编译内核配置内核的全过程. ...

  2. Linux下编译内核配置选项简介

    Code maturity level options 代码成熟度选项 Prompt for development and/or incomplete code/drivers 显示尚在开发中或尚未 ...

  3. Linux 内核编译配置选项简介(转)

    Linux 内核编译配置选项简介 作者:金步国 版权声明 本文作者是一位自由软件爱好者,所以本文虽然不是软件,但是本着 GPL 的精神发布.任何人都可以自由使用.转载.复制和再分发,但必须保留作者署名 ...

  4. [转]Linux 2.6.19.x 内核编译配置选项简介

    Linux 2.6.19.x 内核编译配置选项简介 作者:金步国,转载地址:http://lamp.linux.gov.cn/Linux/kernel_options.html 版权声明 本文作者是一 ...

  5. Linux 2.6.19.x 内核编译配置选项简介(内核裁剪)

    Linux 2.6.19.x 内核编译配置选项简介 Code maturity level options 代码成熟度选项 Prompt for development and/or incomple ...

  6. Linux 内核编译配置选项简介

    Linux 内核编译配置选项简介 作者:金步国 版权声明 本文作者是一位自由软件爱好者,所以本文虽然不是软件,但是本着 GPL 的精神发布.任何人都可以自由使用.转载.复制和再分发,但必须保留作者署名 ...

  7. [Linux]Linux 2.6.19.x 内核编译配置选项简介

    Linux 2.6.19.x 内核编译配置选项简介 Code maturity level options 代码成熟度选项 Prompt for development and/or incomple ...

  8. (转载) Linux 2.6.19.x 内核编译配置选项简介

    Linux 2.6.19.x 内核编译配置选项简介 作者:金步国 版权声明 本文作者是一位自由软件爱好者,所以本文虽然不是软件,但是本着 GPL 的精神发布.任何人都可以自由使用.转载.复制和再分发, ...

  9. Linux 2.6.19.x 内核编译配置选项简介(转)

    Linux 2.6.19.x 内核编译配置选项简介 作者:金步国 版权声明 本文作者是一位自由软件爱好者,所以本文虽然不是软件,但是本着 GPL 的精神发布.任何人都可以自由使用.转载.复制和再分发, ...

  10. Linux 内核引导选项简介 *********很多常用的受益匪浅

    内核引导选项大体上可以分为两类:一类与设备无关.另一类与设备有关.与设备有关的引导选项多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导选项.比如,如果你想知道可以向 AHA154 ...

最新文章

  1. Latex(一)公式自动编号与自动引用
  2. python是高级动态语言_Python动态语言之魅力揭秘
  3. 如何大写字符串中每个单词的第一个字符
  4. codevs1251 括号
  5. python项目部署到url_项目上线部署
  6. SAP loyalty management点击了公式超链接后的处理逻辑
  7. 【原】push过快的错误 (Pushing the same view controller instance more than once is not supported)...
  8. 是vans_Vans 的旧海报上原来有这么多学问…
  9. flex4.5的DataGrid
  10. AndroidDeveloper Weekly No.2
  11. cad插件_CAD插件自动标注安装教程
  12. 项目开发日记:陀螺仪的零漂现象
  13. 计算机无线网络连接怎么弄,如何在台式电脑上设置无线网络连接????
  14. 修理牧场(哈夫曼树)
  15. Cisco设备的启动以及交换机的介绍
  16. 比尔盖茨的十大人生定律中英对照
  17. elementUI日期时间控件控制选择时间区间不超过一个月
  18. python如何绘制两点间连线_如何用 Python 绘制玫瑰图等常见疫情图
  19. pytest插件_Pytest插件来爱❤️
  20. 魔百和 机顶盒 UNT401H_IPTV刷机 亲测成功!

热门文章

  1. sql server商品进销存管理系统设计及实现的数据库源代码
  2. ABAQUS 转子动力学载荷
  3. 计算机在酒店的应用ppt,计算机应用论文的专辑
  4. CSR8811蓝牙音频发射一拖二解决方案
  5. 易优EyouCMS全套插件使用说明
  6. Python CV2图像鼠标选择任意区域截图
  7. 3t studio 导出数据_Studio 3T下操作MongoDB的基本命令
  8. 【论文阅读笔记】FCOS代码结合论文阅读
  9. ARINC485和RS485的区别
  10. html空格折叠原因,html – 使用Bootstrap列折叠空白