如何使一个Linux内核函数可用于ftrace function_graph示踪剂?

我想在内核启动过程中用function_graph ftrace追踪一个函数来理解它做什么,但是它在available_filter_functions是不可用的。

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

你有解决scheme吗 ?

有关信息,我想跟踪的function是Android内核3.4中的persistent_ram_init_ringbufferpersistent_ram_early_init

我读通过文件,但没有发现在这个和grep没有帮助更多…

谢谢

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

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

如果你真的想跟踪他们,然后删除这些注释。 然后他们应该出现在追踪的功能列表中。

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

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

这些链接可能有帮助。 首先是我用google搜索到的东西。 其次是ftrace文件