您的位置:首页 > 运维架构

Ubuntu下安装STM32调试环境 OpenOCD+JLink

2017-11-18 16:55 344 查看

OpenOCD安装和使用

下载OpenOCD源码

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

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

配置、编译及安装

解压、进入源码目录下

执行
./configure -help
查看配置命令及提示,完成基于有别于系统的配置,大多数情况不需要有太大改动

若提示没有那个文件或目录,执行
./bootstrap
生成配置文件

执行
./configure --enable-jlink
添加JLink支持,若提示库缺失,根据提示信息安装所需库(在10之后的版本都提示却什么库,以前的版本提示缺少.h文件,建议安装最新版,起码不用按一堆库来试,有能力看源码,看英文手册的人不用管我的建议)

执行make

执行sudo make install

重启使安装的环境变量生效,如果知道具体在哪,请直接运行该文件,如果能告诉我,感激不尽。

安装成功

启动OpenOCD

进入根目录执行
sudo find |grep interface/jlink.cfg
找到配置文件安装目录(有点慢,如果没更改的话应该在
/usr/local/share/openocd/scripts/
下)

target目录中有各种U的基础配置,一般不需要修改,找到自己的型号即可,在interface中找到自己使用的调试器

将硬件连通后在任意目录下执行
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 2>/dev/null &
#之后就可以连接了,不需要两个控制台了,关闭的时候直接使用shutdown同时结束
$telnet localhost 4444


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 (buildd@lgw01-amd64-059) (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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: