General setup
常规设置

Cross-compiler tool prefix
CONFIG_CROSS_COMPILE

交叉编译工具前缀(比如"arm-linux-"相当于使用"make CROSS_COMPILE=arm-linux-"进行编译).除非你想配置后默认自动进行交叉编译,否则不要使用此选项.

Compile also drivers which will not load
COMPILE_TEST
一些驱动可能在其它的编译平台被编译,而这个编译平台跟它的期望运行平台不一样(这不就是交叉编译么),
所以即使这些驱动不能在编译平台加载运行,一些开发者仍然可能想要构建这个驱动来进行编译测试
(就是看看它到底能不能编译通过,没打算让它运行么)所以,根据你的需求来选择好了,这个一般是不选。

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".

Enable process_vm_readv/writev syscalls
(CROSS_MEMORY_ATTACH)
启用process_vm_readv / writev系统调用

open by fhandle syscalls
CONFIG_FHANDLE
用户程序可以使用句柄(而非文件名)来追踪文件(使用open_by_handle_at(2)/name_to_handle_at(2)系统调用),
即使某文件被重命名,用户程序依然可定位那个文件.此特性有助于实现用户空间文件服务器(userspace file server).不确定的选"N",但使用systemd的建议选"Y".

uselib syscall (USELIB)
uselib系统调用

Auditing support
CONFIG_AUDIT

内核审计(跟踪每个进程的活动情况)支持,某些安全相关的内核子系统(例如SELinux)需要它

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

Temporary per-CPU printk log buffer size
临时的每CPU printk日志缓冲区大小

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"文件

Memory controller
内存控制器
Swap controller
交换控制器
Swap controller enabled by default
默认情况下启用交换控制器
IO controller
IO控制器
IO controller debugging
IO控制器调试
CPU controller
CPU控制器
Group scheduling for SCHED_OTHER
SCHED_OTHER的组调度
CPU bandwidth provisioning for FAIR_GROUP_SCHED
FAIR_GROUP_SCHED的CPU带宽配置
Group scheduling for SCHED_RR/FIFO
SCHED_RR / FIFO的组调度
PIDs controller
PID控制器
RDMA controller
RDMA控制器
Freezer controller
冷柜控制器
HugeTLB controller
HugeTLB控制器
Cpuset controller
Cpuset控制器
Include legacy /proc//cpuset file
包括legacy / proc / / cpuset文件
Device controller
设备控制器
Simple CPU accounting controller
简单的CPU计费控制器
Perf controller
Perf控制器
Support for eBPF programs attached to cgroups
支持附加到cgroup的eBPF程序
Debug controller
调试控制器

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的带宽
    Group scheduling for SCHED_OTHER
    CONFIG_FAIR_GROUP_SCHED
        公平CPU调度策略,也就是在多个cgroup之间平均分配CPU带宽.
        "鸡血补丁"CONFIG_SCHED_AUTOGROUP(自动分组调度功能)依赖于它.
        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).
UTS namespace
CONFIG_UTS_NS
    uname() 系统调用的命名空间支持
IPC namespace
CONFIG_IPC_NS
    进程间通信对象ID的命名空间支持
User namespace
CONFIG_USER_NS
    允许容器(也就是VServer)使用user命名空间.如果开启此项,
    建议同时开启CONFIG_MEMCG和CONFIG_MEMCG_KMEM选项,
    以允许用户空间使用"memory cgroup"限制非特权用户的内存使用量.不确定的选"N".
PID Namespaces
CONFIG_PID_NS
    进程PID命名空间支持
Network namespace
CONFIG_NET_NS
    网络协议栈的命名空间支持

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年之后的发行版中必须关闭.
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
    文件或一个空格分隔的目录与文件列表.细节可以参考
    "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"是目前渐渐流行的格式,压缩率高,解压速度也不慢.

Compiler optimization level
编译器优化级别

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包装,建议关闭
Multiple users, groups and capabilities support
    多个用户,组和功能支持
sgetmask/ssetmask syscalls support
    sgetmask/ssetmask系统调用支持
Sysctl syscall support
CONFIG_SYSCTL_SYSCALL
    二进制sysctl接口支持.由于现在流行直接通过/proc/sys以ASCII明码方式修改内核参数
    (需要开启CONFIG_PROC_SYSCTL选项),所以已经不需要再通过二进制接口去控制内核参数,
    建议关闭它以减小内核尺寸.
