3

我想知道在特定场景中执行了哪些所有功能。

具体来说,我想了解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 Kernel 中使用吗?或者我们有什么不同的方法?

我的环境:代码将针对 Cortex A7/A9 进行交叉编译。

4

2 回答 2

4

您可以使用-finstrument-functions. 然后你可以自己实现这两个函数,在内核的某个文件中。

注意:

  1. 您不能编译包含__cyg_profile_func_enter/exitwith的文件-finstrument-functions(或者,您应该使用__attribute__((no_instrument_function)))。
  2. 函数__cyg_profile_func_enter/exit不能调用编译的代码-finstrument-functions——这将导致无限递归。如果他们所做的只是printk,并且printk它调用的低级驱动程序不是以这种方式编译的,那么你就可以了。
于 2013-09-01T06:50:00.333 回答
1

也可以试试 Linuxftrace跟踪器:

于 2013-11-01T11:34:10.090 回答