kernel – 嘗試加載usbhid.ko時,“ module_layout沒有符號版本”
我正在嘗試為usbhid.ko構(gòu)建自己的模塊,但是在編譯之后,無法加載該模塊。 dmesg說是no symbol version for module_layout。我想知道是什么問題?我已經(jīng)使用過Ubuntu提供的內(nèi)核源代碼,并且還要確保內(nèi)核版本相同。
最佳回答
具體來說,問題是在構(gòu)建模塊時,內(nèi)核源代碼樹可能缺少Modules.symvers文件。當您構(gòu)建模塊時,kbuild系統(tǒng)實際上會警告您。如果缺少Modules.symvers,您將看到:
Warning: Symbol version dump /usr/src/linux-2.6.34-12/Modules.symvers is missing; modules will have no dependencies and modversions.
如果您的內(nèi)核啟用了CONFIG_MODVERSIONS,則在構(gòu)建驅(qū)動程序的modpost階段,它將使用-m選項運行scripts /mod /modpost。如果您勇敢地看一下scripts /mod /modpost.c源代碼,您會看到-m選項添加了vmlinux中的_module_layout_符號,但是,如果您的內(nèi)核中沒有Modules.symvers,您將無法獲得該符號的CRC值,并最終收到此錯誤消息。
因此,有兩種解決方法。
*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權(quán)請聯(lián)系工作人員刪除。