General setup ---> 常规设置
[*]Prompt for development and/or incomplete code/drivers
显示尚在开发中或尚未完成的代码与驱动.你应该选择它,因为有许多设备可能必需选择这个选项才能进行配置,实际上它是安全的。这个选项同样会让一些老的驱 动的可用。如果你选了Y,你将会得到更多的阿尔法版本的驱动和代码的配置菜单。
()Local version - append to kernel release
在内核版本后面加上自定义的版本字符串(小于64字符),可以用"uname -a"命令看到
[ ]Automatically append version information to the version string
自动生成版本信息。这个选项会自动探测你的内核并且生成相应的版本,使之不会和原先的重复。这需要Perl的支持。由于在编译的命令make-kpkg 中我们会加入- – append-to-version 选项来生成自定义版本,所以这里选N。
Kernel compression mode (Gzip)内核压缩模式选baip2
gzip用于UNIX系统的文件压缩。后缀为.gz的文件。现今已经成为Internet 上使用非常普遍的一种数据压缩格式,或者说一种文件格式。HTTP协议上的GZIP编码是一种用来改进WEB应用程序性能的技术。大流量的WEB站点常常使用GZIP压缩技术来让用户感受更快的速度。
bzip2是一个基于Burrows-Wheeler 变换的无损压缩软件,压缩效果比传统的
LZ77/LZ78压缩算法来得好。它是一款免费软件。bzip2能够进行高质量的数据
压缩。它利用先进的压缩技术,能够把普通的数据文件压缩10%至15%,压缩的速
度和解压的效率都非常高!支持现在大多数压缩格式,包括tar、gzip 等等。
lzma是一个Deflate和LZ77算法改良和优化后的压缩算法,开发者是Igor Pavlov,
2001年被首次应用于7-Zip压缩工具中,是 2001年以来得到发展的一个数据压缩算法。
它使用类似于 LZ77 的字典编码机制,在一般的情况下压缩率比 bzip2 为高,用于
压缩的可变字典最大小可达4GB。
[*] Support for paging of anonymous memory (swap)
将使你的内核支持虚拟内存这个虚拟内存在LINUX中就是SWAP分区。除非你不想要SWAP分区,否则这里必选Y。
[*] System V IPC
System V进程间通信(IPC)支持,于处理器在程序之间同步和交换信息,如果不选这项,很多程序运行不起来,特别地,你想在LINUX下运行 DOS仿真程序,你必须要选Y。
[*] POSIX Message Queues
POSIX消息队列,这是POSIX IPC中的一部分。建议你最好将它选上POSIX 表示可移植操作系统接口
[*] BSD Process Accounting
这是充许用户进程访问内核将账户信息写入文件中的这通常被认为是个好主意,建议你最好将它选上。
将进程的统计信息写入文件的用户级系统调用,主要包括进程的创建时间/创建者/内存占用等信息
[*] BSD Process Accounting version 3 file format
选Y,统计信息将会以新的格式(V3)写入,这格式包含进程ID和父进程。注意这个格式和以前的 v0/v1/v2 格式不兼容,所以你需要升级相关工具来使用它。
[] Export task/process statistics through netlink (EXPERIMENTAL)
处于实验阶段的功能。通过通用的网络输出工作/进程的相应数据,和BSD不同的是,这些数据在进程运行的时候就可以通过相关命令访问。和BSD类似,数据 将在进程结束时送入用户空间。如果不清楚,选N。
[] Enable per-task delay accounting (EXPERIMENTAL)
在统计信息中包含进程等候系统资源(cpu,IO同步,内存交换等)所花费的时间
[] Enable extended accounting over taskstats (EXPERIMENTAL)
在统计信息中包含扩展进程所花费的时间
[] Enable per-task storage I/O accounting (EXPERIMENTAL)
在统计信息中包含I/O存储进程所花费的时间
[*] Auditing support
允许审计的下层能够被其他内核子系统使用,比如SE-Linux,它需要这个来进行登录时的声音和视频输出。没有 CONFIG_AUDITSYSCALL 时(即下一个选项)无法进行系统调用。
审计支持,用于和内核的某些子模块同时工作,(例如SELinux)需要它,只有同时选择其子项才能
对系统调用进行审计
[*] Enable system-call auditing support
支持对系统调用的审计
允许系统独立地或者通过其他内核的子系统,调用审计支持,比如SE-Linux。要使用这种审计的文件系统来查看特性,请确保 INOTIFY 已经被设置。
RCU Subsystem ---> 一个高性能的锁机制RCU 子系统
RCU Implementation (Tree-based hierarchical RCU) --->
RCU 实现机制
(X) Tree-based hierarchical RCU
基本数按等级划分
[ ] Enable tracing for RCU
激活跟踪
(32) Tree-based hierarchical RCU fanout value
基本数按等级划分分列值
[ ] Disable tree-based hierarchical RCU auto-balancing
< > Kernel .config support
这个选项允许.config文件(即编译LINUX时的配置文件)保存在内核当中。它提供正在运行中的或者还在硬盘中的内核的相关配置选项。可以通过内核 镜像文件 kernel image file 用命令 script scripts/extract-ikconfig 来提取出来,作为当前内核重编译或者另一个内核编译的参考。如果你的内核在运行中,可以通过/proc/config.gz文件来读取。下一个选项提供这 项支持。
看起来好像是一个不错的功能,可以把编译时的 .config文件保存在内核中,以供今后参考调用。用来重编译和编译其他的内核的时候可以用上。你是一个编译内核的狂人的话,这项要选上
(18) Kernel log buffer size (16 => 64KB, 17 => 128KB)
内核日志缓存的大小,12 => 4 KB,13 => 8 KB,14 => 16 KB单处理器,15 => 32 KB多
处理器,16 => 64 KB for x86 NUMAQ or IA-64,17 => 128 KB for S/390
[ ] Enable access to .config through /proc/config.gz (NEW)
上一项的子项,可以通过/proc/config.gz 访问当前内核的.config 。新功能,上一项选的话这个就选上吧。
[*] Group CPU scheduler
CPU组调度(Group Scheduling,可以为进程赋予不同于nice level的调度优先级。尤其
在企业级硬件系统上,可以进一步优化实时任务的调度。桌面用户可以不选)
[*] Group scheduling for SCHED_OTHER
SCHED_OTHER(SCHED:Process Scheduler,
负责控制进程对CPU的使用.调度算法的公平,有效,硬件有关事件的及时处理)组调度
[ ] Group scheduling for SCHED_RR/FIFO
SCHED_RRFIFO组调度
Basis for grouping tasks (Control groups)
基于分配的任务
[*] Control Group support --->
cgroup支持,如cpusets那样来使用cgroup子系统进程(不确定可以不选
[ ] Example debug cgroup subsystem
cgroup子系统调试例子
[*] Namespace cgroup subsystem
cgroup子系统命名空间
[*] Freezer cgroup subsystem
[ ] Device controller for cgroups
cgroups设备控制器
[*] Cpuset support
只有含有大量CPU(大于16个)的SMP系统或NUMA(非一致内存访问)系统才需要它
[*] Include legacy /proc/<pid>/cpuset file
[*] Simple CPU accounting cgroup subsystem
简单cgroup子系统cpu所花费的时间
[*] Resource counters
资源计数器
[ ] Memory Resource Controller for Control Groups
cgroup内存资源控制器
[ ] enable deprecated sysfs features which may confuse old usersp│
-*- Kernel->user space relay support (formerly relayfs)
在某些文件系统上(比如debugfs)提供从内核空间向用户空间传递大量数据的接口
内核系统区和用户区进行传递通讯的支持。这个选项在特定的文件系统中提供数据传递接口支持,它可以提供从内核空间到用户空间的大批量的数据传递工具和设 施。如果不清楚,选N。
-*- Namespaces support
命名空间支持,允许服务器为不同的用户信息提供不 同的用户名空间服务
[*] UTS namespace
通用终端系统的命名空间。它允许容器,比如Vservers利用UTS命名空间来为不同的服务器提供不同的UTS。如果不清楚,选N。
UTS名字空间支持,不确定可以不选
[*] IPC namespace
IPC命名空间,不确定可以不选
[*] User namespace (EXPERIMENTAL)
User命名空间,不确定可以不选
[*] PID Namespaces (EXPERIMENTAL)
PID命名空间,不确定可以不选
[*] Network namespace
[*] Initial RAM filesystem and RAM disk (initramfs/initrd) suppor│
初始RAM的文件和RAM磁盘( initramfs /initrd)支持(如果要采用initrd启动则要选择,否则可以不选)
() Initramfs source file(s)
initrd已经被initramfs取代,如果你不明白这是什么意思,请保持空白
[] Optimize for size
这个选项将在GCC命令后用 “-Os” 代替 “-O2″参数,这样可以得到更小的内核。没必要选。一个编译好的内核才7-10多M,大家不会少这么点空间吧。选上了可能会出一些问题。最好不选。有时 会产生错误的二进制代码
[ ] Configure standard kernel features (for small systems) --->
这个选项可以让内核的基本选项和设置无效或者扭曲。这是用于特定环境中的,它允许“非标准”内核。你要是选它,你一定要明白自己在干什么。这是为了编译某 些特殊用途的内核使用的,例如引导盘系统。
配置标准的内核特性(为小型系统)
-*- Load all symbols for debugging/ksymoops
装载所有的调试符号表信息,仅供调试时选择
[*] Include all symbols in kallsyms
在kallsyms中包含内核知道的所有符号,内核将会增大300K
[*] Do an extra kallsyms pass
除非你在kallsyms中发现了bug并需要报告这个bug才打开该选项
Kernel Performance Events And Counters --->
[*] Kernel performance events and counters
[*] Tracepoint profiling sources
[ ] Kernel performance counters (old config option)
[ ] Debug: use vmalloc to back perf mmap() buffers
[ ] Disable heap randomization
禁用随机heap(heap堆是一个应用层的概念,即堆对CPU是不可见的,它的实现方式有多种,可以由OS实现,也可以由运行库实现,如果你愿意,你也可以在一个栈中来实现一个堆)
Choose SLAB allocator (SLUB (Unqueued Allocator)) --->
选择内存分配管理器(强烈推荐使用SLUB)
( ) SLAB各种环境通用的内存分配管理器
(X) SLUB (Unqueued Allocator)更加优秀的内存分配管理器
[] Profiling support (EXPERIMENTAL)不选
剖面支持,用一个工具来扫描和提供计算机的剖面图。
支持系统评测(对于大多数用户来说并不是必须的)
< > OProfile system profiling (EXPERIMENTAL)
OProfile评测和性能监控工具
[] Kprobes不选
调试内核除非开发人员,否则不选
GCOV-based kernel profiling --->
[ ] Enable gcov-based kernel profiling
[*] Enable loadable module support --->
打开可加载模块支持,如果打开它则必须通过"make modules_install"把内核模块安装在/lib/modules/中
这个选项可以让你的内核支持模块,模块是什么呢?模块是一小段代码,编译后可在系统内核运行时动态的加入内核,从而为内核增加一些特性或是对某种硬件进行 支持。一般一些不常用到的驱动或特性可以编译为模块以减少内核的体积。在运行时可以使用modprobe命令来加载它到内核中去(在不需要时还可以移除 它)。一些特性是否编译为模块的原则是,不常使用的,特别是在系统启动时不需要的驱动可以将其编译为模块,如果是一些在系统启动时就要用到的驱动比如说文 件系统,系统总线的支持就不要编为模块,否则无法启动系统。在启动时不用到的功能,编成模块是最有效的方式。你可以查看MAN手册来了解:modprobe, lsmod, modinfo, insmod 和 rmmod.
如果不清楚,选Y。
[ ] Forced module loading
允许强制加载模块
[*] Module unloading
允许卸载已经加载的模块
[*] Forced module unloading
允许强制卸载正在使用中的模块(比较危险)这个选项允许你强行卸除模块,即使内核认为这不安全。内核将会立即移除模块,而不管是否有人在使用它(用 rmmod -f 命令)。这主要是针对开发者和冲动的用户提供的功能。
如果不清楚,选N。
[ ] Module versioning support
有时候,你需要编译模块。选这项会添加一些版本信息,来给编译的模块提供独立的特性,以使不同的内核在使用同一模块时区别于它原有的模块。这有时可能会有点用。
如果不清楚,选N。
允许使用其他内核版本的模块(可能会出问题)
[ ] Source checksum for all modules
为所有的模块校验源码,如果你不是自己编写内核模块就不需要它
这个功能是为了防止你在编译模块时不小心更改了内核模块的源代码但忘记更改版本号而造成版本冲突。如果不清楚,选N。