我对分析Linux内核的模块感兴趣。我这样试过:
CONFIG_PROFILING=y
profile=2
echo 123 > /proc/profile
ioctl
调用使用该模块的用户空间应用。测试应用程序按预期工作,因此模块工作正常。readprofile -p /proc/profile -m System.map
阅读分析信息,其中 System.app 与内核一起生成。到目前为止,这么好。几乎一切都按预期工作。然而,没有工作的是,我没有得到关于我的模块的任何信息,即没有提到模块中的任何功能。
然而,在第二个想法,我记得我忘记使用CONFIG_PROFILING=y
重新编译 模块。
所以,我的问题是:模块没有显示在分析日志中,因为它没有使用CONFIG_PROFILING=y
编译,或者是否有其他更明显的原因我不知道?
如果有人想知道,为什么我要求而不是直接尝试,那是因为,我不能在家里做,而且我更愿意听到知识渊博会说什么在我再次访问代码之前。
答案 0 :(得分:6)
似乎无法以这种方式对模块进行分析,因为它们是动态加载的,这意味着它们在System.map文件中缺失。
解决方案是将驱动程序构建到内核中。不幸的是,这并不总是有效,因为系统可能只能在内置于模块中的驱动程序中运行。
答案 1 :(得分:0)
我建议使用oprofile应该有效。