我正在使用arm-none-eabi工具链在Ubuntu linux下使用Segger J-link在Beaglebone Black上进行裸机编程。
所以现在我每次都会得到错误No source aviailable for“0x ....”
当我暂停骨骼时,我会在反汇编中跟随:
b6e93ce1: inc %ebx
b6e93ce2: fdivl -0x4922eb40(%esi)
b6e93ce8: call 0xdfa019f7
b6e93ced: add %ch,%bl
b6e93cef: mov $0x50,%dh
b6e93cf1: add $0xdd,%al
b6e93cf3: mov $0xa4,%dh
b6e93cf5: or %ebp,%ebx
b6e93cf7: mov $0xcc,%dh
b6e93cf9: inc %eax
b6e93cfa: fnsave -0x4922bf2c(%esi)
b6e93d00: add %al,(%eax)
b6e93d02: add %al,(%eax)
b6e93d04: add %al,(%eax)
b6e93d06: add %al,(%eax)
b6e93d08: js 0xb6e93d4c
b6e93d0a: fnsave -0x4922bb54(%esi)
b6e93d10: xor $0x42,%al
b6e93d12: fnsave -0x4922cfc0(%esi)
b6e93d18: mov $0x42,%ah
b6e93d1a: fnsave -0x4922cf98(%esi)
b6e93d20: cmp $0x31,%al
b6e93d22: fnsave -0x4922b92c(%esi)
b6e93d28: xorb $0xdd,(%edx)
b6e93d2b: mov $0xe0,%dh
b6e93d2d: xor %ebx,%ebp
b6e93d2f: mov $0xf0,%dh
当我开始调试程序时,J-Link重新启动了骨骼,但是linux启动了,而不是我的程序。
答案 0 :(得分:0)
这里可能有几个问题,但最严重的是你使用的是针对英特尔处理器的gdb版本:ebx,esi和朋友是英特尔32位寄存器。
你必须使用arm-none-eabi-gdb,而不是Ubuntu附带的gdb。
避免混淆的一种简单方法是在脚本中明确地使用arm-none-eabi-gcc,arm-none-eabi-as,arm-none-eabi-ld和朋友。
J-Links附带了一个gdb服务器软件,它充当GDB和JTAG硬件之间的中介。 gdb-server运行后,您可以启动调试会话,假设您使用的是与目标处理器匹配的GDB调试器版本。
这显然不是你的情况,因为你的反汇编代码看起来非常像x86汇编语言代码。这让我觉得你正在使用为x86目标编译的GDB可执行文件。因此,您确实需要编译一个GDB版本以用于ARM目标。
您可以在Linaro工具链的bin目录中找到适合您需要的版本,适用于Windows或Linux。它的名字是arm-none-eabi-gdb.exe(Windows)或arm-none-eabi-gdb(Linux)。