如何从外部模块导出符号?
How to export a symbol from an external module?
我在内核源代码树之外编码。有两个模块,第一个 printt 有一个函数 printtty()
将字符串打印到当前 tty,第二个模块 hello在初始化期间调用 printtty()
。
我在模块printt中添加了EXPORT_SYMBOL(printtty)
,在insmod ./printt.ko
之后可以在[=17]中看到printtty()
的信息=].
模块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/modules/version/kernel
下面的位置
(2) 将导出的符号添加到/lib/modules/version/build/Module.symvers
但我想知道是否有任何方法可以仅从外部模块(不修改内核源代码树)导出符号?
在 hello 模块的 Makefile 的 最顶层 添加此行:
KBUILD_EXTRA_SYMBOLS := /home/your-user/path/to/printt/Module.symvers
(确保输入 printt 模块的正确路径)。
现在重建你的 hello 模块,它将被加载得很好。
有关详细信息,请参阅 Documentation/kbuild/modules.txt、“6.3 来自另一个外部模块的符号”。
我在内核源代码树之外编码。有两个模块,第一个 printt 有一个函数 printtty()
将字符串打印到当前 tty,第二个模块 hello在初始化期间调用 printtty()
。
我在模块printt中添加了EXPORT_SYMBOL(printtty)
,在insmod ./printt.ko
之后可以在[=17]中看到printtty()
的信息=].
模块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/modules/version/kernel
下面的位置(2) 将导出的符号添加到/lib/modules/version/build/Module.symvers
但我想知道是否有任何方法可以仅从外部模块(不修改内核源代码树)导出符号?
在 hello 模块的 Makefile 的 最顶层 添加此行:
KBUILD_EXTRA_SYMBOLS := /home/your-user/path/to/printt/Module.symvers
(确保输入 printt 模块的正确路径)。
现在重建你的 hello 模块,它将被加载得很好。
有关详细信息,请参阅 Documentation/kbuild/modules.txt、“6.3 来自另一个外部模块的符号”。