我已经成功地建立了与我的开发板的JTAG连接和串口连接。我遵循了下面的图表(有点不同)。
我的GDB_client在我的Linux主机上,但是我的OpenOCD在我的windows主机上,他们通过网络使用GDB_server进行通信。它们之间很容易通信,我可以通过我的Linux上的GDB通过JTAG将应用程序加载到我的板上。
这是我的平台规范:
SOC: STM32H743 (Cortex m7 single core -> ARMv7E-M)
Internal Flash: 2MB (only u-boot is in the flash memory)
Board: Waveshare CoreH7XXI dev board
On-board DRAM: 8MB
SDCARD: 1GB (the ROOTFS and Linux kernel are in the SD card)
Bootloader: mainline U-boot
kernel: mainline Linux kernel
Debug Probe: STLink V2
根据本指南:一旦您习惯使用gdb来调试内核,就需要使用gdb直接将内核加载到目标上。最实际的方法是在内核开始时设置一个硬件断点,并使用JTAG复位信号重置您的板。您的引导加载程序将初始化您的板,执行将在内核开始时停止。之后,您可以将内核加载到内存中并运行它。
我将beak点放在内核的起点上,但问题是它不会停止在断点上让我将vmlinux文件加载到我的内存中。
这就是我要做的:
(gdb) file vmlinux
(gdb) target remote 192.168.1.53:8888
(gdb) break __init_begin
(gdb) cont
(gdb) mon reset #perhaps this needs to be done from the openocd telnet session..
Breakpoint 1, 0xc0008000 in stext ()
(gdb) load vmlinux
我也试过了,但是它并没有停在断点上:
(gdb) break *0xD0008000
Breakpoint 9 at 0xd0008000: file arch/arm/kernel/head-nommu.S, line 61.
有时它工作,有时它不会。它似乎在重新设置我的董事会后,我应该立即暂停我的程序使用gdb,并再次恢复它使它工作。为什么会发生这种情况?
发布于 2021-05-31 08:14:30
您试过禁用“kaslr”选项吗?我也试图设置一个断点,但我的从未命中。我试图通过在bootargs中传递'nokaslr‘来禁用它,但这没有生效。我假设它不会生效,因为在目标板(Xilinx Ultrascale+)上,我仍然看到“完全随机化”选项被选中。
我在目标板上使用了cat /proc/sys/kernel/randomize_va_space
。
我不知道这是不是该走的路,但我的直觉说,这个地址错配是断点没有被击中的原因。
https://unix.stackexchange.com/questions/616277
复制相似问题