我想知道在特定场景下执行了哪些所有功能。
具体来说,我想了解 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 进行交叉编译。
最佳答案
您可以使用-finstrument-functions
编译您想要的源文件。然后你可以在内核的某个文件中自己实现这两个函数。
注意:
- 您不得使用
-finstrument-functions
编译包含__cyg_profile_func_enter/exit
的文件(或者,您应该使用__attribute__((no_instrument_function))
). - 函数
__cyg_profile_func_enter/exit
不得调用使用-finstrument-functions
编译的代码 - 这将导致无限递归。如果他们所做的只是printk
,而printk
和它调用的低级驱动程序不是以这种方式编译的,那么你就可以了。
关于c - Linux 内核中的进入和退出打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18555957/