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

时间:2015-04-13 11:00:45

标签: linux gcc linux-kernel kernel

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

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

模块 hello /proc/kallsyms进程可以正常运行。但make会导致如下错误:

insmod ./hello.ko

insmod: ERROR: could not insert module hello.ko: Invalid parameters 显示

dmesg

我已经通过

解决了这个问题

(1)将.ko文件复制到/ lib / modules / version / kernel

下面的位置

(2)将导出的符号添加到/lib/modules/version/build/Module.symvers

但我想知道有没有办法只从外部模块导出符号(不修改内核源代码树)?

1 个答案:

答案 0 :(得分:6)

hello 模块的Makefile的最顶端处添加此行:

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

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

现在重建 hello 模块,它将被正确加载。

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