图21 修改Makefile文件
修改完成后,编译就很简单了
make –j2
一个命令就搞定了,连带模块和系统内核的编译全都由这个命令来完成。-j选项的含义就是开启并行编译内核的任务的数目,分配原则基本上是一个CPU可以分配两个任务,由于在编译文件时对硬盘的I/O会影响编译时间,所以开启2个任务可以加快整个内核的编译过程。由于内核源代码之间并不存在依赖,所以并行编译并不会带来任何麻烦。另外和2.4版的内核相比,在编译内核前,我们不再用执行make dep,也不用区分什么bzImage,modules等问题,默认的Makefile规则会为我们处理,我们只要简单的执行make就OK了 。
最后说点编译的小技巧:
如果你不想看到编译内核时的很多输出,但仍想关注警告和错误,你可以把输出重定向到一个文件里
make > your_own_dir_and_file。
这样,当你想关心一下编译过程的是后,去看那个文件就是了。其实 一般情况下,我们不许要关心那些警告和错误,把它们重定向到 /dev/null就OK了。
make > /dev/null
而且如果你在变异过程中看到很多的warning并不用担心,这并不会影响内核的使用,只是代码不规范造成的问题,如果真的遇到了错误,make会为你显示***这样开头的内容。
安装内核
在执行安装前,我们要切换到root用户,在控制台上执行su命令。下面就是整个安装过程。
首先,我们可以执行make modules_install 命令来安装模块,这个命令会把所有你编译的模块复制到/lib/<your kernel version>目录中去。
对于内核本身的安装,我们可以有两个不同的方法,一个简单,但是做完之后我们学不到什么东西,另一个稍显麻烦,但是我们却可以有所收获。先来看第一个,懒人方法
还是在源代码目录下执行
make install
这个命令就为我们全权代理了安装新内核的所有步骤,执行完后,就可以重新启动,感受一下自己的新内核了。
但是,make install都为我们做了什么呢?第二种方法就是自己来手动安装内核,步骤有三,而这正是make install的工作。
1. 复制生成的内核镜像到/boot
在你编译好内核后,在目录arch/i386/boot/中会有一个名为bzImage的文件躺在那里,这就是我们说的被压缩的可引导的内核镜像,把它复制到/boot目录中,并重新命名为vmlinuz-<your kernel version>,在我们的例子中就是vmlinuz-2.6.11.9
cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.11.
2. 生成initrd-<your kernel version>.img文件
这个文件的作用是临时的引导硬件到实际内核vmlinuz能够接管并继续引导的状态。用命令
mkinitrd initrd-2.6.11.9 2.6.11.9可以为我们的系统生成一个initrd-2.6.11.8.img的文件,把这个文件也复制到/boot目录下。要说明的是mkinitrd是Redhat特有的命令。其它发行版上应该有相应的生成这个文件的命令。
3. 配置grub
到这里,整个内核的安装就结束了,下面要做的就是让机器能够引导新内核,打开/boot/grub/grub.conf,加上下面的代码:
title Magic Linux (2.6.11.9) # 这是你的Linux发行版的名字
root (hd0,10) # 我把/boot放在了/dev/hda11上所以是(hd0,10)
kernel /vmlinuz-2.6.11.9 ro root=/dev/hda13 # 这里的root指的是/目录所在的分区,我安装的
# 时候放到了/dev/hda13中
splash=silent
initrd /initrd-2.6.11.9.img
如果你的硬盘上还有Windows那么,加入下面的代码
title dos
rootnoverify (hd0,0) # 注意,这是你的windows安装在C盘的时候的情形
# 具体要根据你的情况而定
makeactive
chainloader +1
保存并退出
执行reboot,重新启动,如果一切正常,应该能看到2.6.11.9的启动选项了。
最后,我们通过这个编译的过程可以看到,操作系统的内核其实和应用程序没什么不同,也是一种软件,我们可以在系统中编译很多版本的内核。建议各位保留一个安全稳定的内核供使用,之后自己可以任意发挥自己的想象去试验内核的选项,只有这样才能编译出最适合自己需求的内核。