Linux内核:配置内核(一)

本文译自Linux.orgDevynCJohnson的系列文章《Linux内核》,本篇链接:http://www.linux.org/threads/the-linux-kernel-configuring-the-kernel-part-1.4274/,转载请注明出处及原作者。

在上一篇文章中我们讨论了Linux内核的安全性Linux内核的安全性,从这篇文章开始我们将介绍如何配置和编译Linux的内核。

配置内核是很花时间的,配置工具会向开发者问很多涉及到内核组态方方面面的问题。如果对这些问题或是特性不是十分了解,最好选择默认值。 在配置内核之前,需要先在源代码的文件夹中打开一个terminal,有几种方式启动配置工具:

make config - 纯文本界面,也是最常用的选项。
make menuconfig - 基于文本和彩色菜单的界面。这个选项允许开发者在配置过程中保存组态。需要事先安装ncurses。
make nconfig - 文本和彩色菜单界面,必须安装curses。
make xconfig - QT/X-windows 界面,必须安装QT。
make gconfig - Gtk/X-windows界面,必须安装GTK。
make oldconfig - 使用纯文本界面更新组态文件,该文件可以被复制以用于编译其他更新版本的内核源代码。
make silentoldconfig - 与make oldconfig相同,但是组态文件并不会被显示出来。
make olddefconfig - 与make silentoldconfig相同,不过有些问题会预设为默认值。
make defconfig - 会基于当前系统的结构自动创建一个默认的组态文件。
make {PLATFORM}_defconfig - 基于arch/$ARCH/configs/{PLATFORM}_defconfig的设置创建一个组态文件。
make allyesconfig - 这个选项会尽可能多的选择“是”并创建组态文件。
make allmodconfig - 该选项会尽可能多地在内核中添加模块。
注:Linux的内核代码可以被置于内核中或是成为一个模块。例如,用户可以把蓝牙驱动添加为一个模块(独立于内核之外),加入到内核之中或者根本就不添加蓝牙。当代码被加入到模块之中时,内核就会占用更多的内存,并且在启动时更慢,不过内核的性能更好。如果将代码以模块的形式添加,代码会被保存在硬盘上。一旦需要使用这些代码的时候,他们就会被读到内存中,这会减少内核对于内存的使用并缩短启动时间。然而内核的性能会下降,因为内核和模块都会始终散落在内存之中。另一个选项就是不添加这些代码,例如一个开发者知道自己的应用永远都不会应用到蓝牙设备,那么久没有添加这些驱动。这会提升内核的性能,如果之后用户需要蓝牙的驱动的话,就需要再安装蓝牙驱动或者是更新整个内核。
make allnoconfig - 该选项会尽可能多地选择“否”并创建组态文件,有可能导致内核无法在目标设备上正常运转。
make randconfig - 该选项随机配置内核。
make localmodconfig - 该选项基于目前的模块和系统配置创建配置文件。
make localyesconfig - 会在所有的模块选项中选择“是”。 小技巧:最好使用“make menuconfig“,因为用户可以保存他们的进度。”make config“就不包括这一功能。配置内核的过程是很漫长的。

组态:
大多数的开发者选择“make config”或者图形菜单,在输入了需要的指令之后,第一个问题就是询问该内核是否是64位的。一共有三种选项:“Y”是,”n”否,“?”用于解释该问题。在这个教程中,我们选择“Y”,然后按回车。 注:本教程将采用“make config”的方式来配置我们的内核。 接下来会显示“Cross-compiler tool prefix(CROSS_COMPILE)”来询问是否为交叉编译[1],如果是交叉编译的话,就可以输入诸如“arm-unknown-linux-gnu-”来编译ARM版本,或者”x86_64-pc-linux-gnu-“来编译64位PC系统。有许多这样的指令,如果开发者知道他们使用的是那种处理器的话,就可以非常容易的查询到属于该类型处理器的指令。 注:前面问题不同的回答会影响到之后出现的问题,所以我会提及到我的选择以便读者们可以按照我的步骤向下进行。 在这里我们不进行交叉编译,直接敲回车键进入下一个问题。

接下来我们会看到“Local version - append to kernel release (LOCALVERSION) []”。在这里开发者可以给这个内核命名和标记特殊的版本号。我输入了“LinuxDotOrg”。现在这个版本的内核就叫做“3.9.4-LinuxDotOrg”。

接下来组态工具会询问“Automatically append version information to the version string (LOCALVERSION_AUTO) [N/y/?]”(自动将版本信息加入到版本字符中吗?),这个是用于git的,在这个例子中我们不会用到git,所以输入“N”。

接下来会问到“Kernel compression mode”(内核压缩模式),我们可以从以下五种模式中选一个:
1. Gzip (KERNEL_GZIP)
2. Bzip2 (KERNEL_BZIP2)
3. LZMA (KERNEL_LZMA)
4. XZ (KERNEL_XZ)
5. LZO (KERNEL_LZO)
Gzip是默认的,所以我选择“1”。每种压缩模式都会有或高或低不同的压缩率,高压缩率意味着压缩文件更小,不过也需要花更长时间解压缩。

现在屏幕上显示“Default hostname (DEFAULT_HOSTNAME) [(none)]”(默认主机名),通常情况下开发者不会在这里输入主机名,因此Linux用户可以设置他们自己的主机名。

接下来开发者可以打开/关闭交换空间。Linux划分出一块单独区域(交换空间)用作虚拟内存,这跟windows系统的页文件相同,在“Support for paging of anonymous memory (swap) (SWAP) [Y/n/?]”这个选项中选择“是”。

下一行”System V IPC (SYSVIPC) [Y/n/?]”询问该内核是否支持IPC。进程间通信(IPC)允许进程之间通信和同步。最好是支持IPC,否则很多应用程序都不能运行。

接下来就会问到“POSIX Message Queues (POSIX_MQUEUE) [Y/n/?]“POSIX信息队列?,POSIX信息队列是进程间通信的一种形式,每个信息都会有一个优先级。这个问题的默认答案是”是“。

下一个问题是“open by fhandle syscalls (FHANDLE) [Y/n/?]“,询问我们是否允许使用文件handle替代文件名来进行文件操作,默认选项是”是“。

有的时候当开发者做出了选择之后,有一些问题就会被自动回答。例如下一个问题“Auditing support”就被自动回答为”是“。

下一个问题是“Enable system-call auditing support (AUDITSYSCALL) [Y/n/?]”,这与监控有关,如果回答是,所有的系统指令都会被记录下来。如果开发者对于内核的性能十分关注的话,这类监控相关的特性都应该尽可能地禁止。我在这里选择“否”。

下一个问题是“Make audit loginuid immutable (AUDIT_LOGINUID_IMMUTABLE) [N/y/?]”(保持登录ID不变?),这是询问进程能否更改它们的登录ID,如果禁止,在用户空间内运行的进程就不能修改他们的登录ID,处于性能的考虑,我选择“是”来禁止这个特性。

注:如果用户是通过“make config”来配置内核的话,将无法保存他们的选择。 在下一篇文章中,我们将讨论一下如何配置IRQ子系统以及在配置过程中所有的选项。

[1]交叉编译,是指编译用于其他处理器上的代码,例如,一个Intel的系统编译用于非Intel处理器的系统就是典型的交叉编译。

你可能感兴趣的:(Linux,综合)