linux驱动之:驱动开发常见错误汇总

文章目录

  • 1、insmod xxx.ko提示:first_drv: disagrees about version of symbol module_layout
    • 1.1 错误提示:
    • 1.2 错误原因:
    • 1.3 解决办法:
  • 2、error: implicit declaration of function ‘class_create’
    • 2.1 错误原因
    • 2.2 解决办法

序言:刚开始学驱动,期间会遇到大大小小的坑,这里作为典型问题记录汇总,以便后续查询。


1、insmod xxx.ko提示:first_drv: disagrees about version of symbol module_layout

1.1 错误提示:

root@am437x-evm:~/first_drv# insmod first_drv.ko
first_drv: disagrees about version of symbol module_layout
Error: could not insert module first_drv.ko: Invalid module format

1.2 错误原因:

板卡内核版本与开发环境使用的内核版本不一致,导致编译成功的insmod时加载不成功。

备注(原因定位方法):
可以使用以下方法进行验证是否确实是该原因,如果下面两条内容回显的版本号不一致,则可以断定确实是改原因。

  • 1、在板卡中执行命令:uname -r,可以查看板卡内核的版本
  • 2、再在linux开发环境中,cd到自己用的内核的根目录,vim Makefile,查看最前面三行末尾的数字就是版本号,例如下面代码,版本号就是3.12.10:
  • VERSION = 3
    PATCHLEVEL = 12
    SUBLEVEL = 10

1.3 解决办法:

找到与板卡匹配的内核版本镜像,编译成功,之后使用该内核生成ko文件即可。
但是要注意:并不是随便在官网下载一套同版本的内核就可以编译成功,貌似需要配置好多东西,这个我暂时不太明白,后续懂了再来补充把。
按照韦老师给我的思路:一般开发板配套资料中肯定有板卡内核编译方法的资料,或者有配套的内核源代码以及源代码编译方法的文档,可以找一下,我一开始拿到的资料不配套,所以导致各种报错,最后抱着尝试的心态,果然在光驱中找到了开发板配套的内核,编译成功后问题得以解决。
(PS:说实话,这个问题怪我自己比较傻逼,其实开发板自带光盘中的资料肯定是配套的,我早应该想办法找有光驱的电脑读取光盘中的资料的。)

2、error: implicit declaration of function ‘class_create’

2.1 错误原因

因为linux版本更新,接口名字变成了class_create()和device_create()。
之前的版本接口名称为:class_device_create() class_device_unregister()。

2.2 解决办法

在代码前面增加头文件引用:

#include 

你可能感兴趣的:(linux驱动)