QEMU学STM32
一、qemu的STM32虚拟化环境
二、Demo Makefile分析
文章目录
- QEMU学STM32
- 前言
- 一、gdb调试嵌入式程序
- 二、配置VSCode
- 总结
前言
前面经过努力搭建了QEMU的STM32的虚拟化环境并运行了Demo。同时,分析了Makefile其实就可以开发和学习STM32了。但是命令行加gdb调试程序感觉不太方便,工欲善其事必先利其器。今天就来搞一下VSCode调试。
一、gdb调试嵌入式程序
认真读一下Demo程序的Makefile,我惊喜的发现Demo作者提供了QEMU
运行程序的调试接口。
# QEMU debug targets
$(QEMU_DBG_TARGETS): %_QEMUDBG : %_ALL
-killall -q qemu-system-arm
$(QEMU_ARM_DIR)qemu-system-arm -M stm32-p103 -gdb tcp::3333 -S -kernel demos/$*/main.bin
$(QEMU_DBG_PTY_TARGETS): %_QEMUDBG_PTY : %_ALL
-killall -q qemu-system-arm
$(QEMU_ARM_DIR)qemu-system-arm -M stm32-p103 -gdb tcp::3333 -S -kernel demos/$*/main.bin -serial pty
$(QEMU_DBG_TEL_TARGETS): %_QEMUDBG_TEL : %_ALL
-killall -q qemu-system-arm
$(QEMU_ARM_DIR)qemu-system-arm -M stm32-p103 -gdb tcp::3333 -S -kernel demos/$*/main.bin -serial tcp::7777,server
我们发现gdb的调试端口是tcp::3333,我们运行程序后,在命令行只需要通过gdb从自己的电脑3333端口连接调试即可,可以如下图尝试一下:
进入后运行
输入
target remote localhost:3333
就可以开始调试了,但是打端点和运行需要输入命令。我们已经习惯了在IDE中用鼠标的方式调试了,所以我搜索了一下,发现VSCode可以做到这一点。
二、配置VSCode
时间有限,ubunut安装VSCode的方法就不在这里说了,这里直接切入主题。
首先打开VSCode,将工作目录切到当前工程目录,然后按CTRL+SHIFT+D进入调试模式如下图
在lannch.json文件中添加如下内容,也可以直接点添加配置
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) 启动",
"type": "cppdbg",
"request": "launch",
//我们的的STM32程序的路径,也可以是绝对路径
"program": "${workspaceFolder}/demos/systick/main.elf",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
//你的arm-none-eabi-gdb的安装路径
"miDebuggerPath": "/usr/bin/arm-none-eabi-gdb",
//在本机调试一般是localhost:端口号
//如果程序运行在另一台电脑或者开发板(在嵌入式linux调试中经常遇到)可以是
//ip:端口号,例如:192.168.1.123:3333
"miDebuggerServerAddress": "localhost:3333",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
配置好之后就可以运行调试了。
首先在终端运行下面命令启动QEMU加载程序:
make systick_QEMUDBG_PTY
然后点击调试按钮开始调试
可以全速运行也可以单步调试,在代码前单击就可以添加断点,使用起来非常方便。
总结
我是一个喜欢折腾的人,奈何工作真的很忙没有时间写的很详细,这里只做抛砖引玉,写的不是很详细。现在运行环境和开发调试工具都已经就绪,下一步我将记录我学习ARM汇编以及Cortex-M3的过程。最终我希望可以实现一个简单嵌入式操作系统,能够实现多任务的调度,希望感兴趣的同学一起学习。当然,实现操作系统这件事比我想象的难一点,我正在学习和进步。