使用Olimex ARM-USB-OCD适配器在ARMv7上进行远程内核调试

问题描述

我目前正在尝试调试内核。我的目标是在要实现的新syscall中设置一个断点。内核在远程Imx6q板上运行。我已经设置了JTAG调试器,可以将GDB连接到它并暂停执行。

我的问题是调试符号。 我已将这些属性添加到defconfig中:

CONfig_GDB_SCRIPTS=y
CONfig_DEBUG_KERNEL=y
CONfig_RANDOMIZE_BASE=n
CONfig_FRAME_POINTER=y
CONfig_KGDB=y
CONfig_DEBUG_INFO=y

当我开始一个会话时:

(gdb) tar ext :3333
Remote debugging using :3333
warning: No executable has been specified and target does not support
determining executable automatically.  Try using the "file" command.
0xa7780ef0 in ?? ()
(gdb) c
Continuing.

我可以手工附加符号文件,但需要提供一个地址来附加它。

(gdb) add-symbol-file /home/tlavocat/development/android/out/target/product/wandboard_qca/kernel-imx/kernel/sys.o 
The address where /home/tlavocat/development/android/out/target/product/wandboard_qca/kernel-imx/kernel/sys.o has been loaded is missing

我要停止的功能是这个:

wandboard_qca:/ # cat /proc/kallsyms | grep sys_keeper_get_state               
c003e0ac T sys_keeper_get_state

它在kernel / sys.c中实现。

我的问题是,如何正确地将符号附加到正确的地址上?

感谢您的回答

解决方法

我只需要加载内核二进制文件即可。

file .out/target/product/wandboard_qca/kernel-imx/vmlinux

然后连接到远程目标。