如果两个内核模块导出相同的符号会发生什么

Jia*_*ong 6 linux-kernel

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

Noa*_*ins 9

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

xor我的内核中加载了该模块

nwatkins@kyoto:~$ lsmod | grep xor
xor                     4685  1 async_xor
Run Code Online (Sandbox Code Playgroud)

模块中导出的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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

报告错误 insmod

nwatkins@kyoto:~$ sudo insmod mod-t1.ko 
insmod: error inserting 'mod-t1.ko': -1 Invalid module format
Run Code Online (Sandbox Code Playgroud)

来自的重复错误消息 dmesg

[422002.174033] mod_t1: exports duplicate symbol xor_blocks (owned by xor)
Run Code Online (Sandbox Code Playgroud)