调试利器kprobe+ftrace+gdb

1.本文借用spi案例进行kprobe的使用讲解

设备上利用cat /proc/kallsyms | grep "dspi_fifo_write"命令获取到dspi_fifo_write函数的起始地址为ffffffc0086c7130 t dspi_fifo_write,

然后利用aarch64-none-linux-gnu-objdump -D /home/zeekr/code/test/vmlinux | grep “ffffffc0086c7130” -A 100命令得到部分汇编代码如下所示

ffffffc0086c7130 <dspi_fifo_write>:

ffffffc0086c7130: d503201f nop

ffffffc0086c7134: d503201f nop

ffffffc0086c7138: d503233f paciasp

ffffffc0086c713c: a9bc7bfd stp x29, x30, [sp, #-64]!

ffffffc0086c7140: d5384101 mrs x1, sp_el0

ffffffc0086c7144: 910003fd mov x29, sp

ffffffc0086c7148: a90153f3 stp x19, x20, [sp, #16]

ffffffc0086c714c: aa0003f3 mov x19, x0

ffffffc0086c7150: a9025bf5 stp x21, x22, [sp, #32]

ffffffc0086c7154: f942f022 ldr x2, [x1, #1504]

ffffffc0086c7158: f9001fe2 str x2, [sp, #56]

ffffffc0086c715c: d2800002 mov x2, #0x0 // #0

ffffffc0086c7160: f9403c01 ldr x1, [x0, #120]

ffffffc0086c7164: a943d815 ldp x21, x22, [x0, #56]

ffffffc0086c7168: b9400834 ldr w20, [x1, #8]

ffffffc0086c716c: 97fffc6a bl ffffffc0086c6314 <dspi_setup_accel>

ffffffc0086c7170: b940aa60 ldr w0, [x19, #168]

ffffffc0086c7174: f9402e62 ldr x2, [x19, #88]

ffffffc0086c7178: 0b547e83 add w3, w20, w20, lsr #31

ffffffc0086c717c: 93407c04 sxtw x4, w0

ffffffc0086c7180: 7100101f cmp w0, #0x4

ffffffc0086c7184: 13017c63 asr w3, w3, #1

ffffffc0086c7188: aa1503e1 mov x1, x21

ffffffc0086c718c: 1a940074 csel w20, w3, w20, eq // eq = none

ffffffc0086c7190: b94036c3 ldr w3, [x22, #52]

ffffffc0086c7194: 9ac40842 udiv x2, x2, x4

ffffffc0086c7198: 6b02029f cmp w20, w2

ffffffc0086c719c: 1a82b294 csel w20, w20, w2, lt // lt = tstop

ffffffc0086c71a0: 1b147c02 mul w2, w0, w20

ffffffc0086c71a4: 0b020060 add w0, w3, w2

将汇编代码与dspi_fifo_write函数对应起来执行

cd /sys/kernel/debug/tracing/

echo ‘p dspi_fifo_write+168 %x2’ > /sys/kernel/debug/tracing/kprobe_events,

168为offset,即为num_fifo_entries相对dspi_fifo_write函数起始位置的偏移,x2为当时存储num_fifo_entries值的寄存器(这部分需要参考汇编理解)

echo 1 > tracing_on

echo 1 > events/kprobes/p_dspi_fifo_write_168/enable

然后执行/opt/zkos/userdata/spidev_test -D /dev/spidev1.0 -v -p 123456 & /opt/zkos/userdata/spidev_test -D /dev/spidev5.0 -v -p 654321命令出发探测点

利用cat trace命令看到

cat trace

tracer: nop

entries-in-buffer/entries-written: 2/2 #P:4

_-------=> irqs-off

/ _------=> need-resched

| / _-----=> need-resched-lazy

|| / _----=> hardirq/softirq

||| / _—=> preempt-depth

|||| / _–=> preempt-lazy-depth

||||| / _-=> migrate-disable

|||||| / delay

TASK-PID CPU# ||||||| TIMESTAMP FUNCTION

| | | ||||||| | |

 spidev_test-435     [001] d...1..   168.511663: p_dspi_fifo_write_168: (dspi_fifo_write+0xa8/0x1e4) arg1=0x6

 spidev_test-438     [001] d...1..   180.229441: p_dspi_fifo_write_168: (dspi_fifo_write+0xa8/0x1e4) arg1=0x6

其中arg1即为num_fifo_entries值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值