qemu模拟单片机

news/2025/10/11 0:54:05/文章来源:https://www.cnblogs.com/jeason1997/p/19134122

ESP32

乐鑫官方移植的qemu工程:espressif/qemu: Fork of QEMU with Espressif patches. See Wiki for details.

官方使用说明:esp-toolchain-docs/qemu/README.md at main · espressif/esp-toolchain-docs

目前支持ESP32,EPS32C3,ESP32S3,功能还不错,支持多核、PSRAM、SD、GPIO等,I2C、SPI等不支持(但应该可以通过GPIO软件模拟来实现)

下面以ESP32S3为例:

# 安装依赖
sudo apt install ninja-build# 克隆工程
git clone https://github.com/espressif/qemu.git# 配置qemu
## xtensa芯片的配置(ESP32 ESP32S3)
./configure --target-list=xtensa-softmmu \
--enable-gcrypt \
--enable-slirp \
--enable-debug \
--enable-sdl \
--disable-strip --disable-user \
--disable-capstone --disable-vnc \
--disable-gtk
## riscv芯片的配置(ESP32C3)
./configure --target-list=riscv32-softmmu \
--enable-gcrypt \
--enable-slirp \
--enable-debug \
--enable-sdl \
--disable-strip --disable-user \
--disable-capstone --disable-vnc \
--disable-gtk# 编译
ninja -C build# 运行
build/qemu-system-xtensa -nographic \-machine esp32s3 \-drive file=固件.bin,if=mtd,format=raw \-global driver=ssi_psram,property=is_octal,value=true \-m 8 \-nic user,model=open_eth
## 参数说明
-drive file=xx.bin 固件路径,注,flash貌似不支持qio模式,只能dio
if=mtd告诉 QEMU:“把这个文件当作 ESP32S3 的外部 Flash 芯片来用”
format=raw告诉 QEMU:“这个文件是纯二进制,直接按字节读取并写入模拟的 Flash 芯片即可”
-m 8 使用PSRAM,大小为8M,如果不使用PSRAM,不加这个
-global driver=ssi_psram,property=is_octal,value=true   使用OPI方式的PSRAM(默认是QSPI)
-nic user,model=open_eth 开启网络# 合并固件
## qemu貌似不支持单独加载某个分区,只能将整个Flash加载进去,所以如果编译生成的是多个文件(如引导,分区表,主程序等等),需要将它们合并成一个
esptool --chip esp32s3 merge-bin -o esp32s3_full_16M_flash.bin \0x00000000  bootloader.bin \0x00008000  partition-table.bin \0x00010000  network_adapter.bin \0x000b0000  etc.jffs2 \0x00120000  xipImage \0x00600000  rootfs.cramfs \--pad-to-size 16MB \--flash-mode dio
## qemu只能支持完整的flash文件,所以像zephyr跟micropython这种编译后会自动帮你合并成一个文件,但没有填满整个falsh空间的固件,加载后也识别不了,手动填充满flash空间
esptool --chip esp32s3 merge-bin -o micropython.bin \0x00000000 ESP32_GENERIC_S3-20250911-v1.26.1.bin \--pad-to-size 16MB
esptool --chip esp32s3 merge-bin -o zephyr_8M.bin \0x00000000 build/zephyr.bin \--pad-to-size 8MB

目前只有 jeason1997/esp32s3-rv32ima-arduino 这个Arduino Linux 的程序能成功执行,其他的大多运行个开头就卡住了,原因未知

image

 

 

RP2040

工程路径:ME-IRL/qemu-rp2040: RP2040 support for QEMU. 

这个工程多年未更新,应该是废弃了,不过无妨,RP2040有一个rp2040js的模拟器,更好用

 

TODO

研究怎么读取运行的qemu的gpio信息

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/934493.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RAG-检索增强生成

检索增强生成(Retrieval-Augmented Generation, RAG)是近年来深度学习领域的重要技术突破,旨在解决大语言模型(LLM)在知识更新、事实准确性以及领域专业化方面的局限性。本文将从核心架构、功能实现、实践规范到高…

“猴子补丁”(monkey patch)跟猴子有关吗?

“猴子补丁”(monkey patch)指的是使函数名指向另一个函数。 这个名字里的“猴子”(monkey)和真实的动物猴子没有任何生物学或实体关联,它是编程领域的一个形象比喻,名字的由来与“猴子”的俚语含义有关。 为什么…

Yapi 使用docker在cenos7上部署教程与基本使用

✅ 前提条件 确保你已经完成以下准备:CentOS 7 系统已安装 Docker(未安装请先安装)拥有管理员权限(root 或 sudo)1、安装mongo数据库# 拉取mongo镜像,有本地镜像包可以直接导入 docker pull mongo # 安装mongo数…

