### Linux内核配置选项诠释
#### 一、代码成熟度选项 (Codematurityleveloptions)
在编译Linux内核时,我们首先会遇到的是代码成熟度选项,这组选项主要针对那些正在开发中的代码和驱动。
- **显示尚在开发中或尚未完成的代码与驱动**:通常来说,如果用户不是内核的测试者或开发者,则无需勾选此选项。如果选择此项,那么在编译过程中可能会包括一些未经充分测试的功能,这可能导致系统不稳定或出现未知问题。
#### 二、常规设置 (Generalsetup)
接下来是常规设置部分,这一节涉及到了内核的基本配置选项。
- **在内核版本后面加上自定义的版本字符串**:此选项允许用户在内核版本号后添加一个自定义字符串(不超过64个字符)。通过执行`uname -a`命令即可查看到该自定义版本号。
- **自动在版本字符串后面添加版本信息**:如果选择此选项,在编译时需要确保安装了Perl及Git仓库。当内核编译完成后,其版本号将会自动包含编译时的信息。
- **使用交换分区或者交换文件来做为虚拟内存**:启用此选项可以使系统支持虚拟内存机制,即使用硬盘上的交换分区或交换文件作为内存扩展,以提高系统的性能和稳定性。
- **System V IPC支持**:这是大多数应用程序所需的必备选项之一,提供了信号量、消息队列和共享内存等机制,用于进程间的通信。
- **IPC命名空间支持**:如果不需要隔离进程间的IPC资源,则可以不选择此选项。
- **POSIX消息队列**:POSIX消息队列是POSIX IPC的一部分,提供了一种进程间通信的方法。
- **BSD Process Accounting**:此功能可以记录进程的创建时间、创建者、内存占用等信息,并将其写入文件。这对于监控系统的资源使用情况非常有用。
- **使用新的第三版文件格式**:选择此选项会使用新的文件格式来记录进程信息,但请注意新旧文件格式之间可能存在兼容性问题。
- **通过netlink接口向用户空间导出任务/进程的统计信息**:此选项提供了一个实时获取进程统计信息的接口,与BSD Process Accounting相比,这些信息在整个进程生命周期内都有效。
- **在统计信息中包含进程等候系统资源所花费的时间**:开启此选项可以在统计信息中记录进程等待CPU、I/O同步或内存交换等资源的时间。
- **UTS名字空间支持**:UTS名字空间可以隔离进程间的主机名和域名信息。如果不需要这样的隔离,则可以不选择此选项。
- **审计支持**:此选项对于那些需要审计系统调用的应用程序非常重要,例如SELinux等安全增强型内核模块。
- **支持对系统调用的审计**:只有在启用了审计支持的情况下,才能进一步启用对系统调用的审计功能。
- **把内核的配置信息编译进内核中**:选择此选项后,可以通过`scripts/extract-ikconfig`脚本提取内核的配置信息。
- **允许通过/proc/config.gz访问内核的配置信息**:如果希望能够在系统运行时通过`/proc/config.gz`文件访问内核配置信息,则需要选择此项。
- **CPU set支持**:对于具有大量CPU(超过16个)的SMP系统或NUMA系统而言,CPU set是一个重要的特性,可以用来控制进程在哪个CPU集上运行。
- **Kernel->user space relay支持(原relayfs)**:此选项为debugfs等文件系统提供了从内核空间向用户空间传递大量数据的能力。
- **initramfs源文件**:initramfs是一种初始化ramfs文件系统,用于在启动早期加载必要的模块和脚本。如果你不了解这一点,请保持空白。
- **编译时优化内核尺寸**:此选项会使内核编译器使用`-Os`而不是默认的`-O2`参数来优化内核的大小。然而,在某些情况下可能会产生错误的二进制代码。
- **收集额外的进程统计信息并通过taskstats接口发送到用户空间**:选择此选项可以收集更多的进程统计信息,并通过taskstats接口发送到用户空间进行分析。
#### 三、配置标准的内核特性(为小型系统)
- **允许对UID系统调用进行过时的16-bit包装**:这是一个遗留选项,主要用于向后兼容16-bit的UID系统调用。
- **Sysctl系统调用支持**:此选项允许用户在不重启系统的情况下调整内核参数。如果你还选择了支持`/proc`,则可以从`/proc/sys`目录下访问这些参数。
- **装载所有的调试符号表信息**:仅用于调试目的,选择此选项会使得内核包含所有调试符号表信息。
- **在kallsyms中包含内核知道的所有符号**:选择此选项将使内核包含所有已知符号,这会导致内核大小增加约300K。
- **做一次额外的kallsyms扫描**:除非你发现了kallsyms中的bug并需要报告它,否则一般不需要选择此选项。
- **支持热插拔设备**:此选项提供了对USB、PC卡等热插拔设备的支持。同时,udev守护进程也需要依赖于此功能。
- **支持打印**:此选项涉及到内核对打印设备的支持。