分析Linux内核模块

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

  1. 使用CONFIG_PROFILING=y构build内核
  2. profile=2引导内核
  3. 通过echo 123 > /proc/profile重置分析器
  4. 该模块被一个专用的守护进程成功加载
  5. 通过特定的ioctl调用运行使用该模块的用户空间应用程序。 testing应用程序按预期工作,所以模块工作正常。
  6. 使用readprofile -p /proc/profile -m System.map读取分析信息,其中System.app与内核一起生成。

到现在为止还挺好。 几乎所有事情都按预期工作。 但是没有工作的是,我没有得到任何有关我的模块的信息,即没有提到模块的任何function。

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

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

如果有人想知道,我为什么要问,而不是直接尝试,那是因为我不能在家里做,而且我希望听到知情者在再次访问代码之前会说些什么。

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

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

我建议使用oprofile应该工作。