c - Linux 内核中的进入和退出打印

标签 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 进行交叉编译。

最佳答案

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

注意:

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

关于c - Linux 内核中的进入和退出打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18555957/

相关文章:

c - printf 中的可变大小填充

c++ - 使用 OpenGL 渲染 VAAPI 表面?

java - 是否有旨在调试并发软件的 JVM?

python - 使用VIM像Eclipse和PyDev一样单步调试python

url - 使用 mapreduce 从日志文件中提取命中计数

java - 为 webdriver 记录 selenium

c - 打开和关闭 LED 的功能

c - 如何写入结构体数组的第二个元素?在C中

c - gdb 如何检查二维数组元素

python - 如何在 Python 中临时更改记录消息的格式?