/ proc / kallsyms中标记为“ T”的内核符​​号不会导出

符号machine_power_off在中用“ T”标记/proc/kallsyms

$ grep -w machine_power_off /proc/kallsyms 

ffffffff8102391b T machine_power_off

但是它没有出口。kallsyms中的“

T”是否足以导出符号?导出是否足以在其他模块中使用?

我使用它的模块编译时显示警告:

WARNING: "machine_power_off" [/path/to/module.ko] undefined!

在主机(3.2.0-4-amd64)上,我可以加载此模块,但是在VirtualBox(3.16.0-4-amd64)上,它将生成以下消息:

insmod: ERROR: could not insert module module.ko: Unknown symbol in module

为什么在我的主机系统中加载此模块,而不在VirtualBox中加载该模块?

回答:

标记为“ T” /proc/kallsyms表示该符号是全局可见的,并且可以在其他 (例如,通过驱动程序,

编译器)。

但是为了在 中可用,需要使用EXPORT_SYMBOL或类似符号导出符号。导出符号列表与内核中所有符号列表分开维护。

可以在file中找到导出的符号/lib/modules/<kernel-version>/build/Module.symvers

(该文件应该存在,以便可以针对给定的内核构建内核模块)。

以上是 / proc / kallsyms中标记为“ T”的内核符​​号不会导出 的全部内容, 来源链接: utcz.com/qa/420574.html

回到顶部