Ftrace 调试 Rockchip MIPI D-PHY 驱动步骤
#内核配置项 CONFIG_FUNCTION_TRACER=y、CONFIG_FUNCTION_GRAPH_TRACER=y 等# 挂载 debugfs(如果尚未挂载)
mount -t debugfs none /sys/kernel/debug# 设置 tracer 为 function_graph
echo function_graph > /sys/kernel/debug/tracing/current_tracer# 清空 filter 和 notrace
echo > /sys/kernel/debug/tracing/set_ftrace_filter
echo > /sys/kernel/debug/tracing/set_ftrace_notrace# 添加你关心的函数到 filter(以 rockchip_mipidphy_* 为例)
echo rockchip_mipidphy_probe > /sys/kernel/debug/tracing/set_ftrace_filter
echo rockchip_mipidphy_remove >> /sys/kernel/debug/tracing/set_ftrace_filter
echo rockchip_mipidphy_suspend >> /sys/kernel/debug/tracing/set_ftrace_filter
echo rockchip_mipidphy_resume >> /sys/kernel/debug/tracing/set_ftrace_filter# 可选:添加不想追踪的函数到 notrace
# echo some_unwanted_function > /sys/kernel/debug/tracing/set_ftrace_notrace# 开启 trace 记录
echo 1 > /sys/kernel/debug/tracing/tracing_on# 运行图像采集程序(触发驱动调用)
your_v4l2_app_or_command_here# 停止 trace
echo 0 > /sys/kernel/debug/tracing/tracing_on# 查看 trace 输出
cat /sys/kernel/debug/tracing/trace
输出示例
# tracer: function_graph
#
# CPU TASK/PID DURATION FUNCTION CALLS
# | | | | | |0) | rockchip_mipidphy_probe() {0) | devm_kzalloc() { ... }0) | devm_platform_ioremap_resource() { ... }0) | devm_request_irq() { ... }0) | } /* rockchip_mipidphy_probe */
完整自动化脚本(保存为 trace_dphy.sh
)
#!/bin/shMOUNT_DEBUGFS=1
TRACER=function_graph
FILTER_PATTERN="rockchip_mipidphy_*"# 挂载 debugfs
if [ $MOUNT_DEBUGFS -eq 1 ]; thenmount -t debugfs none /sys/kernel/debug 2>/dev/null || true
fi# 设置 tracer
echo $TRACER > /sys/kernel/debug/tracing/current_tracer# 清除 filter
echo > /sys/kernel/debug/tracing/set_ftrace_filter
echo > /sys/kernel/debug/tracing/set_ftrace_notrace# 设置 filter
echo $FILTER_PATTERN > /sys/kernel/debug/tracing/set_ftrace_filter# 启动 trace
echo 1 > /sys/kernel/debug/tracing/tracing_on# 提示运行应用程序
echo "Start your V4L2 capture program now..."
read -p "Press Enter to stop tracing..."# 停止 trace
echo 0 > /sys/kernel/debug/tracing/tracing_on# 输出 trace
cat /sys/kernel/debug/tracing/trace > /tmp/dphy_trace.txt
echo "Trace saved to /tmp/dphy_trace.txt"
使用方式:
chmod +x trace_dphy.sh
./trace_dphy.sh