环境:Ubuntu22.4
软件:OpenOCD(Open On-Chip Debugger)
-
openocd 的安装
使用apt直接安装
$ sudo apt-get install openocd
-
openocd 的使用
openocd运行需要配置调试器的配置文件和目标芯片的配置文件,下面我用的是stlink-v2接口和 stm32f0discovery芯片型号
$ openocd -f /usr/share/openocd/scripts/interface/stlink-v2.cfg -f /usr/share/openocd/scripts/board/stm32f0discovery.cfg
openocd 运行之后,使用 telnet 连接本地端口4444与芯片交互,然后使用help命令查看芯片 支持的命令,一般提取固件使用 demp_image 命令
-
连接开发板
下载相应的芯片手册,本文章用的STM32F0discovery型号芯片,在手册中找到调试接口,这 个芯片的调试接口 STLINK-V2 此芯片可以通过USB转Mini连接线使开发板直接连接到虚拟机
-
查看芯片手册找到固件位置
根据上图手册可知,固件的起始地址 0x8000000,大小 0x10000
-
提取固件
首先运行 openocd,运行命令如下框,连接成功会有如下图输出
$ openocd -f /usr/share/openocd/scripts/interface/stlink-v2.cfg -f /usr/share/openocd/scripts/board/stm32f0discovery.cfg
其次使用 telnet 连接 localhost:4444 端口,命令如下
# telnet localhost 4444
如下输出信息代表成功:
然后输入命令 halt 中断代码执行
> halt
最后使用 dump_image 导出固件的文件名(文件名可以更改) 起始地址 导出的数据长度 来提 取固件(固件的起始 地址和大小上一步已经获取到了)
> dump_image flash.bin 0x8000000 0x10000
如下输出信息代表成功提取固件
不是所有MCU都能以此提取固件,不少厂商开启了代码都保护功能(为防止固件被提取而设 计的),以下是STM32F0discovery手册中关于代码读保护的介绍