2.开始编译内核文件
将终端控制台当前目录置为/usr/src/linux-2.6.20.1(即内核文件夹目录),打入以下命令#make
#make modules
#make modules_install
注意2:#make命令快要结束的时候可能会出现以下错误提示
OBJCOPY arch/i386/boot/compressed/vmlinux.bin
BFD: Warning: Writing section `.bss' to huge (ie negative) file offset 0xc0277000.
objcopy: arch/i386/boot/compressed/vmlinux.bin: File truncated
make[2]: *** [arch/i386/boot/compressed/vmlinux.bin] Error 1
make[1]: *** [arch/i386/boot/compressed/vmlinux] Error 2
make: *** Error 2
解决办法:
在arch/i386/Makefile里面做一些修改:
将OBJCOPYFLAGS改成如下的:
OBJCOPYFLAGS := -O binary --change-section-lma .bss-0xc0000000 -R .note -R .comment –S
然后保存退出,重新键入命令make就可以了。
但是,请千万注意,如果没有出现这个错误,就不要更改文件,即先make,看有无错误,如果有,则修改,没有就不修改。
以上三个命令均成功后,要复制一个文件。
#cp/usr/src/linux-2.6.18/drivers/scsi/BusLogic.o一个空格 /lib/modules/2.6.18/kernel/drivers/scsi
这是用于解决SCSI硬盘+VMWARE+RedHat架构中,因为BusLogic被编译进了内核而不是一个module的形式(2.4内核的Buslogic模块即使静态编译进内核也不行)。解决方式是直接将BusLogic.o文件复制过去.(如果不是SCSI硬盘+VMWARE+REDHAT架构中上面的拷贝可以省略)
然后键入命令
#make install
出现以下类似的信息表示正确,如下图:
3.接下来就是做一些相关周边工作了
#cp /usr/src/linux-2.6.20.1/arch/i386/boot/bzImage /boot/vmlinuz-2.6.20.1
#cp /usr/src/linux-2.6.20.1/System.map /boot/System.map-2.6.20.1
#cd /boot
#mkdir backup(备份)
#cp System.map backup
#cp vmlinux backup
#rm -rf System.map(删除原有的内核启动连接)
#rm -rf vmlinux
#ln -s System.map-2.6.20.1 System.map(设置新的内核启动连接)
#ln -s vmlinuz-2.6.20.1 vmlinuz
若你的Linux为GRUB启动,则还要修改相应的启动文件:
#cd /boot
#new-kernel-pkg --mkinitrd --depmod --install 2.6.20
#df(该命令查看根分区,即标识为“/”的分区,看好后要记住它的名字,假设为/dev/sda1)
#vi /boot/grub/grub.conf
在弹出的编辑窗口中,将“default=1”改为“default=0”,并将2.6.20.1那一项里的“kernel”行的“LABEL=/”改为上一步所查看的分区,按我们上一步的假设,改完以后的“kernel”行应该是下面的样子:
kernel /vmlinuz-2.6.20 ro root=/dev/sda1
好了,整个内核升级大功告成!重新启动之后,在操作系统选择栏中会看到如下两项:
Red Hat Linux(2.6.20.1)
Red Hat Linux(2.4.20-8)