OpenEdv-开源电子网

标题: insmod提示version magic '4.1.15 SMP preempt mod_unload modversions ARMv6 p2v8 ' should be '4.1.15-gbedf008 SMP pr... [打印本页]

作者: jiangc    时间: 2020-1-5 14:12
标题: insmod提示version magic '4.1.15 SMP preempt mod_unload modversions ARMv6 p2v8 ' should be '4.1.15-gbedf008 SMP pr...
本帖最后由 jiangc 于 2020-1-5 14:26 编辑

关于version magic '4.1.15 SMP preempt mod_unload modversions ARMv6 p2v8 ' should be '4.1.15-gbedf008 SMP preempt mod_unload modversions ARMv7 p2v8 '的问题解决方法如下


前面移植的课程大概看了一下,没有动手移植,使用的是官方自带的系统直接学习驱动,就碰到了上面的问题,解决方法如下,不知道是不是正解,还请大家指正。
使用的是:阿尔法Linux开发板光盘资料(A盘)\1、例程源码\3、正点原子修改后的Uboot和Linux\3、正点原子修改后的Uboot和Linux\linux-imx-4.1.15-2.1.0-gbedf008-v1.1.tar.bz2
编译时使用的配置文件是:  make imx_v7_mfg_defconfig
  1. root@ALIENTEK-IMX6U:~# insmod led.ko
  2. [  367.602081] led: version magic '4.1.15 SMP preempt mod_unload modversions ARMv6 p2v8 ' should be '4.1.15-gbedf008 SMP preempt mod_unload modversions ARMv7 p2v8 '
  3. insmod: ERROR: could not insert module led.ko: Invalid module format
复制代码


上网大概查了一下就是内核版本信息不一样,因为我用的是资料里面带的,版本就是4.1.15,不一样的地方就是EXTRAVERSION以及 ARMv7 p2v8这个
内核版本信息规则:
  1. 在一个博客中看到:

  2. 版本信息有:VERSION,PATCHLEVEL, SUBLEVEL, EXTRAVERSION,KERNELRELEASE。版本信息定义了当前内核的版本,比如 VERSION=2,PATCHLEVEL=4,SUBLEVEL=18,EXATAVERSION=-rmk7,它们共同构成内核的发行版本KERNELRELEASE:2.4.18-rmk7
复制代码

解决思路就是:哪里不同改哪里

第一步,手动添加EXTRAVERSION,默认的这个变量是空的,板子里面的应该是带版本控制的,这个变量在内核顶层的Makefile中


如下:
  1. VERSION = 4
  2. PATCHLEVEL = 1
  3. SUBLEVEL = 15
  4. EXTRAVERSION = -gbedf008
  5. NAME = Series 4800

复制代码


第二步:修改
CPU Core family selection
这个可以使用make menuconfig修改也可以手动改.config文件
我这里是make menuconfig
  1. make menuconfig
  2. System Type    --->
  3.           Multiple platform selection    --->
  4.                   [ ] ARMv6 based platforms (ARM11)
  5.                    [*] ARMv7 based platforms (Cortex-A, PJ4, Scorpion, Krait)
复制代码

修改成上面那样,保存编译
然后再重新编译驱动:
使用modinfo  xxx.ko
得到的信息就是和板子一样了

  1. filename:       /home/vmuser/I.MX6ULL/linux_driver/led/led.ko
  2. author:         
  3. license:        GPL
  4. srcversion:     2B371105DE8ECC5A97EE471
  5. depends:        
  6. vermagic:       4.1.15-gbedf008 SMP preempt mod_unload modversions ARMv7 p2v8
复制代码

将ko文件copy到开发板中
执行:depmodmodprobe led

[10533.922742] led_init
[10533.924975] register_chrdev success





作者: 仰望星空之云    时间: 2020-1-11 19:10
感谢楼主分享。总结的很到位很具体。当然,简单点的是自己编译个内核,然后放到板子上运行就OK

作者: 茂茂2019    时间: 2020-1-15 09:53
不错,能够透彻的分析,楼主6666
作者: 茂茂2019    时间: 2020-1-15 09:54
楼主 ,原子使用的是这个配置文件 make imx_v7_defconfig,是不带mfg的
作者: 宋金水    时间: 2020-2-18 22:57
楼主,我是将LINUX内核(4.1.15)放在云服务器上编译的,生产内核镜像文件和设备树。 云服务器Ubuntu版本为4.4.0-93。
生成的内核镜像和设备树烧录到EMMC启动。出现了同样的问题。开发板使用 uname -r 查询后版本为4.1.15 。
遇到了同样的错误。对比您的问题,不是很明白    。希望您能帮我解答一下i   

作者: casy99    时间: 2020-3-18 17:38
内核没这个选项呢

