如果两个内核模块包含EXPORT_SYMBOL(a),a定义为:int a,如果插入两个模块会发生什么?将使用哪个“a”?
最佳答案
您不能将重复的符号插入内核。例子:xor
在我的内核中加载的模块
nwatkins@kyoto:~$ lsmod | grep xor
xor 4685 1 async_xor
导出的
xor_blocks
xor
中的符号模块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)
关于linux-kernel - 如果两个内核模块导出相同的符号会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3454740/