如何让一个Linux内核函数可用于ftrace function_graph tracer?

时间:2013-03-07 12:42:51

标签: android linux kernel ftrace

我想在内核启动过程中使用ftrace function_graph跟踪一个函数,以了解它的作用,但available_filter_functions中没有。

我尝试用EXPORT_SYMBOL()导出它,猜测它会使它可用,但事实并非如此。

你有解决方案吗?

有关信息,我要跟踪的功能是Android内核3.4中的persistent_ram_init_ringbufferpersistent_ram_early_init

我仔细阅读了文档,但没有发现任何内容,grep没有帮助更多......

由于

2 个答案:

答案 0 :(得分:8)

问题是这些函数是用__init和__devinit注释的,它们是由ftrace函数跟踪器列出的黑色。

为什么呢?因为作为模块初始化函数(或内核初始化函数),它们在初始化期间加载,并在初始化完成时被移除。 ftrace跟踪的每个函数都保存在一个特殊的紧凑表中。目前,没有办法告诉ftrace这些函数已被删除(释放),而ftrace应该从它的表中删除它们。如果我们只是忽略它,那么当启用函数跟踪时,ftrace将尝试修改不再存在的位置并导致各种问题(还记得e1000e错误吗?)。

如果您确实要跟踪它们,请删除这些注释。然后它们应出现在要跟踪的函数列表中。

答案 1 :(得分:1)

http://lwn.net/Articles/370423/

http://www.mjmwired.net/kernel/Documentation/trace/ftrace.txt

这些链接可能有所帮助。首先是通过谷歌搜索找到的东西。第二是ftrace文档