我正在研究Linux设备驱动程序,我的主要重点是wifi驱动程序。我想知道插入设备时代码的流向。也许,我可以做一些事情,例如printk
在每个函数中添加一行。ath9k_htc
驱动程序支持我拥有的设备。为了学习目的,我想对驱动程序代码进行一些更改。
什么是理解linux中驱动程序模块代码流的正确或通用方法?
当我想要做到这一点,我使用的ftrace
框架。首先安装特殊文件系统:
mount -t tracefs nodev /sys/kernel/tracing
(作为root用户;您应该成为所有这些用户的root用户,无论如何,您都将以root用户身份进行操作,拥有root shell比使用容易得多sudo
)。
然后转到该目录:
cd /sys/kernel/tracing
它包含一个README
提供简短摘要的基础。要探索函数调用,我使用的函数图形示踪剂,function_graph
在available_tracers
。确定您感兴趣的功能,例如ath9k_htc_tx
,并进行设置
echo ath9k_htc_tx > set_graph_function
您可以附加其他功能,请确保>>
在第一个功能之后使用。您可以通过以下方式查看已配置的功能:
cat set_graph_function
当您写入时set_graph_function
,将针对正在运行的内核检查该函数;如果找不到该函数,则写入将失败,因此您将立即知道是否最终不进行任何跟踪。
功能设置完成后,启用跟踪器:
echo function_graph > current_tracer
然后观看trace
文件。要再次禁用跟踪器,
echo nop > current_tracer
或tracing_on
通过向其写入0或1进行翻转(0禁用跟踪,1使其重新启用)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句