Mini2440 调试环境搭建(wsl + vscode + openOCD)
本文介绍了基于WSL2+OpenOCD搭建Mini2440开发板(S3C2440芯片)的调试环境。硬件连接需注意J-Link供电问题,必须外接电源。配置步骤包括:准备OpenOCD配置文件(mini2440.cfg等)、安装J-Link驱动、启动OpenOCD服务器。在VSCode中配置launch.json调试文件,通过GDB连接OpenOCD服务器进行调试。调试过程中需要两次F5操作,第一次初
1.开发环境搭建参照专栏mini2440:Windows + WSL2 (Ubuntu) -Mini2440 开发环境操作手册 -CSDN博客
2.使用流水灯项目中的代码:Mini2440 流水灯实验(wsl+docker)-CSDN博客
3.OpenOCD安装参照mo_zhi_yan的博客:OpenOCD下载和安装教程(附安装包)-CSDN博客
OpenOCD的安装步骤略去,正文只阐述怎么配置调试环境。
硬件准备:J-Link及转接板、friendly arm mini2440开发板(S3C2440芯片)、板载电源线、USB转串口线、USB-A口线
这里有一个有意思的现象,当电源线连接,板子拨到off位或者拔去电源线,直接用jlink供电时蜂鸣器会报警。这是因为只用J-link提供的电压不稳导致的,引脚电平乱飘,从而触发了蜂鸣器。J-Link 的信号脚不是用来当电源用的,电流过大可能烧坏 J-Link 的驱动芯片,所以我们要把电源线连上并且拨到on位。请严格执行“先拔 J-Link,再关板子电源”的操作习惯。
拨到on位后,连线示意图:

一、环境配置
1.准备OpenOCD内mini2440的配置文件:
进入OpenOCD文件安装目录E:\OpenOCD-20250710-0.12.0\share\openocd\scripts
查看board文件夹,搜索mini2440.cfg,位于安装目录:E:\OpenOCD-20250710-0.12.0\share\openocd\scripts\board

查看target文件夹,搜索samsung_s3c2440.cfg ,位于安装目录:E:\OpenOCD-20250710-0.12.0\share\openocd\scripts\target
查看interface文件夹,搜索jlink.cfg,位于安装目录:E:\OpenOCD-20250710-0.12.0\share\openocd\scripts\interface

2.配置J-link驱动
进入此步之前,确保你的硬件已经全部连好。
以管理员身份运行 Zadig
点击菜单栏的 Options -> 勾选 List All Devices
在下拉列表中找到 J-Link(或者是 BULK interface,或者是 Segger J-Link),在WinUSB模式下直接点击Reinstall Driver覆盖之前自己打的segger驱动,并且要关闭相关服务和keil、IAR类似的编译器。

⚠️ 副作用: 当你把驱动换成 WinUSB 后,OpenOCD 可以用了,但是 Keil MDK、IAR 和 Segger 官方工具(J-Link Commander/Flash)将无法识别 J-Link
3.在 Windows 上启动OpenOCD Server
把板子拨到nand重新启动。
进入E:\OpenOCD-20250710-0.12.0\share\openocd\scripts路径
按下 ctrl+L 在地址栏直接输入cmd,cmd弹出页面就是该路径
输入指令:
openocd -f interface/jlink.cfg -f board/mini2440.cfg

不要关闭这个命令行窗口,把它挂在后台,它现在是你的调试服务器。
4.VScode环境配置
打开vscode,并连接到wsl,在项目根目录创建.vscode文件夹,并在文件夹根目录创建launch.json文件,项目使用专栏文章中的流水灯项目,代码依次复制即可:Mini2440 流水灯实验(wsl+docker)-CSDN博客
或者直接下载资源也可以:【免费】mini2440裸机流水灯项目资源资源-CSDN下载

在launch.json中复制以下配置代码,并且保存文件:
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug mini2440 (Final)",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/mini2440.elf",
"cwd": "${workspaceFolder}",
"MIMode": "gdb",
"miDebuggerPath": "/usr/bin/gdb-multiarch",
"targetArchitecture": "arm",
"setupCommands": [
{ "text": "target extended-remote 127.0.0.1:3333" },
{ "text": "file ${workspaceFolder}/build/mini2440.elf" },
{ "text": "monitor reset init" },
{ "text": "monitor mww 0x56000010 0x00155550" },
{ "text": "load" },
{ "text": "break main" },
],
"stopAtEntry": false,
"externalConsole": false,
"logging": {
"engineLogging": true
}
}
]
}
二、开始调试
1.进入调试
确保那个黑色 OpenOCD 窗口还在运行。
在 VS Code 按 F5(或点击左侧调试图标 -> 绿色播放键)。
成功进入调试页面,底部变为橙色,我们设置的是在main中加了断点
再次按下F5进入调试,逐步按下F10可以在板子上明确看到LED灯全亮到全灭,然后再进入流水灯的逻辑依次亮起熄灭,也可以在左侧变量区依次监视变量的变化和寄存器的数值。

2.为什么一次F5不够?
-
刚进入调试时 (State 1):
-
GDB 连接后,通常会停在程序的第一条指令(通常是
0x00000000或_start汇编入口)。 -
此时,Stack Pointer (SP, 堆栈指针) 还没有被初始化,它的值可能是 0 或随机值。
-
变量区为空:因为局部变量是存在栈里的,栈都没准备好,GDB 自然读取不到任何变量。
-
-
按下 F5 后 (State 2):
-
CPU 开始全速运行,跑过了
start.S(启动文件)。 -
汇编代码里有一句
ldr sp, =0x3xxxxxxx(初始化堆栈)。 -
然后跳转到
main函数,触发了我们设置的断点。 -
变量区有数据了:此时 SP 已经指向了正常的 SDRAM 地址,C 语言环境准备就绪,GDB 就能读出数据了。
-
3.为什么要使用OpenOCD?
-
免费且跨平台: OpenOCD 是完全开源和免费的。可以在 Windows、Linux (WSL) 或 macOS 上运行它,无需支付许可证费用。
-
兼容 GNU 生态: 它是 GNU 工具链(GCC/GDB)生态系统中的标准组成部分,与WSL 中使用的
arm-none-eabi-gdb完美配合。 -
可定制性高: 它的所有配置都基于简单的 Tcl 脚本 (
.cfg文件)。当面对像 S3C2440 这种非主流芯片时,可以自己编写或修改配置文件,以支持特定的 JTAG 接口、芯片复位序列或 Flash/SDRAM 初始化。 -
调试器接口: 它可以支持几乎所有主流的低成本或开源调试器,例如 FTDI 芯片、J-Link(部分功能)、ST-Link(被广泛使用)、各种 Wiggler 兼容的 JTAG 适配器等。
-
芯片支持: 它不仅支持现代的 ARM Cortex-M 芯片,还保留了对 ARM7、ARM9 (如 S3C2440) 等老架构的支持。对于mini2440 来说,OpenOCD 可能是少数几个仍然提供可行 JTAG 调试方案的免费工具之一。
4.大功告成
至此我们的现代WSL+OpenOCD调试环境搭建完成。
看得出来这比keil中的调试步骤要难得多,但是遇到小众的芯片keil就没办法了,openocd如果不存在相应的cfg文件大不了就自己写三个cfg,没有什么能难得住我们前进的脚步。
更多推荐

所有评论(0)