"); //-->
我正在尝试为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值,并最终收到此错误消息。
因此,有两种解决方法。
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。