linux2.6.35编译出现错误could not load /lib/modules/2.6.35/modules.dep怎么解决



linux2.6.35编译出现错误could not load /lib/modules/2.6.35/modules.dep怎么解决。

***********************Debian系统解决办法A:*********************************

 

 

编译完2.6.35的内核之后重启会出现如下错误

could not load /lib/modules/2.6.35/modules.dep还好保留有原来的内核于是又进入原内核删掉了之前生成的/boot/initrd.img-2.6.35进入内核源文件目录

#update-initramfs –c –k 2.6.35

这样重新在/boot下创建initrd.img-2.6.35重启后进入了新内核内核编译升级成功。

总结一下正确编译的命令应该如下:

进入源码根目录在中端执行如下命令

#make menuconfig

#make

#make modules_install

#make install

#update-initramfs -c -k 2.6.35

如果make install出错,update后

#mkinitrd  –v  /boot/initrd-2.6.36.31gw.img  /lib/modules/2.6.36.31gw

#生成initrd文件


各命令解释略。

***********************Debian系统解决办法B:*********************************

 错误是:

FATAL: Could not load /lib/modules/2.6.18-274.7.1.el5.028stab095.1/modules.dep: No such file or directory
只要履行一条号令就可以了。
起首要切换到root用户
su root
然后运行
mkdir /lib/modules/`uname -r` && depmod -a
题目解决。

*********************** Fedora系统解决办法A: *********************************

 出错的原因是,生成initrd时,用的该命令:

#mkinitrd  –v  /boot/initrd-2.6.36.31gw.img  /lib/modules/2.6.36.31gw

用如下命令生成initrd就ok了

#dracut -v /boot/ initrd-2.6.36.31gw.img   2.6.36.31gw

*********************** mkinitrd  dracut 分析*********************************

centos 6下自己编译linux内核,完了创建initrd文件,依据以前的的经验mkinitrd

#mkinitrd -v ../initramfs-3.0.32.img 3.0.32

但是输出的消息却与以前的版本不太一样,好像打包进去了很多模块,生成花费时间也很长,完成后,看initramfs文件有100多M,OMG,这么大的文件 /boot目录可放不下(/boot挂在单独的分区下,该分区只有100M大小)。

经过N久的折腾,才发现原来redhat/centos6不再使用原来的mkinitrd,而是使用dracut代替了,mkinitrd实际上只是调用dracut的功能。研究dracut才弄明白,如果只是生成用于grub引导本地硬盘上的linux,需要使用一个参数 –hostonly ,这样dracut就不会把过多不必要的模块加载到initramfs.img里,如下

dracut -f -v --hostonly -k '/lib/modules/3.0.32'  ../initramfs-3.0.32.img 3.0.32

这是通过查阅kernel 编译安装的 make install 使用是执行的以下脚本实现的: 
sh /path/to/kernel-source/linux-3.0.32/arch/x86/boot/install.sh 3.0.32 arch/x86/boot/bzImage System.map “/boot”

查阅arch/x86/boot/install.sh 文件, 它调用/sbin/installkernel ,然后是/sbin/new-kernel-pkg ,接着是/sbin/dracut

通过分析 /sbin/new-kernel-pkg ,其中290行有如下代码

    if [ -n "$dracut" ]; then
        tool="/sbin/dracut $dracuthostonly -f $initrdfile $version"
    else
    tool="/sbin/mkinitrd --allow-missing -f $initrdfile $version"
    fi

其中变量$dracuthostonly的值是 -H ,在dracut参数里与 –hostonly 同义。

问题至此得解。