ftrace 全面入门和实战指南 (Part 1 - 被动监控方)

支持作者,点击京东购买作者创作书籍《Yocto项目实战教程:高效定制嵌入式Linux系统》

作者:嵌入式 Jerry
适用对象:Linux 驱动开发者 / BSP 经验积累者 / Yocto 开发环境下的内核调试需求者


一、ftrace 是什么?

ftrace 是 Linux 内核内置的函数级跟踪工具链,允许我们无需改动代码,即可在运行时动态观察内核中的函数调用、事件执行、互斥进入和优先级切换等具体行为。

ftrace 核心特点是:

  • 基于 debugfs
  • 基于 mcount/动态跳转
  • 无需修改代码
  • 可分析函数调用路径和耗时
  • 支持事件级 tracepoint hook

在这里插入图片描述

二、基本进入与 debugfs 环境

先确认内核配置启用了 ftrace 支持:

zcat /proc/config.gz | grep CONFIG_FTRACE
CONFIG_FTRACE=y
CONFIG_FUNCTION_TRACER=y
CONFIG_FUNCTION_GRAPH_TRACER=y

挂载 debugfs:

mount -t debugfs none /sys/kernel/debug

为方便,建议组合使用:

cd /sys/kernel/debug/tracing

根目录里有许多关键控制文件:

文件作用
trace显示最新一段 trace 记录
available_filter_functions可设置过滤的全部函数名
set_ftrace_filter指定需跟踪的函数
current_tracer设置跟踪类型 (如 function, graph)
tracing_on1/启用, 0/停止 trace 记录

三、实战需求场景:根据问题查询实际函数

场景: i.MX8MP 平台上,USB 设备无响应,用 dmesg 和 printk 无法确定是否调用了 usb_add_hcd()usb_create_hcd()

目标: 无需修改内核,监控调用流程


四、实操步骤:Function Tracer

4.1 选择跟踪器

echo function > current_tracer

4.2 设置过滤函数

echo usb_add_hcd > set_ftrace_filter
echo usb_create_hcd >> set_ftrace_filter

4.3 清空记录 & 启动 tracing

echo > trace
echo 1 > tracing_on

此时提供 USB 设备,触发 probe

4.4 停止 tracing & 查看 trace

echo 0 > tracing_on
cat trace

输出示例:

usbhcd_probe()
  usb_create_hcd()
  usb_add_hcd()

五、function_graph 深层分析

切换跟踪器:

echo function_graph > current_tracer
echo usb_add_hcd > set_graph_function

输出示例:

usb_add_hcd() {
  usb_get_hcd()
  usb_alloc_dev()
  ...
} = 432.34 us

可直接分析耗时和子调用链


六、应用分析和扩展

需求推荐 tracer调用评估
确认函数是否被调用functionset_ftrace_filter + trace
分析调用链和耗时function_graphset_graph_function + trace
调试启动时间过长问题initcall_debug + ftracetrace_initcall_level + timing

七、总结:你不需要写代码,ftrace 已经做好了全部

  • 只需操作 debugfs 中的几个文件
  • 可监控任意函数
  • 适合 BSP 分析 / 动态 probe 确认 / 急难应急
  • 配合 trace-cmd / kernelshark 可进一步可视化

Part 2 (下篇):将讲解如何通过 trace_printk() 和 trace_event 在驱动中为 ftrace 添加个性化记录,完成一条从 “需求打点” 到 “ftrace 查询” 的专用跟踪链。

支持作者,点击京东购买作者创作书籍《Yocto项目实战教程:高效定制嵌入式Linux系统》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值