Sysctl syscall support
    Sysctl系统调用支持
Posix Clocks & timers
    Posix时钟和计时器
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)系统接口,建议开启.
Enable signalfd() system call
CONFIG_SIGNALFD
    signalfd()系统调用支持,建议开启.传统的处理信号的方式是注册信号处理函数,
    由于信号是异步发生的,要解决数据的并发访问和可重入问题.signalfd可以将信号抽象为一个文件描述符,
    当有信号发生时可以对其read,这样可以将信号的监听放到select/poll/epoll监听队列中.
Enable timerfd() system call
CONFIG_TIMERFD
    timerfd()系统调用支持,建议开启.timerfd可以实现定时器功能,将定时器抽象为文件描述符,
    当定时器到期时可以对其read,这样也可以放到select/poll/epoll监听队列中.
    更多信息可以参考linux新的API signalfd、timerfd、eventfd使用说明
Enable eventfd() system call
CONFIG_EVENTFD
    eventfd()系统调用支持,建议开启.eventfd实现了线程之间事件通知的方式,
    eventfd的缓冲区大小是sizeof(uint64_t),向其write可以递增这个计数器,read操作可以读取,并进行清零.
    eventfd也可以放到select/poll/epoll监听队列中.当计数器不是0时,有可读事件发生,可以进行读取.

Enable bpf() system call

启用bpf()系统调用

Use full shmem filesystem
CONFIG_SHMEM

完全使用shmem来代替ramfs.shmem是基于共享内存的文件系统(可以使用swap),
在启用CONFIG_TMPFS后可以挂载为tmpfs供用户空间使用,它比简单的ramfs先进许多.
仅在微型嵌入式环境中且没有swap的情况下才可能会需要使用原始的ramfs.

Enable AIO support
CONFIG_AIO

开启POSIX异步IO支持.它常常被高性能的多线程程序使用,建议开启

Enable madvise/fadvise syscalls

启用madvise/fadvise系统调用

Enable userfaultfd() system call

启用userfaultfd()系统调用

Enable PCI quirk workarounds
CONFIG_PCI_QUIRKS

开启针对多种PCI芯片组的错误规避功能,仅在确定你的PCI芯片组确实没有没有任何bug时才关闭此功能.
至于究竟哪些芯片组有bug,你可以直接打开"drivers/pci/quirks.c"文件查看.不确定的选"Y".

Enable membarrier() system call
启用membarrier()系统调用

Embedded system
CONFIG_EMBEDDED

如果你是为嵌入式系统编译内核,可以开启此选项,这样一些高级选项就会显示出来.
单独选中此项本身对内核并无任何改变.

PC/104 support

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"中包含了从内核导出的虚拟内存的各种统计信息.
开启此项后可以显示较详细的信息(包含各种事件计数器),关闭此项则仅仅显示很简略的信息.
主要用于调试和统计.

Disable heap randomization

禁用堆随机化

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)的嵌入式环境.

Allow slab caches to be merged

允许合并slab缓存

SLAB freelist randomization

SLAB freelist随机化

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"进行优化
(在分支预测失败时会浪费很多时间在回退上,但是这种情况极少发生).很多内核子系统都支持进行这种优化.建议开启.

Static key selftest

静态密钥自检

GCC plugins

GCC插件

Stack Protector buffer overflow detection

  Stack Protector缓冲区溢出检测
  

Number of bits to use for ASLR of mmap base address

用于mmap基址的ASLR的位数

Number of bits to use for ASLR of mmap base address for compatible applications

兼容应用程序的mmap基址的ASLR使用的位数

Use a virtually-mapped stack

使用虚拟映射堆栈

Perform full reference count validation at the expense of speed

以牺牲速度为代价执行完整的引用计数验证

GCOV-based kernel profiling

基于GCOV的内核分析

Transparent user-space probes
CONFIG_UPROBES

Uprobes与Kprobes类似,但主要用于用户空间的调试.

Enable GCOV-based kernel profiling
CONFIG_GCOV_KERNEL

基于GCC的gcov(代码覆盖率测试工具)的代码分析支持,仅用于调试

Profile entire Kernel
CONFIG_GCOV_PROFILE_ALL
    支持对整个内核进行分析.内核体积将会显著增大,并且运行速度显著减慢.