/boot
这个引导分区中存有Linux内核。看看FHS(FHS: Filesystem Hierarchy Standard,文件系统组织标准)中对/boot的描述:包含引导过程所需要的所有东西,/boot中的所有数据都是内核开始执行用户态程序之前所需要的,这可能包含保存的主引导扇区数据以及扇区映射文件。
在我的系统(Fedora8)上,/boot中的内容如下:
[kimia@localhost Desktop]$ ls -l /boot
total 5801
-rw-r–r– 1 root root 79370 2007-11-09 10:46 config-2.6.23.1-49.fc8
drwxr-xr-x 2 root root 1024 2007-12-01 14:47 grub
-rw——- 1 root root 2980387 2007-11-12 19:25 initrd-2.6.23.1-49.fc8.img
drwx—— 2 root root 12288 2007-07-23 00:07 lost+found
-rw-r–r– 1 root root 851118 2007-11-09 10:46 System.map-2.6.23.1-49.fc8
-rw-r–r– 1 root root 1978688 2007-11-09 10:46 vmlinuz-2.6.23.1-49.fc8
[kimia@localhost Desktop]$
其中有一些重要的文件或文件夹:
vmlinuz:内核文件
initrd.img: 初始化RAM用的镜像文件
grub/: GRUB配置文件目录
升级内核
你可以选择使用Patch或者编译整个内核。关于这两种方法在内核源代码包中都有文件详述,patch可以参看/usr/src/your_kernel_version/Documentation/applying-patches.txt,编译内核的说明可以参看/usr/src/your_kernel_version/README文件。要升级或重编译内核的话,强烈建议先看看相应的文件。
编译内核是Linux管理和维护的一项重要技能,本文将介绍内核编译相关的事宜。
内核配置脚本简介
这个文件中存有编译过程中编译器所需要的内核配置信息。因此在正式编译内核之前该文件必须存在于内核源代码中。你可以在/boot下找到一个名为config-2.X.X的配置文件:
[kimia@localhost Desktop]$ ls /boot/config*
/boot/config-2.6.23.1-49.fc8
[kimia@localhost Desktop]$
看看配置文件中的内容:
CONFIG_X86_32=y
CONFIG_TOSHIBA=m
# CONFIG_X86_REBOOTFIXUPS is not set
……
配置文件中有三种变量类型,第一种表示内核完全支持某功能,第二种表示以模块(m)方式支持某功能,第三种是注释掉的,它表示某功能将不被内核支持。
创建内核配置文件
你可以直接将/boot下现有的配置文件(如上面列的我机器上的config-2.6.23.1-49.fc8)拷贝到内核源代码目录中并重命名为.config,例如我在一台内核为2.4版的Red Hat 9的机器上编译内核的时候:
[kimia@localhost Desktop]$ sudo cp /boot/config-2.4.20-8 /usr/src/linux-2.4.35/.config
[kimia@localhost Desktop]$
你也可以重新配置此文件,系统将提供各种带界面的或者文本模式下的配置文件配置办法。
对于2.6内核:你可以选择
make config:文本模式下配置内核
make menuconfig:带彩色菜单、列表和对话框的文本模式下配置内核
make xconfig:基于X Window (Qt)的配置界面
make gconfig:基于X Window (Gtk)的配置界面
另外还有make oldconfig, make silentoldconfig, make defconfig, make allyesconfig等等选项,这些选项的具体意思都可以在源码包中的README中看到。这许多的配置方法的目的都是一个:配置内核,我们一般选择menuconfig。
在开始使用menuconfig配置之前,你需要先安装ncurses。这是配置菜单的依赖包。
之后,你就可以执行make menuconfig命令了。menuconfig截图如下:
内核”make”注意事项:
1) 包含不必要的驱动程序将会使得内核变大。另外在某些情况下还可能导致别的问题:诸如操作一个并不存在的卡控制器可能会识得其他本来可用的控制器产生混乱。
2) 编译时如果使用”Processor type”(处理器类型)来设置此内核支持比386更高的处理器,则会导致此内核不能在工作在一台386的机器上,因为内核会在机器启动时检测CPU类型,发现不符合,然后放弃引导。
3) 如果在编译时指定了”math-emulation”(数学模拟),则此内核在一台拥有物理的数学协处理器的机器上仍然可以运行:此时这个数学模拟器将不会被使用。此时内核的体积将会稍微庞大一些,但是不管在有或者没有数学协处理器的机器上它将都能运行。
4) “kernel hacking”细节配置通常会导致一个较大或者较缓慢的内核(或者两者都是)。甚至可能导致内核在处理日常事务的时候不够稳定。因此在遇到有关”development”、”experimental”、或者”debugging”这些特性的问题的时候,你或许应该尽量选择”n”。
配置选项中包括很多信息,这些信息我将会在另外的文章中总结。
配置完之后,源码目录下将有一个.config文件。
解决依赖性
make dep命令将正确建立所有的依赖。这将依据.config中的配置设置,并将配置层层推进放入对应的源代码子目录。
清理并准备目录结构
make clean
构建内核镜像
make bzImage,注意Image的首字母I是大写的。
构建内核模块
make modules,这可能是需时最长的过程了
安装内核模块
make modules_install,这将把上一步构建出来的内核放入一个模块子目录中:/lib/modules/your_kernel_version。
安装内核
make install,这会把你之前编译好的内核放入/boot中。并且会更新引导文件。