【问题标题】:Eclipse GDB "init" and "run" settings for ARM LPC1768 using OpenOCD?使用 OpenOCD 的 ARM LPC1768 的 Eclipse GDB“初始化”和“运行”设置?
【发布时间】:2011-12-16 13:12:03
【问题描述】:

我终于figured out 如何让代码在this LPC1768 mini board 上运行,但是现在我正在尝试让调试工作。

我使用的工具链是:Yagarto + Eclipse (Indigo) (w/ GDB Hardware Debugger) + OpenOCD。我的 JTAG 接口是:Bus Blaster V2 板子。

我找到了一个guide,它通过类似的设置,但它用于不同的 JTAG 接口,所以不是很有用。还有关于LPC1768 examplethis post,但gdb 命令不适用于OpenOCD。

此时我确定的唯一命令(用于 init)是 target remote localhost:3333(用于连接到 OpenOCD gdb 服务器)。

我应该在此对话框中使用哪些设置和 gdb 命令?

(忽略“SAM7X256”,只是重新使用上述链接之一的屏幕截图。我使用的是 ARM LPC1768)

另外,我的开发板使用secondary bootloader(用户代码从 0x2000 开始)这一事实是否会影响这些调试设置?

更新:听从 dwelch 的建议,我确实设法让一些基本的 OpenOCD 命令正常工作(reset initmdwmwwload_image 等)。奇怪的“JTAG-DP STICKY”错误与我的 ram 链接器脚本有关,发现 project template for the LPC1758RAM linker script,只需要修改 LPC1768 的内存大小,并且 load_image 工作得很好。

我仍然想知道如何正确配置 eclipse 以进行 GDB 调试。

【问题讨论】:

    标签: eclipse gdb arm cortex-m3 openocd


    【解决方案1】:

    也许一次尝试一步。

    启动 openocd,可能是 -f interface/jlink.cfg -f target/lpc1768.cfg 之类的东西,听起来你可以正常工作。

    第二个 telnet localhost 4444 或任何 windows 命令行(类似的东西)

    在 Telnet 会话中:

    > halt
    > mdw 0x0000
    

    以及类似的东西,以查看您正在与该部分交谈。

    如果您已经编译了一些程序,您可以简单地加载并运行它们,例如,如果您制作了一个仅 ram 的程序(告诉链接器 .text、.data 等都在 0x10000000)那么

    > load_image /path/to/myprog.elf
    > resume 0x10000001
    

    (是的,加 1 使其变得奇数,这是一个拇指处理器不会运行 ARM 指令(lsbit = 0 是手臂模式 lsbit = 1 是拇指模式)。

    重新编译后重新运行:

    > halt
    > load_image /path/to/myprog.elf
    > resume 0x10000001
    

    然后,在基于 ram 的程序显示出生命迹象后,请担心闪烁等问题。

    如果这些都不起作用,那么 gdb 只是在此之上又增加了一层复杂性,并且会使其更难弄清楚。

    就引导加载程序而言,答案取决于您是尝试从 ram 运行还是从程序运行到 rom。如果从 ram 运行,您可以接管系统并占用所有 ram,一些芯片 (stm32) 有一些您可以调用的例程,这些例程需要一些 ram 不受影响,但如果您要接管芯片,您可以拥有所有 ram ,如果它不知道二进制文件(使用elf文件或ihex或srec或几乎任何不是.bin的东西都很好,如果工具支持它),这是一个告诉链接器和调试器的问题。

    如果您要写入闪存,那么您最好确切地知道闪存的哪一部分可能包含引导加载程序,引导加载程序如何将您的代码移交给您的代码,等等,并再次将这些信息告诉链接器和调试器。您可以轻松擦除/删除引导加载程序,具体取决于它在哪里以及您在做什么(这些 lpc 和 st 部件中的许多都有引导加载程序,串行或 USB,它们在一定程度上可以防止偶然错误,但您通常仍然可以擦除它们并如果您不小心,请更换它们。

    【讨论】:

    • 能够使其中一些命令正常工作,但从未使 load_image 正常工作,它只会返回“JTAG-DP STICKY ERROR MEM_AP_CSW 0x23000052”错误。我确实弄乱了 flash write_image 命令并设法以某种方式吹走了引导加载程序,然后将其取回(但又丢失了,呵呵)。
    • 我的“ram”链接器脚本一定有问题,因为我下载了您的 mbed_samples/ebay_board/blinker01 代码,它加载正常,并且在 load_image / resume 0x10000001 时运行良好。我的链接器脚本和 Makefile 在这里:gist.github.com/1322088
    • 我对其他 ram 部分的运气不太好,我想知道是否必须打开某些东西才能使它们工作。使用 arm...objdump 反汇编 elf 文件将显示程序中 0x23000052 处的内容。查看 lpc1768.cfg openocd 配置文件,它在 0x10000000 处指定了一些 ram,但我没有看到 0x23000000 条目,这可能是警告有 jtag 投诉的原因。也许 jtag 拒绝在那里写。
    • 终于让 load_image 工作了,耶!找到了一个带有 RAM 链接器脚本的 LPC1758 项目模板,只需要修改 LPC1768 的内存大小,并且 load_image 工作得很好。 (见我的“更新”)
    • 很高兴听到,如果基本的 openocd 命令不起作用,那么 gdb 也不起作用,所以您可能已经完成了一半。我不使用 gdb 或任何调试器,所以我无法帮助你超越这一点......祝你好运......玩得开心。
    猜你喜欢
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 2013-01-02
    • 2017-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多