gdb+openocd+stlink调试MCU

作者: 罗蓁蓁 | 来源:发表于2021-11-23 17:29 被阅读0次

    1.前言

    当我们遇到问题的时候,可以加打印信息追踪流程,但更有效的方式是:调试。如果你使用的是keil,可以借助stlink或者jlink进行调试。如果你是使用的gnu工具链,硬件支持jlink,那么我们可以借助gdb+jlink的方式进行调试;如果我们硬件支持的是stlink,则可以借助gdb+openocd+stlink进行调试。

    2.使用GDB调试OneOS

    GDB,全称GNU Project debugger,是UNIX及UNIX-like下的强大调试工具,同时也支持对嵌入式系统进行调试。对嵌入式系统进行调试时,是以远程调试的方式进行的,调试环境的软硬件连接如下:

    image

    在上图的结构中,支持嵌入式芯片调试的GDB Server有多款,这里主要介绍OpenOCD和J-Link GDB Server。

    • J-Link GDB Server由SEGGER公司推出,仅支持使用Jlink作为调试适配器进行调试

    • OpenOCD,全称Open On-Chip Debugger,是一款针对嵌入式芯片调试的开源软件,支持市面上大多数的调试适配器,例如stlink、DAPlink、Jlink等。OpenOCD支持GDB查看RTOS线程,OneOS已对其进行了适配。使用OpenOCD作为GDB Server,可以查看OneOS所有线程的调用栈和栈上的临时变量,对于调试,能提供更多的信息

    3.gdb结合stlink调试

    这里以万耦开发板stm32f401-vet-oneos为例演示调试过程,由于OpenOCD配合Jlink使用时,需要将Jlink的驱动切换成通用usb驱动(OpenOCD不支持Jlink的原生驱动,如果需要,可以使用zadig这款开源软件将Jlink驱动切换成WinUSB或libusb),为了方便起见,在使用OpenOCD调试时,调试适配器选择stlink。

    3.1 获取OpenOCD

    下载预编译的Windows版本请点击OpenOCD下载

    3.2 目录结构

    OpenOCD编译后的二进制文件目录结构如下:


    image

    3.2 添加环境变量

    OPENOCD_BIN_PATH="D:\Program\openocd\bin"
    OPENOCD_SCRIPT_PATH="D:\Program\openocd\share\openocd\scripts"
    

    3.3 配置文件oneos.cfg

    在stm32f401-vet-oneos工程目录下创建配置文件oneos.cfg,文件内容如下:

    # this need match your debug adaptor and target device
    source [find interface/stlink-v2.cfg]
    source [find target/stm32f4x.cfg]
    
    # config openocd support OneOS
    $_TARGETNAME configure -rtos oneos
    
    # halt target after gdb attached
    $_TARGETNAME configure -event gdb-attach { halt }
    

    3.4 启动openOCD

    在OneOS-Lite代码根目录运行OneOS-Cube,执行如下命令:

    %OPENOCD_BIN_PATH%\openocd.exe -c "gdb_port 5000" -s %OPENOCD_SCRIPT_PATH% -f .\projects\stm32f401-vet-oneos\oneos.cfg
    

    运行成功后的界面如下,此时OpenOCD已配置完成:


    image

    4 启动gdb调试

    在OneOS-Lite代码根目录下运行OneOS-Cube,执行如下命令运行GDB

    arm-none-eabi-gdb.exe .\out\stm32f401-vet-oneos\oneos.elf
    

    在GDB命令行交互界面中执行如下命令连接GDB Server,其中:5000是GDB Server的tcp端口号,对应上面OpenOCD运行时指定的gdb_port(如果使用J-Link GDB Server,则端口选择上面显示的2331)

    target remote localhost:5000
    

    连接成功后,GDB命令行交互界面如下


    image

    5.开始调试OneOS-Lite

    • 查看当前线程调用栈和临时变量
    image
    • 查看所有正在运行的线程(J-Link GDB Server不支持此命令)
    image
    • 切换到其他线程并查看调用栈与临时变量(J-Link GDB Server不支持此命令)
    image
    • 打断点

    b entry

    • 重新加载

    load

    更多的GDB用法,请查看官方文档。

    6.关注&&联系

    gitee: https://gitee.com/cmcc-oneos/OneOS-Lite

    docs: https://oneos-lite.com/

    摘自:https://os.iot.10086.cn/oneos-doc-2.0/components/debug/OpenOCD/

    相关文章

      网友评论

        本文标题:gdb+openocd+stlink调试MCU

        本文链接:https://www.haomeiwen.com/subject/xggwtrtx.html