我在内核源代码树之外编码。有两个模块,第一个 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
但我想知道有没有办法只从外部模块导出符号(不修改内核源代码树)?
答案 0 :(得分:6)
在 hello 模块的Makefile的最顶端处添加此行:
KBUILD_EXTRA_SYMBOLS := /home/your-user/path/to/printt/Module.symvers
(务必输入 printt 模块的正确路径。)
现在重建 hello 模块,它将被正确加载。
有关详细信息,请参阅Documentation/kbuild/modules.txt,“6.3来自其他外部模块的符号”。