支持作者新书,点击京东购买《Yocto项目实战教程:高效定制嵌入式Linux系统》
Linux ftrace基础入门教程:内核调试者的强大利器
本文面向所有 Linux 内核开发和高级调试需求者,不分平台,完全免依赖 Yocto 环境。内容包括 ftrace 基础概念,系统配置步骤,功能说明以及实际用途。
一、ftrace 是什么?
ftrace
是 Linux 内核内置的函数跟踪工具,主要用于观察内核中函数调用关系、异常跟踪、性能分析等内核调试操作,无需使用外部接口。
核心能力
- 跟踪内核函数调用
- 系统调用跟踪
- 事件添载和输出
- 虚拟监听点 (uprobe)
- 时间分析 (latency)
- 异常高调
根目录
ftrace 所有操作都通过 /sys/kernel/debug/tracing
操控,需要挂载 debugfs:
mount -t debugfs none /sys/kernel/debug
二、如何配置开启 ftrace
1.启用时机:内核配置 (menuconfig)
无论是自行编译内核还是 BSP 调试,都需要在 make menuconfig
中打开 ftrace 相关选项:
记住这 5 个最基本选项
功能 | menuconfig 位置 | CONFIG 对应 |
---|---|---|
Kernel Function Tracer | Kernel hacking > Tracers | CONFIG_FUNCTION_TRACER |
Function Graph Tracer | Tracers 子页 | CONFIG_FUNCTION_GRAPH_TRACER |
Dynamic Ftrace | 同页 | CONFIG_DYNAMIC_FTRACE |
Trace Syscalls | 同页 | CONFIG_FTRACE_SYSCALLS |
Stack Trace | General setup > Stack trace | CONFIG_STACKTRACE |
配好后:
make -j$(nproc)
2.启动后验证
登入板子:
cat /sys/kernel/debug/tracing/available_tracers
如果看到 function / function_graph,表明已成功配置
三、ftrace 基础操作说明
跟踪一个内核函数
echo function > /sys/kernel/debug/tracing/current_tracer
echo your_function_name > /sys/kernel/debug/tracing/set_ftrace_filter
echo 1 > /sys/kernel/debug/tracing/tracing_on
然后执行对应操作,最后查看 trace:
cat /sys/kernel/debug/tracing/trace
关闭 trace
echo 0 > /sys/kernel/debug/tracing/tracing_on
echo nop > /sys/kernel/debug/tracing/current_tracer
echo > /sys/kernel/debug/tracing/set_ftrace_filter
限定 PID 跟踪 (advanced)
echo <pid> > /sys/kernel/debug/tracing/set_ftrace_pid
四、常用的 ftrace 文件
文件 | 功能 |
---|---|
current_tracer | 设置当前跟踪器(function,graph) |
trace | 读取目前跟踪日志 |
set_ftrace_filter | 限定跟踪的函数名 |
set_ftrace_pid | 限定跟踪的进程 PID |
tracing_on | 开/关 跟踪 |
available_tracers | 可用的 tracer 列表 |
available_filter_functions | 所有可跟踪函数 |
五、ftrace 合适场景
场景 | 说明 |
---|---|
验证 probe 函数是否执行 | 如 I2C 设备是否被验证配置 |
调用成本跟踪 | 解析哪个函数耗时最多 |
性能阅读 | 配合 perf,给出点击时间 |
无 dmesg 日志 | 高清细跟踪,不依赖 printk |
六、推荐配置示例
当前最小配置,适用于与 perf 配合,或手动分析 probe:
[*] Kernel Function Tracer
[*] Kernel Function Graph Tracer
[*] enable/disable function tracing dynamically
[*] Trace syscalls
[*] Stack tracer
七、总结
ftrace
是高效、低负载、内核级利器,是需要进行性能调优、无日志错误分析、验证操作路径时的首选方案。
下一篇文章,我们将实战跟踪一个实际的 I2C EEPROM 设备,分析 driver probe 是否被命中,如何进行配置和调用,完全揭示调试思路。