【Kernel ftrace】使用kernel ftrace追踪IRQ的例子
1.简介
近期遇到一个uart数据部分丢失的问题,比较怀疑在中断中,寄存器发生异常。
选择使用kernel自带的Trace工具追踪UART IRQ信号。
2.使用方法
追踪IRQ
irq:irq_handler_exit
irq:irq_handler_entry
proc/interrupts //查看当前注册的IRQ,确认要追踪的IRQ号
cd /sys/kernel/debug/tracing/
echo irq_handler_exit > set_event //追踪IRQ进入
echo irq_handler_entry >> set_event //追踪IRQ出来
echo "irq != 4" > events/irq/irq_handler_entry/filter //过滤掉过于频繁的IRQ信号
echo "irq != 4" > events/irq/irq_handler_exit/filter //过滤掉过于频繁的IRQ信号
echo 4096 > buffer_size_kb //设置buff size,单位为kb,因为irq信息比较多,因此选择较大buff
echo > trace
echo 1 > tracing_on
//echo "name != arch_timer" > events/irq/irq_handler_entry/filter
//echo "name != arch_timer" > events/irq/irq_handler_exit/filter
cat trace > /3rd_rw/trace.txt //保存log到文件
3.创建kernel thread辅助debug
其中,使用trace_printk将log打印到trace buff中,可以和上面的irq log组合在一起,方便观察。