问题描述
我目前正在尝试调试内核。我的目标是在要实现的新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
然后连接到远程目标。