如何从外部模块导出符号? [英] How to export a symbol from an external module?

查看:26
本文介绍了如何从外部模块导出符号?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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

模块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/module/version/kernel下的位置

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

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

推荐答案

将此行添加到hello模块的makefile的最上面

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

(请确保输入到打印模块的正确路径)。

现在重新构建hello模块,它将正常加载。

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

这篇关于如何从外部模块导出符号?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