根据 Kernel Panic 信息分析定位问题
定位方法
包括内核模块、内核以及应用。
内核
出错地址为内核地址不需要计算偏移,可以直接使用
- addr2line
$ addr2line -f -e vmlinux 0xc062f2a0 ieee80211_send_deauth_disassoc .tmp_kallsyms2.o:?
- gdb info
$ gdb vmlinux (gdb) info symbol 0xc062f2a0 ieee80211_send_deauth_disassoc in section .text (gdb) info line *0xc062f2a0 No line number information available for address 0xc062f2a0 <ieee80211_send_deauth_disassoc>
- objdump
$ objdump -S -l -z -j .text vmlinux > 1
内核模块
使用 lsmod
可以获取内核模块起始地址和大小,落入这个区间的内核地址需要减去内核模块基地址,获取偏移地址
- addr2line 同上
- gdb info 首先生成模块可调试文件
-g
编译生成 .o 文件ld -r -d -o hello.ko.debug hello.o
gdb hello.ko.debug
- objdump 同上
应用
调试应用需要打开 CONFIG_DEBUG_USER
以及配置 user_debug=0xff