C语言vsC++

一、核心区别设计理念C 语言:面向过程(Procedure-Oriented),以函数和数据结构为核心,强调算法和步骤的实现,关注 “怎么做”。 C++:基于 C 语言扩展而来,支持面向对象编程(Object-Oriented,OO),引入类、对…

20251010 之所思 - 人生如梦

20251010 之所思这两天想的事情有点多,有点焦虑,因为刚刚升职,部门的软件需要管理起来,已经不再仅仅管理自己现在的一个小组,今天看了一下软件的人数,数量已经到了122人,这是一个很庞大的队伍,如何管理好,心里…

2025.10.10

今天学生会开会导致十点没有回到宿舍 今天一节英语课,单词背诵情况不好,以后会加强 尝试轻食餐,不好吃

个人书单-从心流出发,学习积极心理学

从“心流”出发,构建你的积极心理学知识体系 | 专题书单 你是否曾有过这样的体验:在全神贯注地工作、运动或创作时,忘记了时间的流逝,内心充满了一种纯净而高效的愉悦感? 这就是米哈里契克森米哈赖所描述的 “心流…

等号(=)在C语言和python中有什么区别?

等号(=)在C语言和python中有什么区别? 等号(=)在 C 语言和 Python 中虽然核心功能都是“赋值”,但由于两种语言的设计理念(静态类型 vs 动态类型、编译型 vs 解释型)存在根本差异,= 的行为、特性和使用场景有…

AI元人文(十四)之价值共生篇:再论物物交换——作为价值共生基础的元协议

AI元人文(十四)之价值共生篇:再论物物交换——作为价值共生基础的元协议 文 / 岐金兰 摘要: 本文是对前文《AI元人文(十四):物物交换——论跨领域价值协商的元协议》提出的“物物交换”元协议的深化探讨。文章将…

4.布局系统

Aquarius 开发框架旨在帮助独立开发者和中小型团队,完成 iOS App 的快速实现与迭代。使用框架开发将给你带来简单、高效、易维护的编程体验。大家好,我是K哥。一名独立开发者,同时也是Swift开发框架【Aquarius】的作…

虚拟环境QA

Dingxingdi: 我使用conda激活虚拟环境之后,就可以像往常一样使用命令了吗?不需要在命令前面加一个conda吗? GitHub Copilot: 可以直接像平常一样运行命令,不需要在命令前加 conda。激活环境(例如 conda activate …

提升高度的网站

真相查询类Snopes https://www.snopes.comWikipedia(英文) https://en.wikipedia.org全球时事类 3. Foreign Affairs https://www.foreignaffairs.comBrookings https://www.brookings.edu课程学习类 5. Open Yale C…

day009

今日完成:css页面的格式排布设置,页面的字体颜色设置有了一定的了解. 明日完成:css,html 遇到问题:无

java基础2-运算符

运算符:对字面量或者变量进行操作的符号 表达式:用运算符把字面量或者变量连接起来,符合java语法的式子就可以成为表达式。 1.算数运算符:int c = a + b; +:是运算符,并且为算数运算符; a + b 是表达式,由于+时…

HTTP OPTIONS 方法详解:从原理到实践

HTTP OPTIONS 方法详解:从原理到实践 本文深入剖析 HTTP OPTIONS 方法的核心作用、CORS 预检机制及实际应用场景,帮助开发者彻底解决跨域问题 一、OPTIONS 方法概述 1.1 基本定义 OPTIONS 是 HTTP/1.1 协议定义的请求…

详解 `a, b = b, a + b`:执行逻辑、常见误区与赋值符号辨析

详解 a, b = b, a + b:执行逻辑、常见误区与赋值符号辨析 在 Python 中,a, b = b, a + b 是一句看似简单却暗藏玄机的代码。它广泛用于斐波那契数列生成、变量交换等场景,但许多开发者对其执行逻辑存在误解,甚至会…

xdown 全能下载

官网 https://xdown.org/作者:mohistH 出处:https://www.cnblogs.com/pandamohist/ 本文版权归作者和博客园共有,谢绝一切形式的转载,否则将追究法律责任。

2025.10.10 - 20243867孙堃2405

又是阴雨绵绵的一天,今天上了英语提高,我会了更多的语法

密码系统设计

20231313 张景云《密码系统设计》第四周预习AI对内容的总结 C语言第五章:结构、联合与位字段学习总结 本章围绕C语言中处理复杂数据的三种核心机制——结构(struct)、联合(union)与位字段(bitfield)展开,旨在解…