1.将内核源码包linux-2.4.20.tar.bz2 copy至/usr/src目录下:
#cp linux-2.4.20.tar.bz2 /usr/src
#cd /usr/src
2.将指向以前内核版本的symbol link删除
#rm -f linux-2.4
3.用以下命令解开压缩包 #bzip2 -d linux-2.4.20.tar.bz2
#tar -xvf linux-2.4.20.tar
4.创建新的symbol link以链接到刚解开的源码所在目录
#ln -s linux-2.4.20 linux-2.4
5.进入到以后编译时用的工作目录虾:
#cd /usr/src/linux-2.4
6.该命令保证源代码目录下没有不正确的.o文件(即object文件,编译c语 言时生成的,目的是下一步编译成可执行码时link之用)以及文件的相互 倚赖关系.第一次编译刚下载的源码包不用此命令,但如果多次使用这 些源码编译内核,那么一定要先运行本命令.
#make mrproper
.为了不影响已经可用的内核(比如安装linux时装入的内核),现在需要 保存以前的可用的内核(以使得编译失败仍然可以"方便的"启动linux), 并且我们要对本次编译的内核标识一个容易辨认的标记,以下几步与 编译暂时无关.
7.1偶使用grub作为boot manager,所以要修改grub.conf文件, #cp /boot/grub/grub.conf /boot/grub/grub.conf.bck (建议有条件打印一份原始的grub.conf文件,原因见第7.4步) #emacs /boot/grub/grub.conf (emacs小提示: ctrl+ x +s 为保存结果,ctrl + x +c为关闭emacs, 删除n行文字为:先把光标放在要删除文字的起始处 ctrl + u,然后敲入要 删除的行数,比如4,最后ctrl + k)
下面是偶的grub.conf内容:
default=1
timeout=10
splashimage=(hd0,6)/grub/splash.xpm.gz
title Psyche (2.4.18-14 standard)
root (hd0,6)
kernel /vmlinuz-2.4.18-14.standard ro root=/dev/hda8
initrd /initrd-2.4.18-14.standard.img
title Windows 2000
rootnoverify (hd0,0)
chainloader +1
注意kernel...和initrd...两条语句,因为要与以下改动对应:
#rm -f /boot/System.map
#rm -f /boot/vmlinuz
#cp /boot/System.map-2.4.18-14 /boot/System.map-2.4.18.standard
#ln -s /boot/System.map-2.4.18.standard /boot/System.map
#cp /boot/vmlinuz-2.4.18-14 /boot/vmlinuz-2.4.18-14.standard
#ln -s /boot/vmlinuz-2.4.18-14.standard /boot/vmlinuz
#cp /boot/initrd-2.4.18-14.img /boot/initrd-2.4.18-14.standard.img
(initrd只用了copy,因为偶是编译一个高版本的内核,而不是同一个版本 内核的重新编译,编译高版本的好处在于系统会建立另外的目录而不会 用新编译的(可能是错的)版本覆盖以前的版本,看一下/lib/modules目录 就明白了.)
7.2如何知道你的根目录"/"在哪个partition上? 命令为:
#df
以下是偶机器的部分输出:
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/hda8 4137264 2136592 1790508 55% /
...
看看你的系统根目录装在哪里很重要,因为后面你将会看到系统安装编译好的内核时在grub.conf插入的命令中root=LABEL=/ hdc=ide-scsi
可能会引发系统引导时的如下错误:
VFS: Cannot open root device "" or 00:00
Please append a correct "root=" boot option
Kernel panic: VFS: Unable to Mount root fs on 00:00
所以要在grub.conf里修改其命令为:root=/dev/hda8
7.3好了,做完这些准备工作后,我们要-- 重启一下机器,:)不要急,应为要先确认7.1步的工作的正确性,以免把7.1错误 带入以后的步骤中.(编译内核一定要非常小心谨慎,不能急躁,否则,嘿嘿...)
7.6先保证我们在编译的工作目录下:
#cd /usr/src/linux-2.4
然后编辑Makefile(这个文件是用来控制编译用的),找到这一行:
EXTRAVERSION =
修改为(以偶本次编译为例,也可以是任意的合法字符串,比如"-sema-v.4")
EXTRAVERSION = -kilvon.001
8.偶是在X Window下编译:
#make xconfig
8.1如果你是在文本模式下,用
#make menuconfig
8.5用以下命令读取刚才的配置数据使之生效:
#make dep
#make clean
9.开始编译内核和模块
#make bzImage
#make modules
#make modules_install
10.将编译好的文件移到/boot下;如果上面某步有错,大部分情况是由于 配置内核选项时将一些当前版本只能编译为modules的选为编译到内核里, 我遇到好几次这样的情况.应为既然www.kernel.org发布一个稳定的内核, (偶没down那些alpha,beta版)9成9可以成功的编译.
#move /usr/src/linux-2.4/System.map /boot/System.map-2.4.20-kilvon.001
#move /usr/src/linux-2.4/arch/i386/boot/bzImage
/boot/vmlinuz-2.4.20-kilvon.001
#rm -f System.map
#rm -f vmlinuz
#ln -s /boot/System.map-2.4.20-kilvon.001 /boot/System.map
#ln -s /boot/vmlinuz-2.4.20-kilvon.001 /boot/vmlinuz
11.作些收尾工作:
#new-kernel-pkg --install --depmod --mkinitrd 2.4.20-kilvon.001
--mkinitrd 作Initial Ramdisk的,可以直接敲个mkinitrd -h看看
--depmod 检查内核中有没有未解析的symbol
--install 在grub中安装一个启动选项
14.好了,来吧:
#reboot