天天看点

Ubuntu下安装STM32调试环境 OpenOCD+JLinkOpenOCD安装和使用Linux版本信息

OpenOCD安装和使用

下载OpenOCD源码

OpenOCD为sourceforge托管的开源项目,项目地址为:https://sourceforge.net/projects/openocd/

找到最新版本下载,本记录使用:openocd-0.10.0.tar.bz2

配置、编译及安装

  1. 解压、进入源码目录下
  2. 执行

    ./configure -help

    查看配置命令及提示,完成基于有别于系统的配置,大多数情况不需要有太大改动
  3. 若提示没有那个文件或目录,执行

    ./bootstrap

    生成配置文件
  4. 执行

    ./configure --enable-jlink

    添加JLink支持,若提示库缺失,根据提示信息安装所需库(在10之后的版本都提示却什么库,以前的版本提示缺少.h文件,建议安装最新版,起码不用按一堆库来试,有能力看源码,看英文手册的人不用管我的建议)
  5. 执行make
  6. 执行sudo make install
  7. 重启使安装的环境变量生效,如果知道具体在哪,请直接运行该文件,如果能告诉我,感激不尽。
  8. 安装成功

启动OpenOCD

  1. 进入根目录执行

    sudo find |grep interface/jlink.cfg

    找到配置文件安装目录(有点慢,如果没更改的话应该在

    /usr/local/share/openocd/scripts/

    下)
  2. target目录中有各种U的基础配置,一般不需要修改,找到自己的型号即可,在interface中找到自己使用的调试器
  3. 将硬件连通后在任意目录下执行

    sudo openocd -f interface/jlink.cfg -f target/stm32f1x.cfg

    开始用JLink调试stm32f1x,看到有一条是

    Info : stm32f1x.cpu: hardware has N breakpoints, N watchpoints

    即进入调试模式,N为硬件断点的数目。若链接不上出现大量错误,大都是硬件或配置问题,在软件配置时就会把绝大部分软件缺失问题扫描到并提示修复方式,但也不完全排除驱动、系统问题,排除错误顺序为,1. 硬件是否连接正常;2. 是否在安装前配置添加该调试器的支持;3. mcu配置文件是否与硬件不匹配(有时速度会不匹配);。

连接到OpenOCD

成功通过Jlink连接到STM32上之后,OpenOCD会监听本机的4444端口。

可以通过telnet连接并控制OpenOCD。

重新启动一个控制台执行

telnet localhost 4444

输入help回车获得命令使用提示

我的脚本

#我不是在root中运行,所以sudo加一个密码的输入S,使用2>/dev/null去除不必要的输出,前提是能确定一定能连上,并放入后台运行。
$echo "密码"|sudo -S openocd -f interface/jlink.cfg -f target/stm32f1x.cfg >/dev/null & 
#之后就可以连接了,不需要两个控制台了,关闭的时候直接使用shutdown同时结束
$telnet localhost 
           

OpenOCD命令使用简易指南

注:<>内是必填项 []内为可选项

基本操作

shutdown

能进入调试就要能退出调试

exit

能进入连接就要能断开连接

halt

系统还在运行咱们就把它先暂停运行

resume

能停下来就要能继续运行

reset

想从头看效果就要复位

reset halt

想从头调试就要复位并中止

flash操作

flash banks

查看flash的bank列表

flash erase_check <bank_id>

查看该bank的写入状态(是否擦除)

flash erase_sector <bank_id> <first_sector_num> <last_sector_num>

擦除指定bank的第first页到last页

flash write_image [erase] [unlock] <filename> [offset [file_type]]

见help。

下载程序

思路是在中止时清除并写flash后复位

1.

halt

2.

flash write_image erase *.hex

请务必将*替换为要下载的文件名,支持大多数格式不仅仅为hex。

3.

reset

断点调试

bp <address> [<asid>]<length> ['hw'|'hw_ctx']

rbp <address>

bp为添加断点,rbp为删除断点

address为断点地址,hw为硬件断点,hw_ctx为软件断点,length为指令集字节长度,stm32是2个字节长,2440是4个字节长,部分MCU拥有多套指令集,长度不固定。

思路是中止MCU后添加断点继续运行。

Linux版本信息

Linux version 4.10.0-38-generic ([email protected]) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4) ) #42~16.04.1-Ubuntu SMP Tue Oct 10 16:32:20 UTC 2017