0%

Linux Panic 分析定位

根据 Kernel Panic 信息分析定位问题

定位方法

包括内核模块、内核以及应用。

内核

出错地址为内核地址不需要计算偏移,可以直接使用

  1. addr2line
    $ addr2line -f -e vmlinux 0xc062f2a0
    ieee80211_send_deauth_disassoc
    .tmp_kallsyms2.o:?
  2. 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>
  3. objdump
    $ objdump -S -l -z -j .text vmlinux > 1

内核模块

使用 lsmod 可以获取内核模块起始地址和大小,落入这个区间的内核地址需要减去内核模块基地址,获取偏移地址

  1. addr2line 同上
  2. gdb info 首先生成模块可调试文件
    • -g 编译生成 .o 文件
    • ld -r -d -o hello.ko.debug hello.o
    • gdb hello.ko.debug
  3. objdump 同上

应用

调试应用需要打开 CONFIG_DEBUG_USER 以及配置 user_debug=0xff

实例

linux panic 问题定位