内核模块版本和内核版本不一致的处理方法

内核版本是如何生成的:

Linux 内核在进行模块装载时先完成模块的 CRC 值校验,再核对
vermagic 中的字符信息,linux版本:在linux/utsrelease.h中定义,文件中的内容如下:#define
UTS_RELEASE "2.6.35.7-perf+",utsrelease.h是kernel编译后自动生成的,用户更改里面的内容不会有效果。

在init/version.c中,定义了kernel启动时的第一条打印信息:

const char linux_banner[] =
    "Linux version " UTS_RELEASE " (" LINUX_COMPILE_BY "@"
    LINUX_COMPILE_HOST ") (" LINUX_COMPILER ") " UTS_VERSION "\n";

这里UTS_RELEASE在kernel编译时自动生成

在init/main.c的start_kernel函数中,有kernel启动的第一条打印信息,这条信息是dmesg命令打印出来:

printk(KERN_NOTICE "%s", linux_banner);

方法二:

驱动模块的version magic信息是怎么生成的:

2
.6内核下,在linux/vermagic.h中定义有VERMAGIC_STRING,VERMAGIC_STRING不仅包含内核版本号,还包含有
内核使用的gcc版本,SMP与PREEMPT等配置信息。模块在编译时,我们可以看到屏幕上会显示"MODPOST"。在此阶
段,VERMAGIC_STRING会添加到模块的modinfo段。在内核源码目录下scripts\mod\modpost.c文件中可以看到模块后
续处理部分的代码。模块编译生成后,通过`modinfo

mymodule.ko`命令可以查看此模块的vermagic等信息。2.6内核下的模块装载器里保存有内核的版本信息,在装载模块时,装载器会比较所
保存的内核vermagic与此模块的modinfo段里保存的vermagic信息是否一致,两者一致时,模块才能被装载。为了使两个版本一致:可以把
依赖源码中的include/linux/vermagic.h中的UTS_RELEASE修改成与目标机器的版本一致,这样,再次编译模块就可以了。

参考:

http://blog.sina.com.cn/s/blog_6e5e78bf010105jj.html

http://blog.csdn.net/armeasy/article/details/6027563

时间: 2024-10-11 11:30:15

内核模块版本和内核版本不一致的处理方法的相关文章

CentOS系统版本和内核版本查看

怎样在CentOS中查看系统版本和内核版本呢?下面就以CentOS 6.3为例给大家说明一下: 登录Centos操作系统,打开终端 查看操作系统版本 cat /etc/redhat-release 或者cat /etc/centos-release也可以查看: 查看系统内核版本号 uname -r

Ubuntu下查看linux版本,内核版本,系统位数,gcc版本

1. 查看linux版本  [email protected]:~$cat /etc/issueUbuntu 11.04 \n \l 2. 查看内核版本1) [email protected]:~$ cat /proc/versionLinux version 2.6.38-13-generic ([email protected]) (gcc version 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4) ) #57-Ubuntu SMP Mon Mar 5 18:1

ubuntu 查看发行版本与内核版本

查看发行版本 方法一: # cat /etc/issue Ubuntu 16.04 LTS \n \l 方法二: # lsb_release -a Distributor ID: Ubuntu Description:    Ubuntu 16.04 LTS Release:        16.04 Codename:       xenial 查看内核版本 # uname -r 4.4.0-22-generic

centos系统查看系统版本、内核版本、系统位数、cpu个数、核心数、线程数

centos查看系统版本 cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) 1)查看centos内核的版本: [[email protected] ~]# cat /proc/version Linux version 2.6.18-194.el5 ([email protected]) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-48)) #1 SMP Fri Apr 2 14:5

如何在CentOS/RHEL上安装或升级新的内核版本

Linux内核版本 Linux内核版本分为主线.稳定和长期版本.(所有内核版本都可以在内核开发官方网站https://www.kernel.org上获取)目前我们看到最新的稳定内核版本为4.10.12. 主线版本代表整个Linux内核的一个树干,新的主线版本每2-3个月发布一次,所有的新功能及特性都将会包含主线版本中.稳定内核则是在主线版本中,被认为是"稳定的"得出.稳定内核的任何错误修复都将从主线树中返回,也就是主线内核出现的任何错误(包括之前的任何旧版本内核的错误和BUG)在得到修

一个linux内核模块移植到低版本时发生的异常

在3.10的内核版本下,有一个运行稳定的内核模块,移植到suse11的时候,编译正常,运行则直接出现crash: <4>[ 503.347297] CPU 0 <4>[ 503.347300] Modules linked in: caq_sendmsg(EN) mysendmsg(EN) witdriver(EN) datalink(EN) w83627dhg(EN) tipc(EX) ossmod(EN) pagecachelimit(EN) xfs ip6table_filt

一、查看Linux内核版本命令(两种方法):

一.查看Linux内核版本命令(两种方法): 1.cat /proc/version [[email protected]CentOS home]# cat /proc/versionLinux version 2.6.32-431.el6.x86_64 ([email protected]) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) ) #1 SMP Fri Nov 22 03:15:09 UTC 2013 2.uname -a [

找出Linux的名称,版本以及内核详细

This short tutorial is intended to help newbies who don't know how to find out the Linux distribution name, version and kernel details via command line. Method 1 – Distribution & Version Details Command: cat /etc/*-release Sample Output On CentOS 6.4

查看linux系统和内核版本

1. 查看内核版本命令: 1) [[email protected] ~]# cat /proc/version Linux version 2.6.9-22.ELsmp ([email protected]) (gcc version 3.4.4 20050721 (Red Hat 3.4.4-2)) #1 SMP Mon Sep 19 18:00:54 EDT 2005 2) [[email protected] ~]# uname -a Linux q1test01 2.6.9-22.EL