【发布时间】:2013-02-22 16:08:38
【问题描述】:
我想在内核启动过程中使用 ftrace function_graph 跟踪一个函数以了解它的作用,但它在 available_filter_functions 中不可用。
我尝试使用EXPORT_SYMBOL() 导出它,猜测它会使其可用,但事实并非如此。
你有解决办法吗?
有关信息,我要跟踪的函数是 Android 内核 3.4 中的 persistent_ram_init_ringbuffer 和 persistent_ram_early_init。
我通读了文档,但对此一无所获,而 grep 并没有提供更多帮助...
谢谢
【问题讨论】:
-
根据我对 Ftrace 的理解,函数的动态跟踪依赖于在每个内核函数开始时的 mcount 函数调用。如果您感兴趣的功能没有可用的过滤器,则可能不会出现。您是否考虑过不使用动态跟踪?它可能会产生更好的结果。
-
EXPORT_SYMBOL 似乎与内核模块加载器解决 GPL/非 GPL 许可问题有关,而不是 Ftrace。
-
当您列出 available_filter_functions 时,是否会列出任何内容?据我所知,当您编译内核时打开了 CONFIG_FUNCTION_TRACER(以及所有其他 ftrace gubbins),内核函数进入/退出跟踪是通过在 gcc 命令行上设置选项来实现的。这些选项使 gcc 为它编译的每个函数发出一个特定的函数调用。如果我理解正确,那么这意味着任何 linux 内核函数都应该被 ftrace 自动捕获。这让我想知道您的内核中是否有任何东西目前是可追踪的。
标签: android linux kernel ftrace