Что будет, если два модуля ядра экспортируют один и тот же символ
Если два модуля ядра содержат EXPORT_SYMBOL(a), a определяется как: int a, что произойдет, если два модуля были вставлены? какой "а" будет использоваться?
1 ответ
Решение
Вы не можете вставить повторяющиеся символы в ядро. Пример:
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)