【问题标题】:What will happen if two kernel module export same symbol如果两个内核模块导出相同的符号会发生什么
【发布时间】:2010-08-11 01:45:27
【问题描述】:

如果两个内核模块包含EXPORT_SYMBOL(a),a定义为:int a,如果插入两个模块会发生什么?将使用哪个“a”?

【问题讨论】:

  • 我希望内核编译失败并出现重复错误。
  • 您应该考虑选择正确的答案。你知道,做一个好的 stackoverflow 公民。

标签: linux-kernel


【解决方案1】:

您不能将重复的符号插入内核。示例:

我的内核中加载了xor 模块

nwatkins@kyoto:~$ lsmod | grep xor
xor                     4685  1 async_xor

xor 模块中导出的xor_blocks 符号

nwatkins@kyoto:~$ nm /lib/modules/2.6.32-24-generic/kernel/crypto/xor.ko  | grep xor_blocks
0000000000000000 r __kcrctab_xor_blocks
0000000000000000 r __kstrtab_xor_blocks
0000000000000000 r __ksymtab_xor_blocks
0000000000000bb0 T xor_blocks

我创建的模块中另一个导出的 xor_blocks 符号

nwatkins@kyoto:~$ nm mod-t1.ko  | grep xor
0000000000000000 r __kcrctab_xor_blocks
0000000000000000 r __kstrtab_xor_blocks
0000000000000000 r __ksymtab_xor_blocks
0000000000000000 T xor_blocks

insmod 报告的错误

nwatkins@kyoto:~$ sudo insmod mod-t1.ko 
insmod: error inserting 'mod-t1.ko': -1 Invalid module format

来自dmesg 的重复错误消息

[422002.174033] mod_t1: exports duplicate symbol xor_blocks (owned by xor)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-25
    • 2015-08-20
    相关资源
    最近更新 更多