User Tools

Site Tools


mywiki:linux:linux_debugging_with_lauterbach

Linux Debugging

Linux Debugging with LauterBach

Basic requirement

In order to support c source code level debugging, it is a must to enable debugging option during compile

Get source code directory base

    mips-openwrt-linux-objdump -g vmlinux | grep -i DW_AT_comp_dir | grep -i indirect |  grep '\/'

Its output is like:

    <bb2043>   DW_AT_comp_dir : (indirect string, offset: 0x171): /disk/fs1/tmp2/openwrt/core/kernel_tree

Discover entry point in ELF

  • Discover vmlinux entry point
     mips-openwrt-linux-objdump -t vmlinux | grep -w "_text"

Its output in my setup: 60020000 g .text 00000000 _text

  • Discover kernel_entry
    mips-openwrt-linux-objdump -f vmlinux

Its output in my setup: start address 0x6002df00

Generate system.map

    mips-openwrt-linux-nm -n vmlinux | grep -v '\( [aNUw] \)\|\(__crc_\)\|\( \$[adt]\)' > System.map

Get one symbol's address

    mips-openwrt-linux-objdump -t vmlinux | grep dp_xmit

Lauterbach/Debugger

Load symbol from linux PC via networking

Suppose below working environment:

Linux Compilation folder via method /disk/fs1/tmp2/shaoguoh/project/ugw61_grx500/openwrt/core/kernel_tree
vmlinux folder /disk/fs1/tmp2/shaoguoh/project/ugw61_grx500/openwrt/core/kernel_tree
samba mapping folder to windows X:\tmp2\shaoguoh\project\ugw61_grx500\openwrt\core\kernel_tree

Lauterbach command:

  d.load.elf "X:\tmp2\shaoguoh\project\ugw61_grx500\openwrt\core\kernel_tree\vmlinux" /strippart "/disk/fs1/tmp2" /path "X:\tmp2" /nocode

Note:

  • /strippart : remove the directory prefix in the elf's debugging source file's
  • /path: change to samba folder
  • /nocode: don't load code, but symbol only

Example:

If the location of one file in vmlinux debugging as below:

  /disk/fs1/tmp2/shaoguoh/project/ugw61_grx500/openwrt/core/kernel_tree/t.c

After /strippart “/disk/fs1/tmp2”, ie, strip the prefix as specified here, it become:

  shaoguoh/project/ugw61_grx500/openwrt/core/kernel_tree/t.c

After /path “X:\tmp2”, ie, add prefix as specified here, it become:

  X:\tmp2\shaoguoh/project/ugw61_grx500/openwrt/core/kernel_tree/t.c    

With this folder, now debugger can access this file via samba from windows

Linux Kernel Debugging Tools

Enable kernel debug to detection lock/context issue

In openwrt/core, run: make kernel_menuconfig In kernel_hack, enable below items:

mywiki/linux/linux_debugging_with_lauterbach.txt · Last modified: by 127.0.0.1