12

我有兴趣为 Linux 内核分析一个模块。我试过这样:

  1. 构建内核CONFIG_PROFILING=y
  2. 启动内核profile=2
  3. 重置探查器echo 123 > /proc/profile
  4. 该模块已由专用守护程序成功加载
  5. ioctl通过特定调用运行正在使用该模块的用户空间应用程序。测试应用程序按预期工作,因此模块工作正常。
  6. 使用System.app与内核一起生成的readprofile -p /proc/profile -m System.map位置读取分析信息。

到现在为止还挺好。几乎一切都按预期工作。然而,不起作用的是我没有得到任何关于我的模块的信息,即没有提到模块中的任何功能。

但是,再想一想,我记得我忘记使用CONFIG_PROFILING=y.

所以,我的问题是:该模块没有出现在分析日志中是因为它没有被编译,CONFIG_PROFILING=y还是有其他一些我不知道的更明显的原因?

如果有人想知道,为什么我要问而不是立即尝试,那是因为,我不能在家里做,我想在我再次访问代码之前听听知识渊博的人会说什么。

4

2 回答 2

6

似乎不可能以这种方式对模块进行分析,因为它们是动态加载的,这意味着它们在 System.map 文件中丢失

一个解决方案是将驱动程序构建到内核中。不幸的是,这并不总是有效,因为系统可能被设计为仅使用内置在模块中的驱动程序运行。

于 2011-04-26T06:53:55.363 回答
0

我建议使用oprofile应该可以。

于 2011-04-26T07:20:34.743 回答