make menuconfig
System Type    --->
          Multiple platform selection    --->
                  [ ] ARMv6 based platforms (ARM11)
                   [*] ARMv7 based platforms (Cortex-A, PJ4, Scorpion, Krait)
复制代码
作者: 仰望星空之云    时间: 2020-3-19 12:25
宋金水 发表于 2020-2-18 22:57
楼主,我是将LINUX内核(4.1.15)放在云服务器上编译的,生产内核镜像文件和设备树。 云服务器Ubuntu版本为 ...

内核zImge和设备树.dtb文件以及驱动.ko文件用同一个内核源码编译的么,是的话应该没这个问题
作者: 仰望星空之云    时间: 2020-3-19 12:31
casy99 发表于 2020-3-18 17:38
内核没这个选项呢

make menuconfig

这个有的或者你用的内核源码不同?
作者: 不稳定的自然现象    时间: 2020-4-13 16:37
我的刚好相反。version magic '4.1.15 SMP preempt mod_unload modversions ARMv7 p2v8' should be ‘4.1.15 SMP preempt mod_unload modversions ARMv6 p2v8’。楼主有什么办法没?我只勾选[ ] ARMv6 based platforms (ARM11),结果报Vmlinux fail
作者: liu405746220    时间: 2020-5-19 20:01
不稳定的自然现象 发表于 2020-4-13 16:37
我的刚好相反。version magic '4.1.15 SMP preempt mod_unload modversions ARMv7 p2v8' should be  ...

这个问题的关键就是你编译的驱动的内核跟你板子上启动的内核要一致就好了
不管你怎么跳教程, 你只要先使用一个版本的内核先编译一遍, 再将编译的内核放到tftpboot文件夹下去供开发板启动, 同时也使用同一版本的内核编译你的驱动程序就可以了。
作者: 桃子君    时间: 2020-10-19 23:51
太感谢楼主了,同样是简单地看了看移植部分直接看驱动了,这个问题困扰了一下午,现在终于解决了,下面可以上点灯了,哈哈哈。
作者: a763838821    时间: 2020-11-30 16:07
感谢楼主
作者: 永巷24号    时间: 2021-3-18 20:58
这个可以其实就是模块和内核编译的版本不同,解决办法就是内核和 驱动模块都用同一个版本的内核源码编译。参考文件【I.MX6U常见问题汇总V1.0】中的2.6.6节
作者: 我叫做大熙熙    时间: 2021-3-19 00:38
我正准备发帖问这个问题,没想到有同道中人遇见了!!!
十分感谢分享解决思路~
作者: xulouzhe    时间: 2021-4-5 12:02
本帖最后由 xulouzhe 于 2021-4-5 12:07 编辑

谢谢楼主,我也遇到了这个问题。这个问题解决后出现了新问题,就是insmod命令正常工作,但是modprobe命令会报错
  1. root@ATK-IMX6U:/lib/modules/4.1.15-gbfed875# insmod chrdevbase.ko
复制代码
  1. root@ATK-IMX6U:/lib/modules/4.1.15-gbfed875# modprobe chrdevbase.ko
复制代码
  1. modprobe: FATAL: Module chrdevbase.ko not found in directory /lib/modules/4.1.15-gbfed875
复制代码


解决方法是去掉.ko改成
  1. modprobe chrdevbase
复制代码


作者: 仰望星空之云    时间: 2021-7-9 21:38
楼主总结的很好,真棒!嘿嘿,也可以看看这个链接
https://mp.weixin.qq.com/s/IFDd5am26K1rImLXjoBhEw
作者: Elsummer    时间: 2022-8-30 22:35
太棒了,楼主完美解决了我的问题
作者: changing111    时间: 2023-8-31 19:16
不稳定的自然现象 发表于 2020-4-13 16:37
我的刚好相反。version magic '4.1.15 SMP preempt mod_unload modversions ARMv7 p2v8' should be  ...

老哥,我也遇到同类型的问题了,你怎么解决的?
作者: hangon    时间: 2024-2-8 16:21
不稳定的自然现象 发表于 2020-4-13 16:37
我的刚好相反。version magic '4.1.15 SMP preempt mod_unload modversions ARMv7 p2v8' should be  ...

你这个的意思是你下载到开发板的zImage内核版本是armv6的,而模块的版本是armv7,解决办法是直接执行楼主的第二步:重新配置linux内核为armv7,并编译,然后替换你原来的zImage
作者: hyhyx1    时间: 2024-2-18 10:29
总的来说使用同一个内核版本最简便可靠,省的麻烦而且一致。




欢迎光临 OpenEdv-开源电子网 (http://47.111.11.73/) Powered by Discuz! X3.4