分析Linux内核模块

时间:2011-04-23 08:41:35

标签: linux profiling linux-kernel kernel-module

我对分析Linux内核的模块感兴趣。我这样试过:

  1. 使用CONFIG_PROFILING=y
  2. 构建内核
  3. 使用profile=2
  4. 启动内核
  5. echo 123 > /proc/profile
  6. 重置分析器
  7. 该模块已由专用守护程序
  8. 成功加载
  9. 运行通过特定ioctl调用使用该模块的用户空间应用。测试应用程序按预期工作,因此模块工作正常。
  10. 使用readprofile -p /proc/profile -m System.map阅读分析信息,其中 System.app 与内核一起生成。
  11. 到目前为止,这么好。几乎一切都按预期工作。然而,没有工作的是,我没有得到关于我的模块的任何信息,即没有提到模块中的任何功能。

    然而,在第二个想法,我记得我忘记使用CONFIG_PROFILING=y 重新编译 模块。

    所以,我的问题是:模块没有显示在分析日志中,因为它没有使用CONFIG_PROFILING=y编译,或者是否有其他更明显的原因我不知道?

    如果有人想知道,为什么我要求而不是直接尝试,那是因为,我不能在家里做,而且我更愿意听到知识渊博会说什么在我再次访问代码之前。

2 个答案:

答案 0 :(得分:6)

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

解决方案是将驱动程序构建到内核中。不幸的是,这并不总是有效,因为系统可能只能在内置于模块中的驱动程序中运行。

答案 1 :(得分:0)

我建议使用oprofile应该有效。