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

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




更多推荐
所有评论(0)