分类: LINUX
2009-03-17 10:44:59
一、编译环境
内核:原版本RedHat AS4.5 (内核2.6.9-55)目标版本:2.6.18.8
硬件:DELL 6500
二、内核编译升级命令
1、 make mrproper
2、 make menuconfig
3、 make
4、 make modules_install
5、 make install
三、内核选项的选择
内核选项的选择是决定内核升级成功的关键,执行make menuconfig后,系统会自动根据当前的硬件和原内核版本中的选项选定目标版本(2.6.18.8)的选项,不做任何选项的改动,保存选项生成.config继续编译。不出意外的话,新内核都能成功启动,如果未能成功启动,那恭喜你,本文可能对你有莫大的帮助!
四、内核编译中遇到的错误以及解决之道
错误一:
错误提示:Kernel panic—not syncing :vfs:unable to mount root fs on unkown—block (0,0)
错误分析:initrd-*.*.img文件有问题;未能成功挂载真正的根文件系统。
解决方法:请你确认执行了make install 命令,我就因为没有执行这条命令而浪费了一周时间(后面专门详细说明)
错误二:
错误提示:Create root device
mkrootdev: label / not found
Mounting root filesystem
mount :error 2 mounting ext3
mount :error 2 mounting none
switchroot mount failed:22
umount /initrd/dev failed :2
kernel panic-not synicncing :Attempted to kill init .
(错误提示是不是有点长,貌似错误很多哦,其实可能就一个原因导致)
错误分析:1、根文件系统找不到挂载点 ,修改grub.conf文件为 root=/dev/ *
2、硬盘驱动未能找到,请看看你机器的硬盘是都是 SATA盘,是的话同样恭喜你本文对你有帮助。
解决方法:
1.、修改grub.conf文件试试,具体修改点 root=/dev/* * 指的是原系统中/分区的挂载点。修改后,重启进入新内核系统,估计十有八九又会遇到如下错误提示:
Mounting root filesystem
mount :error 6 mounting ext3
mount :error 2 mounting none
switchroot mount failed:22
umount /initrd/dev failed :2
kernel panic-not synicncing :Attempted to kill init .
如果不幸被我言中,请接着往下看。
2、 硬盘驱动未能成功找到,SCSI驱动有问题。我在内核编译升级中遇到这个问题,对内核选项选了又选,方法试了很多种,总经理都亲自来做了几次,错误依旧。最终让我无意中选正确选项,成功升级内核。
具体选项是:Device Drivers--------SCSI device support------SCSI low-level drivers----Serial ATA(SATA)support 选为 M,然后再选择相应的子选项,我选择了Intel PIIX/ICH SATA support (new)后机器就成功启动了。
这个选项默认就是选中的,我在测试过程中发现的.
错误三:
错误提示:Enforcing mode requested but no policy loaded. Halting now.
kernel panic - not syncing: Attenpted to kill init!
错误分析:原内核中启用了selinux,新内核未选择selinux的选项,不能成功启动。
解决方法:修改grub.conf文件,在root=LABEL=/ 后加入 enforcing=0
关于下面的说明:"在fc7里要特别小心Serial ATA (prod) and Parallel ATA (experimental) drivers->ATA device support (ATA)项,一定不要把它编入内核,否则,在你把原来的以模块编译的设置改了之后,SCSI device support->SCSI Transports下本来处于不可更改的各项将变得可以更改。结果是,无论你的sata驱动程序选对或者选错你的核心在启动时都会出现no volume groups found的错误" 这个选项我在2.6.24.7里面没有看到这个选项,但是这个里面的选项我都选择,并且可以正常编译并能通过