打印

尽量减少内核配置出现错误的概率

尽量减少内核配置出现错误的概率

看到大侠们都在编内核,做为菜鸟的我也跃跃欲试,一是想加入NTFS文件系统支持,二是想得到一个精简内核,加快系统运行速度,不料完成后,先是出现modules not found、kernel init bannic 等论坛上网友遇到的错误提示,无法进入Linux系统,再是进入系统后,自己胡乱修复一气,越改越乱,导致我三天未进Linux,一周没上坛子,对内核的编译作了进一步了解,将所得共享出来,请大家批评指教。

修复过程:
    当系统无法进入时,我试在GRUB下按“C”进入命令状态,输入:
     kernel(hd0,1)/boot/vlinuz root=/dev/hda2
       initrd(hd0,1)/boot/initrd.img
       boot
     进入系统的过程中出现错误讯息(好像是未找到initrd.img,我想我忘记编译initrd.img了,因为我看到有的书上讲这个文件只有当系统中有SCSI设备时才有用),此招失败。


   用Linux系统光盘引导(我不做引导软盘),输入:
     linux rescue
    进入修复模式,提示符为:sh#
    第一次见到这样的提示符,系统提示将原系统挂到了/mnt/sysimage/ 下,于是我进入 /mnt/sysimage/usr/scr/linux-2.4.8-20/ 下,执行:# make initrd.img ,系统提示:路径未找到! (因为编译程序默认要在 /usr/src下找相关文件,而实际目录是/mnt/sysimage/usr/src)
   我在公社发了求救贴,有高手提示用命令:chroot,自己进入查阅了此命令的用法,再次进入修复模式,输入:
   sh# chroot /mnt/sysimage
这时系统将 /mnt/sysimage 目录当作是根目录,于是make initrd等命令成功执行,我满心欢喜的重新引导,以为一切OK,结果出现了 kernel pannic 的错误信息,至今我不懂什么意思?:0)
   再次查资料,进入系统按步就班重做一遍:

   sh# chroot /mnt/sysimage
    sh# cd usr/scr/linux的源程序目录
   sh# make mrproper
    sh# make oldconfig      因为我改了太多,所以重新调入默认内容
   sh# make menuconfig  此项在sh#下似乎不成功进入,只好忍痛执行
                            make config了,过程很长,但要细心。
   sh# make dep clean bzImage modules modules_install install
我一步执行完,好好休息一下,累啊!
   终于成功引导!选择 linux-2.4.8-20custom菜单项进入。进入后用
   free -m查内存 再看 top 中cpu idld的值,真爽啊!进入X,启动mozilla都是那么快!
   
   经验:问题最开始是由于Red Hat自作聪明,将文件改名为 custom,导致找不到相应文件,无法进入系统,后来是由于我错误配置,错上加错。
   最后是由于Red Hat “自作聪明”,我用make oldconfig命令救了系统。

   总结: 编译内核时,尽量按步就班,make modules_install后,最好用 make install 命令来让系统自动复制vmlinuz等文件、修改grub.conf文件,成功引导后,自己再做手工修改,可以省掉许多无谓劳动(因为这些劳动并不会给自己带来多少知识);
      如果已经无法启动,可以在修复模式下编译内核,最好用 make oldconfig调入缺省配置;在修复模式下make menuconfig不能成功执行时,如果没有勇气执行make config(那过程你可以体验一下,整死人!),可以跳过此项,直接进行 make dep 等下面步骤,等成功进入系统后,再用make menuconfig重新配置(虽然要重新花费编译时间,不过我感觉相对于make config的长过程还是值得的);
      如果无法找到路径,请试试 chroot 命令。

TOP

Re: 尽量减少内核配置出现错误的概率

[quote:31f494f504="notsay"]
   终于成功引导!选择 linux-2.4.8-20custom菜单项进入。进入后用
   经验:问题最开始是由于Red Hat自作聪明,将文件改名为 custom,导致找不到相应文件,无法进入系统[/quote]


redhat将用户自己编译的内核定义成custom其实就是为了避免覆盖掉老内核和老模块,当新内核有问题时可以让用户用回老内核进入系统,这样做是体贴用户,为用户着想,不是自作聪明

当初我在红旗3上编译内核(第一次自己编译内核),编译安装后就自动覆盖掉原来的老内核(老内核的模块也一并彻底覆盖更新掉,看看make modules_install的脚本),而老内核却失败,那时菜鸟,幸好先前有准备用ghost备份了整个linux分区,忙乎了一阵才恢复系统,吓出了一身冷汗
http://llc.linuxsky.org

TOP

说的也是!!!我没有一次可以一次编译成功啊!!! :-)
财上平如水,人生直是衡。

TOP

我也搞了几天了,但愿这次成功!

TOP