前言
ftrace 是一个内部跟踪器,帮助开发人员和 系统设计者找到内核内部发生的事情,可用于调试或分析延迟 等性能问题。
由于这次主要用来函数跟踪,分析内核驱动加载过程,所以只测试函数追踪,其他功能日后有需要再更新。
测试使用:
imx6ul 开发板
ap3216.ko 驱动
跟踪工具ftrace
内核版本: 4.1.15
内核配置并编译使用
CONFIG_FTRACE=y
CONFIG_STACK_TRACER=y
CONFIG_FUNCTION_TRACER=y
CONFIG_FUNCTION_GRAPH_TRACER=y
CONFIG_HAVE_DYNAMIC_FTRACE=y
CONFIG_HAVE_FUNCTION_TRACER=y
CONFIG_IRQSOFF_TRACER=y
CONFIG_SCHED_TRACER=y
CONFIG_FTRACE_SYSCALLS=y
CONFIG_PREEMPTIRQ_EVENTS=y
CONFIG_TRACER_SNAPSHOT=y
挂载debugfs
将以下指令加到 /etc/fstab 里面 ,然后重启
debugfs /sys/kernel/debug debugfs defaults 0 0

设置ftrace 函数追踪
在/sys/kernel/debug/tracing/ 下输入指令:
echo function > current_tracer
使能函数栈追踪
echo 1 > options/func_stack_trace
设置需要追踪的函数
执行以下指令追踪 函数 device_create :
echo device_create > set_ftrace_filter
本次主要追踪 modprobe ap3216.ko 指令下驱动模块加载过程,驱动在匹配成功后进入的第一个函数是 ap3216c_probe, 所以会执行 device_create 函数(如下图):

输入使能指令开始追踪
echo 1 > tracing_on
使用指令加载驱动模块
modprobe ap3216c
查看函数栈
该过程已经写成自动化脚本了,所以直接 ./ftrace.sh 就可以。
如图 ,驱动加载过程清晰明了, 最先执行的是 => ret_fast_syscall 该函数 ,然后依次是 模块注册、 设备匹配、 匹配成功执行 ap3216c_probe 该函数。

结束
该过程已配置自动化脚本,如需要请私信!
使用ftrace跟踪IMX6UL驱动加载过程,
本文详细介绍了如何在4.1.15内核版本的IMX6UL开发板上配置和使用ftrace功能,追踪ap3216.ko驱动模块的加载过程,包括设置函数追踪、堆栈追踪和自动化脚本的使用。
1075

被折叠的 条评论
为什么被折叠?



