【linux调试】ftrace函数栈追踪

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

前言

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 该函数。
在这里插入图片描述

结束

该过程已配置自动化脚本,如需要请私信!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值