pc : [1.txt
c0034818 T __kmalloc
...
c00082a8 t quiet_kernel /*最开始的是虚拟地址*/
...
bf000000 t $a [cdd]
..
由此可看代码崩溃在xxx.ko
2.定位崩溃在xxx.ko中的哪个函数
arm-linux-objdump -D cdd.ko >2.txt
00000000
0: e1a0c00d
mov ip,sp //编译地址,编译后的指令,汇编语言
编译地址+0xbf000000 = 存放地址
0000009c
9c: e1a0c00d
mov ip,sp
a0: e92dd8f0
push {r4,r5,r6,r7,fp,ip,lr,pc}
...
b8: e5c43000
strb r3,[r4] ------此处出现问题
由此知道崩溃在cdd_open函数
3. 反汇编内核代码了解cdd_open被调用流程
arm-linux-objdump -D vmlinux >3.txt
cdd_open压栈,push {r4,r5,r6,r7,fp,ip,lr,pc}
这8个数据就是你要压的数据,lr寄存器的值是函数调用完要返回的地址
根据lr,查看上一次调用cdd_open的函数
以此类推,可以得到调用流程