Что будет, если два модуля ядра экспортируют один и тот же символ - PullRequest
6 голосов
/ 11 августа 2010

Если два модуля ядра содержат EXPORT_SYMBOL (a), a определяется как: int a, что произойдет, если два модуля были вставлены?какой "а" будет использоваться?

1 Ответ

9 голосов
/ 13 августа 2010

Вы не можете вставлять повторяющиеся символы в ядро. Пример:

Модуль 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...