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

How to export a symbol from an external module?

我在内核源代码树之外编码。有两个模块,第一个 printt 有一个函数 printtty() 将字符串打印到当前 tty,第二个模块 hello在初始化期间调用 printtty()

我在模块printt中添加了EXPORT_SYMBOL(printtty),在insmod ./printt.ko之后可以在[=17]中看到printtty()的信息=].

模块hellomake进程正常。但是 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 来自另一个外部模块的符号”。