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

标签 linux-kernel

如果两个内核模块包含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/

相关文章:

linux - 从内核中断读取设备

java - Linux OOM Killer 和 Java 进程

linux - 当从内核内部调用 open()/socket() 时,文件描述符是如何分配的?

linux - linux 中的整个系统空间地址空间是否真的不使用请求分页?

tcp:3路握手在哪里实现

gcc - Linux内核转储堆栈中的 ".clone"是什么意思?

c - 通过pid查找task_struct的有效方法

linux - Linux 上的高分辨率进程监控/日志记录

linux - 文件对象是每个进程的本地对象还是系统范围的?

c++ - SwitchTothread Windows 的 Linux 选项