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

文章目录

  • 前言
  • 说明
  • 解决方法
    • 原因解说
  • 注意


前言

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

说明

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

编译的驱动: RTL8821CU.ko

解决方法

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

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

原因解说

我们先看内核源码目录的以下文件:
在这里插入图片描述
得到:
在这里插入图片描述
如果在编译菜单中添加:
insmod驱动时提示版本与内核不一样_第5张图片
重新编译内核:
insmod驱动时提示版本与内核不一样_第6张图片
再看该文件内容变为:
在这里插入图片描述

注意

一般出问题是上面说明的那个地方,而整个vermagic号的组成在以下文件中:
insmod驱动时提示版本与内核不一样_第7张图片
insmod驱动时提示版本与内核不一样_第8张图片
可以看到,最后的vermagic是由宏定义组合而来的,而 UTS_RELEASE在utsrelease.h中定义,也是我们在编译菜单中可以任意修改的部分。

你可能感兴趣的:(linux内核,内核)