一、对于power相关的加trace
1. 在头文件trace/events/power.h中添加:
TRACE_EVENT(wakeup_reasons_tracer_test, TP_PROTO(const char *irq_name, int choose_flag), TP_ARGS(irq_name, choose_flag), TP_STRUCT__entry( __string(irq_name, irq_name) __field(int, choose_flag) ), TP_fast_assign( __assign_str(irq_name, irq_name); __entry->choose_flag = choose_flag; ), TP_printk("irq_name=%s choose_flag=%d", __get_str(irq_name), __entry->choose_flag ) );
2. 源文件中使用
(1) 包含头文件
#include <trace/events/power.h>
(2) 函数中使用
int wakeup_reasons_tracer_test(const char *irq_name, int choose_flag) { ... trace_wakeup_reasons_tracer_test(irq_name, choose_flag) ... }
(3) 打开抓这个trace
# echo wakeup_reasons_tracer_test > /sys/kernel/tracing/set_event
# > /sys/kernel/tracing/trace //清空缓存
# cat /sys/kernel/tracing/trace_pipe | grep wakeup_reasons_tracer_test //查看wakeup_reasons_tracer_test调用
Binder:702_2-7684 [006] .... 2365.019705: wakeup_reasons_tracer_test: irq_name=abort choose_flag=16384 Binder:702_2-7684 [000] d... 2366.087044: wakeup_reasons_tracer_test: irq_name=ccdetect-change choose_flag=248 Binder:702_2-7684 [000] dnh1 2366.087295: wakeup_reasons_tracer_test: irq_name=ccdetect-change choose_flag=3 <idle>-0 [000] dnh1 2366.185204: wakeup_reasons_tracer_test: irq_name=alarm choose_flag=4
二、trace的filter功能
1.例子
# echo 1 > sched/sched_switch/enable # echo "next_comm == xxx" > sched/sched_switch/filter (filter 格式可以cat format 同目录下获得) TODO: 测试! # echo 1 > sched/sched_wakeup/enable # echo "next_comm == xxx" > sched/sched_wakeup/filter # echo 1 > sched/sched_migrate/enable # echo "next_comm == xxx" > sched/sched_migrate/filter # echo 2048 > buffer_size_kb # echo 1 > tracing_on