mcpField
Q
qemu-embedded-simulation

qemu-embedded-simulation

github.com/mohitmishra786测试与质量269310 次安装18 周前更新
代码仓库

关于 qemu-embedded-simulation

面向裸机和 RTOS 固件开发者的 QEMU 指南,介绍机器选择、固件加载、GDB 调试与半主机,并说明 STM32 外设模型的限制。

主要功能

  1. 01选择 QEMU 机器模型
  2. 02加载裸机 ELF 镜像
  3. 03通过 GDB stub 调试
  4. 04配置半主机
  5. 05了解 STM32 模型限制

适用场景

  1. 01无开发板时测试 Cortex-M 固件
  2. 02在 CI 中进行链接与启动冒烟测试
  3. 03连接硬件前单步调试
  4. 04在 virt 上启动裸机 RISC-V

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mohitmishra786/low-level-dev-skills --skill qemu-embedded-simulation

安装后在 Claude Code 中输入/qemu-embedded-simulation确认已加载。

详细介绍

QEMU 嵌入式仿真

用途

指导 Agent 使用 QEMU 进行裸机和 RTOS 固件开发:选择机器、加载 ELF 映像、使用半主机、外围设备模型和 GDB 调试;与面向 Linux 的 skills/virtualization/qemu-kvm 及 skills/kernel-dev/qemu-for-kernel-development 不同。

适用场景

  • 无需开发板即可测试 Cortex-M 固件
  • 对链接脚本和启动代码进行 CI 冒烟测试
  • 在硬件上使用 OpenOCD 前,通过 GDB 单步调试
  • 在 virt 机器上启动 RISC-V

工作流

1. ARM Cortex-M(QEMU STM32 开发板)

QEMU 对部分 STM32 开发板进行了建模(参见 qemu.org STM32 文档):

机器MCU核心
stm32vldiscoverySTM32F100RBT6Cortex-M3
netduino2STM32F205RFT6Cortex-M3
netduinoplus2STM32F405RGT6Cortex-M4F
olimex-stm32-h405STM32F405RGT6Cortex-M4F
# stm32vldiscovery — Cortex-M3 (not F4); match -mcpu to the board
arm-none-eabi-gcc -mcpu=cortex-m3 -T linker.ld -o firmware.elf main.c startup.s
qemu-system-arm \
  -machine stm32vldiscovery \
  -kernel firmware.elf \
  -nographic \
  -serial mon:stdio

根据 QEMU STM32 启动选项,使用 -kernel firmware.bin 或 .elf 启动。

机器列表:qemu-system-arm -machine help。当前 QEMU STM32 机器未对 GPIO、DMA 和 I2C 建模;USART/SPI/ADC/定时器仅部分支持。

2. 通用 ARM virt(Cortex-A 测试)
qemu-system-aarch64 -machine virt -cpu cortex-a53 -m 128M \
  -kernel firmware.elf -nographic
3. RISC-V 裸机
qemu-system-riscv32 -machine virt -nographic \
  -bios none \
  -kernel firmware.elf

-bios none 会在没有 OpenSBI 的情况下从复位向量启动。

4. GDB stub
qemu-system-arm -machine stm32vldiscovery -kernel firmware.elf \
  -S -gdb tcp::3333 -nographic

arm-none-eabi-gdb firmware.elf
(gdb) target remote :3333
(gdb) monitor reset halt
(gdb) load

搭配 skills/embedded/openocd-jtag 用于目标硬件上的工作流。

5. 半主机(若支持)
qemu-system-arm ... -semihosting-config enable=on,target=native

可通过半主机系统调用使用 printf;工具链必须在构建时启用半主机支持。

6. 限制(根据上游文档,针对 QEMU STM32)
注意事项实际情况
QEMU STM32 中没有 GPIO未实现 GPIO 控制器;LED 闪烁测试需要硬件或其他机器
没有 DMA / I2CSTM32 QEMU 模型缺少 DMA 和 I2C
RCC 支持不完整仅 F4 支持 RCC 复位/使能;不支持完整时钟树
MCU 型号假设错误stm32vldiscovery 对应 F100 M3,而非 F407;CPU 标志和链接器内存配置要匹配
时序与芯片实际运行相比并非周期精确

在生产验收前,请在硬件上进行验证。

7. Agent 使用方式
/qemu-embedded-simulation Run STM32VL discovery firmware in QEMU with GDB on port 3333

常见问题

现象原因修复方法
QEMU 立即退出main 已返回在末尾循环或执行 WFI
入口地址错误ELF 未针对该模型进行链接检查 readelf -h 中的入口地址
没有串口输出UART 模型地址错误使用该机器专用的映射或半主机
GDB 无法连接忘记添加 -S添加 -S -gdb tcp::3333
QEMU 中发生 HardFault栈/向量无效修复启动代码;参见 baremetal-startup

相关技能

  • skills/baremetal/baremetal-startup — 向量表和链接脚本
  • skills/baremetal/stm32-baremetal — STM32 布局
  • skills/embedded/openocd-jtag — 硬件调试
  • skills/kernel-dev/qemu-for-kernel-development — 在 QEMU 中运行 Linux 内核
  • skills/platform/riscv-privileged — RISC-V 复位和 virt

评论

支持 Markdown