【问题标题】:How to export a symbol from an external module?如何从外部模块导出符号?
【发布时间】:2015-06-18 16:03:25
【问题描述】:

我在内核源代码树之外进行编码。有两个模块,第一个 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/modules/version/kernel 下的某个位置

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

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

【问题讨论】:

    标签: linux gcc linux-kernel kernel


    【解决方案1】:

    hello 模块的 Makefile 的 very top 处添加这一行:

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

    (确保将正确的路径放入您的 printt 模块)。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-25
      • 1970-01-01
      • 2017-04-10
      • 1970-01-01
      • 1970-01-01
      • 2015-11-27
      • 2015-06-21
      相关资源
      最近更新 更多