make install:depmod: ERROR: could not open directory /lib/modules/3.10.68: No such file or directory

本文讲述了作者在升级虚拟机的Linux内核(从3.10.0到3.10.68)过程中遇到的depmod和insmod问题,包括目录缺失、模块格式错误等,通过创建目录、复制文件和针对不同情况调整内核源码编译解决了这些问题。
摘要由CSDN通过智能技术生成

1.背景

   虚拟机kernal版本号:linux 3.10.0-

   编译kernal版本号:linux 3.10.68

2.问题描述

  make install时出现:

depmod: ERROR: could not open directory /lib/modules/3.10.68: No such file or directory

3.问题解决

  mkdir -p /lib/modules/3.10.68

再次make install出现:

     depmod: WARNING: could not open /lib/modules/3.10.68/modules.order: No such file or directory
depmod: WARNING: could not open /lib/modules/3.10.68/modules.builtin: No such file or directory

  解决办法:拷贝源码目录下的modules.order和modules.builtin到/lib/modules/3.10.68下

再次make install  问题解决。

4.出现新问题

   到/lib/modules/3.10.68/kernel/drivers/char/ipmi

  insmod XXX.KO时提示:

    insmod: ERROR: could not insert module ipmi_msghandler.ko: Invalid module format

使用dmesg | grep module查看:

 3595.639247] ipmi_msghandler: module_layout: kernel tainted.

ipmi_msghandler: version magic '3.10.68 SMP mod_unload ' should be '3.10.0-957.el7.x86_64 SMP mod_unload modversions '

4.1 由于运行内核和编译内核不同造成的,暂且使用如下解决方法。

4.1.1 更新内核相同/接近的源码,和内核一起编译,编译后make install和make module_install。虚拟机重启后选择自己刚刚编译的内核版本启动.

下载3.10.0-957.el7.x86_64源码:kernel-3.10.0-957.el7.src.rpm
Index of /7.6.1810/os/Source/SPackages (centos.org)icon-default.png?t=N7T8https://vault.centos.org/7.6.1810/os/Source/SPackages/

解压 rpm2cpio kernel-3.10.0-957.el7.src.rpm | cpio -idmv

tar -xf linux-3.10.0-957.el7.tar.xz

//此处如果使用arch/x86/下default_config会有编译错误,所以使用外面的config

cp -r -f kernel-3.10.0-x86_64.config linux-3.10.0-957.el7/.config 

make all

make modules_install

重启虚拟机后并选择自己刚刚编译的内核版本。

再insmod xxx.ko问题解决

4.1.2 使用和当前运行版本相同的源码做module编译,不需要重新编译内核和重启。

yum install kernel-devel

当前源码默认下载解压到 /usr/src目录下(/usr/src/kernels)。

修改自己新增模块的Makefile,将内核目录指定到/usr/src/kernels下源码目录,如下图:


在内核源码目录下新增kconfig和make menuconfig勾选新增的ko选项形成新的.config。

然后在自己的module目录下编译make clean,然后make all。

在当前.ko目录下,insmod xxx.ko。

问题解决.

4.1.2.1 在ipmi基础上新增一个KO

        有两种方法:新增源码路径下的kconfig和强制编译(该方法比较省事)

          4.1.2.1.1.kconfig

             /usr/src目录下新增Kconfig选项

          

并make menuconfig选中。

修改自己模块中的Makefile:

最后在自己模块目录下make all即可.

         4.1.2.1.2 强制编译 

       如果项目简单不需要新增Kconfig,直接强制编译.该方法比较省事,不用再修改下载源码路径中的kconfig和menuconfig.

        

最后在自己模块目录下make all即可.

  • 23
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值