新闻  |   论坛  |   博客  |   在线研讨会
kernel – 尝试加载usbhid.ko时,“ module_layout没有符号版本”
电子禅石 | 2020-06-24 09:32:16    阅读:1965   发布文章

问题描述

我正在尝试为usbhid.ko构建自己的模块,但是在编译之后,无法加载该模块。 dmesg说是no symbol version for module_layout。我想知道是什么问题?我已经使用过Ubuntu提供的内核源代码,并且还要确保内核版本相同。


最佳回答

具体来说,问题是在构建模块时,内核源代码树可能缺少Modules.symvers文件。当您构建模块时,kbuild系统实际上会警告您。如果缺少Modules.symvers,您将看到:

Warning: Symbol version dump /usr/src/linux-2.6.34-12/Modules.symvers            is missing; modules will have no dependencies and modversions.

如果您的内核启用了CONFIG_MODVERSIONS,则在构建驱动程序的modpost阶段,它将使用-m选项运行scripts /mod /modpost。如果您勇敢地看一下scripts /mod /modpost.c源代码,您会看到-m选项添加了vmlinux中的_module_layout_符号,但是,如果您的内核中没有Modules.symvers,您将无法获得该符号的CRC值,并最终收到此错误消息。

因此,有两种解决方法。


*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
属于自己的技术积累分享,成为嵌入式系统研发高手。
推荐文章
最近访客