问题描述
在编写字符设备驱动模块的加载与卸载的时候,在make生成了模块之后,将.ko文件复制到文件系统lib/module/4.1.15文件夹下面,先用了depmod生成另外三个文件,然后再利用modprobe加载模块,会出现no symbol version for module_layout和Invalid module format导致无法加载模块的问题。但是网上又说什么什么内核版本和模块驱动版本不一致之类的,就导致我很迷茫。后面又找到了一个问题的原因是因为内核源码目录下缺少了一个文件:Module.symvers。
解决思路- 首先利用find /-name 'Module.symvers’命令查找该文件的路径,然后发现了他在/usr/src/kernel/下系统自带的文件夹中/usr/src/linux-headers-4.15.0-29-generic/Module.symvers。
- 打开模块编译的Makefile,去找到如下的路径(每个人不一样,根据自己的情况更改):
- 将Module.symvers拷贝到如上图框住的路径中,然后再次编译。
- 编译完成后将.ko文件拷贝到lib/module/4.1.15文件夹下,先用depmod然后再用modprobe xxx.ko加载模块。(用lsmod查看是否加载成功)
问题解决了,模块如愿加载成功。