1.下载内核文件
先到http://www.kernel.org/下载个内核文件,我下载的版本是2.4.27
将内核源码包linux-2.4.27.tar.bz2 copy至/usr/src目录下:
#cp linux-2.4.27.tar.bz2 /usr/src
#cd /usr/src
2.删除旧文件
删除链接和文件目录:
# rm -f /usr/src/linux-2.4
# rm -rf /usr/src/linux-2.4.20-8
3.用以下命令解开压缩包
# bzip2 -d linux-2.4.27.tar.bz2
# tar -xvf linux-2.4.27.tar
在/usr/src目录中建立快捷方式:
#ln -s linux-2.4.27 linux
4.删除/usr/include下的asm、linux、scsi目录(如果有的话)。
# cd /usr/include/
# rm -rf asm linux scsi
在/usr/include下建立指向真正的asm、linux、scsi目录
# ln -s /usr/src/linux/include/asm-i386 asm
# ln -s /usr/src/linux/include/linux linux
# ln -s /usr/src/linux/include/scsi scsi
5.进入到以后编译时用的工作目录下:
#cd /usr/src/linux-2.4.27
#make mrproper
该命令保证源代码目录下没有不正确的.o文件(即object文件,编译c语言时生成的,目的是下一步编译成可执行码时link之用)以及文件的相互
倚赖关系.第一次编译刚下载的源码包不用此命令,但如果多次使用这些源码编译内核,那么一定要先运行本命令.
6.配置内核
一般使用命令#make menuconfig(基于文本选单的配置界面,字符终端下推荐使用)
选择相应的配置时,有三种选择,它们分别代表的含义如下:
Y--将该功能编译进内核
N--不将该功能编译进内核
M--将该功能编译成可以在需要时动态插入到内核中的模块
配置时有几个选项强烈推荐选择在内:
(1) Loadable module support这个其实也是默认选中的
(2)和SCSI support ---> SCSI low-level drivers ---> <*> BusLogic SCSI support,如果不选的话可能会出现错误。
这个步骤完成之后,系统会提醒您,next step you should run "make dep"
7.建立编译时所需的从属文件,生成依赖关系,确保关键文件在正确的位置
# make dep
读取配置过程生成的配置文件,来创建对应于配置的依赖关系树,从而决定哪些需要编译而那些不需要。
2.5.*-2.6.0都不需要了。其实2.4.*某些内核也不需要了。
8.确保所有有关文件都处于最新版本状态
# make clean
清除所有已存在的目标文件,如果忘记做这一步,生成的内核将会非常庞大,如果不删除,在以后的编译过程中也很容易出错。
9.真正的编译内核
# make bzImage
10.编译选择的模块
# make modules
部署模块
# make modules_install
11.更新bzImage
# cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.4.27
更新System.map
# cp /usr/src/linux/System.map /boot/System.map-2.4.27
12.建立新链接
进入启动目录下,将目录下的链接文件vmlinuz及System.map指向新的内核:
# cd /boot
#rm -f System.map vmlinuz
#ln -s vmlinuz-2.4.27 vmlinuz
#ln -s System.map-2.4.27 System.map
13.生成新的启动目录:
在/boot下生成 initrd img文件:
# cd /boot
# mkinitrd initrd-2.4.27.img 2.4.27
注意这里可能会出现一个叫做“No module BusLogic found”的错误,解决方法是在如上操作之前执行:
# cp /usr/src/linux-2.4.27/drivers/scsi/BusLogic.o /lib/modules/2.4.27/kernel/drivers/scsi
这里如果没有scsi文件夹就手动建立
14.GRUB的配置
打开/etc/grub.conf,加入以下内容:
title Red Hat Linux (2.4.27)
root (hd0,0)
kernel /vmlinuz-2.4.27 ro root=/dev/sda2
initrd /inintrd-2.4.27.img
title指示开机时grub中显示的选项,root指代根文件系统所在设备,可以使用命令df查看,这里是/dev/sda2