使用Redhat Linux过程中为了启用framebuffer帧缓冲,便决定编译安装新的内核,于是乎选择了2.6.30版本,一系列流程完成之后重新启动出现如下提示:insmod: error inserting ‘/lib/dm-region-hash.ko’ : -1 File exists。

从网上查到的解决方案如下,依次执行下述命令:

1.解压initrd文件

  1. [root@localhost ~]# cp /boot/initrd-2.6.30.4.img /tmp   
  2. [root@localhost ~]# cd /tmp/   
  3. [root@localhost tmp]# ls   
  4. initrd-2.6.30.4.img   
  5. [root@localhost tmp]# mkdir newinitrd   
  6. [root@localhost tmp]# cd newinitrd/   
  7. [root@localhost newinitrd]# zcat ../initrd-2.6.30.4.img |cpio -i   
  8. 11537 blocks  

然后ls看一下详细文件,

  1. [root@localhost newinitrd]# ls   
  2. bin   dev   etc   init   lib   proc   sbin   sys   sysroot  

2.修改init文件

接下来编辑init,采用vi打开即可,查找到有如下重复两条语句。删除掉其中两条即可。

  1. echo “Loading dm-region-hash.ko module”  
  2. insmod /lib/dm-region-hash.ko   
  3. echo “Loading dm-region-hash.ko module”  
  4. insmod /lib/dm-region-hash.ko  

3.重新打包initrd

  1. [root@localhost newinitrd]# find .|cpio -c -o > ../initrd   
  2. 11538 blocks   
  3. [root@localhost newinitrd]# cd ..   
  4. [root@localhost tmp]# gzip -9 < initrd > initrd.img   
  5. [root@localhost tmp]# ls   
  6. 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内核时的一些小问题解决办法

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据