insmod驱动时提示版本与内核不一样


前言

在linux嵌入式开发中,会遇到需要编译某个驱动模块放到开发板上使用的情况,但是编译出来的.ko文件放到内核中运行的时候却报错驱动的版本与内核本本不一样,并告诉你应该是什么版本的,如下:
在这里插入图片描述

说明

使用的内核: 友善之臂适配mini2440开发板的linux-kernel_2.6.32.2

编译的驱动: RTL8821CU.ko

解决方法

  1. 进入内核代码目录,这里一定注意,用来编译驱动的代码要与开发板上运行的内核同版本,运行编译菜单命令。
    在这里插入图片描述
    进入上图位置,检查"Module versioning support"是否被勾选,此处不要勾选。

  2. 再进入以下位置,一般问题出在此处:
    在这里插入图片描述
    选中上图中红色箭头的选项栏,回车进入得到如下图所示编辑界面:
    在这里插入图片描述
    该处的信息会被直接加入内核版本号后,形成新的内核版本名(vermagic),用上图中的名字编译出的驱动版本号为:(可用modinfo来查看.ko文件的信息)
    图1
    若将其删除,编译得到的驱动版本号为:
    在这里插入图片描述
    将这里改为insmod驱动时要求的格式,保存退出,先编译一遍内核,编译完内核后,再用该源码来编译驱动。
    这样,得到的驱动版本号就与内核一样了。

原因解说

我们先看内核源码目录的以下文件:
在这里插入图片描述
得到:
在这里插入图片描述
如果在编译菜单中添加:
在这里插入图片描述
重新编译内核:
在这里插入图片描述
再看该文件内容变为:
在这里插入图片描述

注意

一般出问题是上面说明的那个地方,而整个vermagic号的组成在以下文件中:
在这里插入图片描述
在这里插入图片描述
可以看到,最后的vermagic是由宏定义组合而来的,而 UTS_RELEASE在utsrelease.h中定义,也是我们在编译菜单中可以任意修改的部分。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值