**Linux Debugging** ^ Reference | {{:mywiki:linux:linux_debugging_techniques.ppt|}} | ====== 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: 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 [[linux_debugging_with_lauterbach#get_source_code_directory_base|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:kernel_hack.jpg|}}