进入和退出打印在Linux内核中

时间:2013-09-01 06:43:42

标签: c debugging logging linux-kernel

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

具体来说,我想了解 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。

2 个答案:

答案 0 :(得分:4)

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

请注意:

  1. 您不得使用__cyg_profile_func_enter/exit编译包含-finstrument-functions的文件(或者,您应使用__attribute__((no_instrument_function)))。
  2. 函数__cyg_profile_func_enter/exit不能调用用-finstrument-functions编译的代码 - 这将导致无限递归。如果它们只是printkprintk,并且它调用的低级驱动程序不是以这种方式编译的,那么你就可以了。

答案 1 :(得分:1)