如何从外部模块导出符号? [英] How to export a symbol from an external module?
本文介绍了如何从外部模块导出符号?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在内核源代码树之外编码。有两个模块,第一个模块printt有一个函数printtty()
将字符串打印到当前tty,第二个模块hello在初始化时调用printtty()
。
我在printt模块中添加了EXPORT_SYMBOL(printtty)
,insmod ./printt.ko
之后printtty()
的信息可以在/proc/kallsyms
中看到。
模块hello的make
进程正常。但是insmod ./hello.ko
将导致如下错误:
insmod: ERROR: could not insert module hello.ko: Invalid parameters
和dmesg
显示
hello: no symbol version for printtty
hello: Unknown symbol printtty (err -22)`.
我已通过
修复此问题(1)将.ko文件复制到/lib/module/version/kernel下的位置
(2)将导出的符号添加到/lib/module/version/build/Module.symvers
但是我想知道有没有什么方法可以只从外部模块(不修改内核源代码树)导出符号?
推荐答案
将此行添加到hello模块的makefile的最上面:
KBUILD_EXTRA_SYMBOLS := /home/your-user/path/to/printt/Module.symvers
(请确保输入到打印模块的正确路径)。
现在重新构建hello模块,它将正常加载。
有关详细信息,请参阅Documentation/kbuild/modules.txt,"6.3来自其他外部模块的符号"。
这篇关于如何从外部模块导出符号?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文