如果两个内核模块包含EXPORT_SYMBOL(a),则a定义为:int a,如果插入了两个模块会发生什么?哪个“a”会被使用?
答案 0 :(得分:9)
您无法在内核中插入重复的符号。例如:
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)