使用Redhat Linux过程中为了启用framebuffer帧缓冲,便决定编译安装新的内核,于是乎选择了2.6.30版本,一系列流程完成之后重新启动出现如下提示:insmod: error inserting ‘/lib/dm-region-hash.ko’ : -1 File exists。
从网上查到的解决方案如下,依次执行下述命令:
1.解压initrd文件
- [root@localhost ~]# cp /boot/initrd-2.6.30.4.img /tmp
- [root@localhost ~]# cd /tmp/
- [root@localhost tmp]# ls
- initrd-2.6.30.4.img
- [root@localhost tmp]# mkdir newinitrd
- [root@localhost tmp]# cd newinitrd/
- [root@localhost newinitrd]# zcat ../initrd-2.6.30.4.img |cpio -i
- 11537 blocks
然后ls看一下详细文件,
- [root@localhost newinitrd]# ls
- bin dev etc init lib proc sbin sys sysroot
2.修改init文件
接下来编辑init,采用vi打开即可,查找到有如下重复两条语句。删除掉其中两条即可。
- echo “Loading dm-region-hash.ko module”
- insmod /lib/dm-region-hash.ko
- echo “Loading dm-region-hash.ko module”
- insmod /lib/dm-region-hash.ko
3.重新打包initrd
- [root@localhost newinitrd]# find .|cpio -c -o > ../initrd
- 11538 blocks
- [root@localhost newinitrd]# cd ..
- [root@localhost tmp]# gzip -9 < initrd > initrd.img
- [root@localhost tmp]# ls
- initrd-2.6.30.4.img initrd initrd.img newinitrd
好了,initrd.img就是重新打包的initrd了,然后把initrd.img拷贝到/boot,更改/boot/grub.conf里边的initrd-2.6.30.4.img为initrd.img就可以了。或者拷贝过去之后覆盖掉原来的initrd文件,就不需要修改grub文件了。
重新启动之后,问题就会解决。不过根据经验,可能会出现其他问题,具体情况根据不同的提示来查找解决方法。
参考文章:http://blog.csdn.net/newthinker_wei/article/details/8018804
编译linux内核时的一些小问题解决办法