内核符号 __tracepoint_module_load 在哪里定义?

Posted

技术标签:

【中文标题】内核符号 __tracepoint_module_load 在哪里定义?【英文标题】:Where is the kernel symbol __tracepoint_module_load defined? 【发布时间】:2020-04-03 05:43:26 【问题描述】:

内核符号__tracepoint_module_load在哪里定义? 曾经在/proc/kallsyms看到过,现在找不到了。

bootlin.com/linux/ 也找不到。

【问题讨论】:

【参考方案1】:

内核符号__tracepoint_module_load在哪里定义?

TRACE_EVENT宏,最终使用__DECLARE_TRACE,在哪里可以看到:

extern struct tracepoint __tracepoint_##name;

所以我们可以在include/trace/events/module.h 中为module_load 找到合适的TRACE_EVENT“呼叫”:

TRACE_EVENT(module_load,
...

/proc/kallsyms输出D表示符号在初始化数据段中:

ffffffff91af5240 D __tracepoint_module_load

附:如果预处理器魔法 elixir.bootlin.com 没那么有用。要进行真正的调查,只需克隆Linux kernel 或从pub 下载适当的源代码。

【讨论】:

好的,谢谢。那很难。此外,您知道内核需要使用哪些选项构建,以便将 __tracepoint_module_load 符号导出到 /proc/kallsyms 吗?我注意到需要CONFIG_MODULES...但是还有什么? CONFIG_KALLSYMS_ALLCONFIG_TRACEPOINTS 也需要吗?

以上是关于内核符号 __tracepoint_module_load 在哪里定义?的主要内容,如果未能解决你的问题,请参考以下文章

访问未通过 EXPORT_SYMBOL* 导出的 Linux 内核符号

在linux内核中为什么解析设备树时会使用be32_to_cpup()接口?

0_环境搭建

无法解析的外部符号 __imp____glutInitWithExit@12,该符号在函数 _glutInit_ATEXIT_HACK@8 中被引用

永远重复“内核死亡,重新启动”

dyld:惰性符号绑定失败:找不到符号:___emutls_get_address