如何从外部模块导出符号?

问题描述 投票:0回答:1

我在内核源代码树之外进行编码。有两个模块,第一个模块 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) 将

hello.ko
文件复制到
/lib/modules/version/kernel

下面的位置

(2) 将导出的符号从

hello.ko
添加到
/lib/modules/version/build/Module.symvers

但我想知道有什么方法可以导出符号仅从外部模块(不修改内核源代码树)?

linux gcc linux-kernel kernel kernel-module
1个回答
14
投票

将此行添加到 hello 模块的 Makefile 的最顶部

KBUILD_EXTRA_SYMBOLS := /home/your-user/path/to/printt/Module.symvers

(请务必输入您的 printt 模块的正确路径)。

现在重建你的 hello 模块,它将被正常加载。

有关详细信息,请参阅Documentation/kbuild/modules.txt,“6.3 来自另一个外部模块的符号”。

© www.soinside.com 2019 - 2024. All rights reserved.