大家好,本文主要讲一下6ull加载linux驱动模块失败的解决方法。有兴趣的同学过来看看。如果对你有帮助,记得收藏起来下次浏览。
目录
0x01无法加载驱动程序模块0x02解决方案摘要
0x01 加载驱动模块失败
加载失败描述信息如下,错误信息表明板内运行的linux内核版本为4.1.15-g49efdaa,架构为ARMV7编译器驱动使用的内核源代码版本为4.1.15,架构为ARMv6。说明编译器驱动使用的内核版本名称和架构与板内运行的不一致。
root @ ALIENTEK-IMX6U:~/get # insmod led . ko
[ 1634.442887] led:版本magic“4 . 1 . 15 SMP preempt mod _ unload mod versions arm V6 p2v 8”应为“4 . 1 . 15-g 49 EFD aa SMP preempt mod _ unload mod versions arm V7 p2v 8”
insmod:错误:无法插入模块led.ko:无效的模块格式
0x02 解决方法
有两种解决方案:
(1)重新编译内核和设备树,烧入板卡。
(2)更改主机中的内核配置信息,使其与板卡中的一致。
再烧内核就麻烦了。这里用的是方法二。
1.在板卡终端输入uname -r和uname -p命令,检查板卡运行的内核的版本和架构信息。
root @ ALIENTEK-IMX6U:~/get # uname-r
4.1.15-g49efdaa
root @ ALIENTEK-IMX6U:~/get # uname-p
armv7l
说明板内运行的linux内核版本是4.1.15-g49efdaa,处理器架构是ARMv7。
2.在主机中输入驱动模块使用的linux内核的根目录,执行make menuconfig,启动linux内核的图形化配置界面(如果不能使用menuconfig,可以安装相应的依赖库)。
进入系统类型选项,如下图所示:
然后进入多平台选择选项:
然后取消下图界面中第一个基于ARMv6的平台(ARM11)前面的*号(选中后按空格键取消)。
取消后保存退出,这样就把内核支持的架构改成ARMv7了。
配置完menuconfig之后,不要再输入其他命令来配置内核,否则之前的配置会被冲走。
3.打开内核根目录中的Makefile文件,并在EXTRAVERSION变量后添加您的主板中运行的linux内核版本号的后半部分。比如我的内核后半部分是-g49efdaa。
保存修改,在linux内核的根目录下执行make -j12,重新编译内核。
内核编译完成后,重新编译驱动模块。
驱动模块编译完成后,由NFS下载到板卡上,进入modinfo【驱动模块名称】查看驱动模块信息:
root @ ALIENTEK-IMX6U:~/get # modinfo led . ko
文件名:/home/root/get/led.ko
作者:左仲凯
许可证:GPL
src版本:597E1DDC8A372707B8FD0DE
取决于:
ver magic:4 . 1 . 15-g 49 EFD aa SMP preempt mod _ unload modversions arm V7 p2v 8
可以看到,vermagic行显示的驱动模块的内核版本和处理器架构与板卡中的内核信息一致,可以成功加载驱动模块。
root @ ALIENTEK-IMX6U:~/get # uname-r
4.1.15-g49efdaa
root @ ALIENTEK-IMX6U:~/get # uname-p
armv7l
总结
这篇关于6满加载linux驱动模块失败的解决方案的文章到此为止。关于加载linux驱动模块失败的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。