我想知道在特定场景中执行了哪些功能。
具体来说,我想了解 Linux内核中的MMC / SD卡堆栈。
我的想法就是把这样的照片打印出来:
pr_info("Entering %s\n", __func__);
pr_info("Leaving %s\n", __func__);
drivers/mmc/
中的所有函数。
但这是一项繁琐的工作。
有更好的方法吗?
注意:我探讨了使用gcc __cyg_profile_func_enter
和__cyg_profile_func_exit
提供的检测功能的可能性。
这些仪器功能适用于小型模块。
但是这些功能可以在Linux内核中使用吗?或者我们有不同的方法吗?
我的环境:代码将交叉编译为Cortex A7 / A9。
答案 0 :(得分:4)
您可以使用-finstrument-functions
编译所需的源文件。然后你可以在内核的某个文件中自己实现这两个函数。
请注意:
__cyg_profile_func_enter/exit
编译包含-finstrument-functions
的文件(或者,您应使用__attribute__((no_instrument_function))
)。__cyg_profile_func_enter/exit
不能调用用-finstrument-functions
编译的代码 - 这将导致无限递归。如果它们只是printk
和printk
,并且它调用的低级驱动程序不是以这种方式编译的,那么你就可以了。答案 1 :(得分:1)
还要尝试使用Linux ftrace
跟踪器: