使用 QEMU 模拟器运行 FreeRTOS 实时操作系统
文章目录
- QEMU 官网
- QEMU 文档
- QEMU 简介
- QEMU 安装
- QEMU 命令
- 启动虚拟机
- 串口控制台
- 监控命令行
- FreeRTOS
- 安装编译工具
- FreeRTOS 源码
- RISC-V-Qemu-virt_GCC 示例
- 编译 RISC-V-Qemu-virt_GCC
- 启动虚拟机运行 FreeRTOS
QEMU 官网
- https://www.qemu.org/
QEMU 文档
- https://www.qemu.org/docs/master/
QEMU 简介
QEMU(Quick Emulator)是一款开源的虚拟机模拟器和虚拟化工具,它支持多种硬件架构和操作系统。QEMU 可以模拟整个计算机系统的硬件,包括处理器、内存、硬盘、网络接口等,从而使用户能够在不同的硬件环境下运行操作系统和应用程序。
-
多架构支持: QEMU 支持多种硬件架构,包括 x86、ARM、MIPS、PowerPC、SPARC 和 RISC-V 等。这使得用户可以在不同的主机平台上模拟各种计算机系统。
-
灵活的虚拟化模式:
- 用户模式仿真:QEMU 可以在用户模式下模拟不同架构的二进制文件,使得用户可以在一种体系结构上运行另一种体系结构的软件。
- 全系统仿真:在这种模式下,QEMU 模拟整个计算机系统,包括处理器、内存、存储和外围设备。用户可以在虚拟环境中安装和运行完整的操作系统。
- 硬件加速:通过与硬件虚拟化技术(如 Intel VT-x 和 AMD-V)结合,QEMU 可以利用主机系统的硬件加速功能,提高虚拟化性能。
-
快照和迁移: QEMU 支持虚拟机快照功能,用户可以保存虚拟机的当前状态,并在需要时恢复。此外,还支持虚拟机的迁移,即将虚拟机从一个主机迁移到另一个主机。
-
图形界面: QEMU 提供了多种用户界面选项,包括命令行界面和图形用户界面(如 QEMU GUI 和 Virt-Manager)。
-
网络和存储支持: QEMU 提供了丰富的网络和存储选项,可以模拟各种网络设备和存储设备,以及支持通过网络共享和虚拟磁盘文件等功能。
-
开源和社区支持: 作为一个开源项目,QEMU 拥有活跃的开发者社区,用户可以获得免费的技术支持和持续更新的功能。
使用场景:
- 开发和测试:开发人员可以在 QEMU 上测试和调试软件,尤其是在不具备目标硬件的情况下。
- 教育:QEMU 提供了一个实验平台,可以帮助学生和研究人员理解计算机体系结构和操作系统。
- 安全研究:安全研究人员可以在隔离的虚拟环境中分析恶意软件或进行其他安全研究。
QEMU 安装
- QEMU 安装包下载:https://www.qemu.org/download/#macos
注: Mac 环境 Homebrew 方式安装
# 安装 QEMU 虚拟化工具
brew install qemu
QEMU 命令
启动虚拟机
qemu-system-[arch] -hda [disk-image] -m [memory] -smp [cpus] -net [network-options]
- arch:指定架构,例如 x86_64、arm、mips 等。
- -hda [disk-image]:指定虚拟硬盘映像文件。
- -m [memory]:设置虚拟机内存大小,例如 1024 表示 1GB。
- -smp [cpus]:指定虚拟机的 CPU 核心数。
- -net [network-options]:配置网络选项。
串口控制台
qemu-system-[arch] -hda [disk-image] -serial mon:stdio
监控命令行
qemu-system-[arch] -hda [disk-image] -monitor stdio
FreeRTOS

FreeRTOS 是一款市场领先的嵌入式系统, RTOS 支持 40 多种处理器架构,内存占用小,执行时间快,具有尖端的 RTOS 功能和库,包括对称多处理 (SMP)、具有 IPv6 支持的线程安全 TCP 堆栈以及与云服务的无缝集成。它是开源的,并得到了积极的支持和维护。
- Github: https://github.com/FreeRTOS/FreeRTOS
- 官方文档: https://www.freertos.org/zh-cn-cmn-s
安装编译工具
# 安装 GCC 编译器
brew install gcc
# 安装 ARM Cortex-M 处理器的 GCC 编译器工具链
brew install gcc-arm-none-eabi
# 通过 Homebrew Cask 安装 GCC ARM Embedded 工具链
brew install --cask gcc-arm-embedded
- 安装 RISC-V 工具链
# 提供 RISC-V 相关的软件包和工具链
brew tap riscv-software-src/riscv
# 安装 RISC-V 相关的工具链和工具
brew install riscv-tools
注: riscv-tools 安装过程慢。
FreeRTOS 源码
# 克隆 FreeRTOS 项目及其所有子模块
git clone https://github.com/FreeRTOS/FreeRTOS.git --recurse-submodules
- 进入源码目录
cd FreeRTOS

RISC-V-Qemu-virt_GCC 示例
注: 该示例用于 RISC-V 架构的交叉编译工具链,特别适用于 QEMU 虚拟环境 中进行开发和测试。这个工具链结合了 GCC 编译器和 QEMU 模拟器,以支持 RISC-V 架构的开发工作。
cd FreeRTOS/Demo/RISC-V-Qemu-virt_GCC

编译 RISC-V-Qemu-virt_GCC
make

- 编译成功输出 RTOSDemo.axf 文件。

启动虚拟机运行 FreeRTOS
启动 QEMU 模拟器来运行编译后的 RISC-V 程序
qemu-system-riscv32 -nographic -machine virt \
-bios none \
-smp 4 \
-kernel ./build/RTOSDemo.axf

- qemu-system-riscv32: 启动 QEMU 的 RISC-V 32-bit 模拟器。
- -nographic: 不使用图形界面,所有输出和输入都在终端中进行。
- -machine virt: 使用 QEMU 的虚拟 RISC-V 机器模型。
- -bios none: 不使用 BIOS,适用于裸机或嵌入式系统。
- -smp 4: 分配 4 个 CPU 核心给虚拟机。
- -kernel ./build/RTOSDemo.axf: 加载并启动指定的内核镜像(RTOSDemo.axf)。
- 使用 -monitor 选项允许你启用 QEMU 的监控控制台,你可以在监控控制台中查看 QEMU 的运行状态,并进行一些控制操作。
qemu-system-riscv32 -machine virt \
-bios none \
-smp 4 \
-kernel ./build/RTOSDemo.axf -monitor stdio
- 使用 -serial 选项允许你将 QEMU 的串行输出重定向到文件或其他终端。这对于捕获程序输出或调试信息非常有用。
qemu-system-riscv32 -machine virt \
-bios none \
-smp 4 \
-kernel ./build/RTOSDemo.axf -serial mon:stdio

相关文章:
使用 QEMU 模拟器运行 FreeRTOS 实时操作系统
文章目录 QEMU 官网QEMU 文档QEMU 简介QEMU 安装QEMU 命令启动虚拟机串口控制台监控命令行 FreeRTOS安装编译工具FreeRTOS 源码RISC-V-Qemu-virt_GCC 示例编译 RISC-V-Qemu-virt_GCC启动虚拟机运行 FreeRTOS QEMU 官网 https://www.qemu.org/ QEMU 文档 https://www.qemu.or…...
Oracle EBS中AR模块的财务流程概览
应收账款 (AR) 模块是Oracle E-Business Suite (EBS) 中另一个重要的财务管理模块,主要用于管理企业销售过程中的账款回收。下面是AR模块中的一些关键财务流程及其详细说明: 1. 销售订单管理 创建销售订单:当客户下单时,销售人员…...
Minitab 的直方图结果分析解释
Minitab 的直方图结果分析解释 步骤 1:评估关键特征 检查分布的尖峰和散布。评估样本数量对直方图外观的影响。 标识尖峰(即,条的最高聚类): 尖峰表示样本中最常见的值。评估样本的散布以了解数据的变异程度。例如…...
AgentRE:用智能体框架提升知识图谱构建效果,重点是开源!
发布时间:2024 年 09 月 13 日 Agent应用 AgentRE: An Agent-Based Framework for Navigating Complex Information Landscapes in Relation Extraction 在复杂场景中,关系抽取 (RE) 因关系类型多样和实体间关系模糊而挑战重重,影响了传统 “…...
力扣题解2390
大家好,欢迎来到无限大的频道。 今日继续给大家带来力扣题解。 题目描述(中等): 从字符串中移除星号 给你一个包含若干星号 * 的字符串 s 。 在一步操作中,你可以: 选中 s 中的一个星号。 移除星号…...
用Python获取PDF页面的大小、方向和旋转角度
在文档管理和自动化领域,了解PDF文档的内在属性(如页面大小、方向和旋转角度)对于确保一致的文档处理和布局保真度至关重要。这些属性在内容重用、归档以及PDF无缝集成到网络环境或其他数字工作流程中起着关键作用,因为它们直接影…...
【即时通讯】轮询方式实现
技术栈 LayUI、jQuery实现前端效果。django4.2、django-ninja实现后端接口。 代码仓 - 后端 代码仓 - 前端 实现功能 首次访问页面并发送消息时需要设置昵称发送内容为空时要提示用户不能发送空消息前端定时获取消息,然后展示在页面上。 效果展示 首次发送需要…...
Flock 明牌空投教程
FLock 旨在为人工智能构建一个去中心化的隐私保护解决方案。FLock提出了一项名为联合学习区块(简称 FLocks)的研究计划,该计划使用区块链作为数据持有者之间的协调平台来进行机器学习,同时数据保持本地和隐私。通过用区块链取代收…...
项目内部调用的远程接口开发
编写一个项目内部调用的远程接口通常是为了在分布式系统或者微服务架构中,实现各个服务之间的通信和数据交换。这样的远程接口专门用于服务之间的调用,而不是直接暴露给外部用户或前端。 项目内部的远程接口统一放在api工程 首先进入api编写接口&#x…...
影响IP代理池稳定性的因素有哪些?
IP代理池在提供网络服务时,稳定性是一项决定性指标。多个外部和内部因素可能会影响这个稳定性,因此深入理解这些影响因素,可以帮助优化IP代理池的性能与服务质量。 1. IP来源质量 纯净度与使用频次:优质的IP来源常常被描述为纯净…...
基于Prometheus和Grafana的现代服务器监控体系构建
构建一个基于 Prometheus 和 Grafana 的现代服务器监控体系涉及多个步骤。以下是大体的流程和步骤说明: 1. Prometheus 监控系统 Prometheus 是一个开源的系统监控和报警工具,专门设计用于抓取时间序列数据。 1.1 Prometheus 的安装 Docker 安装 Prom…...
原生 input 中的 “type=file“ 上传文件
目标:实现文件上传功能 原型图: HTML部分: <div class"invoice-item"><div class"invoice-title">增值税专用发票</div><div class"invoice-box"><el-form-item label"标准…...
【Unity新闻】Unity的产品命名变化
快速回顾一下Unity产品命名的调整。 在2023年 Unity就宣布版本命名的变化,将使用Unity 6作为最新版本的命名。 具体的规则,在论坛里进行了说明。 以后正式的LTS版本就是Unity 6,将在2024年末发布。 而不管是之前的Runtime费还是今天的费用…...
《PostMan(一):配置全局令牌》
文章目录 一、配置全局token1、设置2、添加全局3、添加全局变量名称4、选中全局,并查看5、添加赋值脚本6、配置令牌取值7、即可成功获取用户信息 一、配置全局token 1、设置 2、添加全局 3、添加全局变量名称 4、选中全局,并查看 5、添加赋值脚本 // 把…...
如何理解Configurational entropy
Configurational entropy 是热力学和统计力学中的一个重要概念,它描述的是系统中由于其微观状态排列(即配置)导致的不确定性或混乱程度。不同于热力学中的热熵(thermal entropy),它特指那些与系统中的粒子、…...
H5端接入萤石监控
官方文档 EZOPEN协议 下滑至-平台架构 web/h5端使用文档 <template><div :id"video-container${index}${index2}" class"w-full bg-black"></div> </template><script>export default {data() {return {EZVIZAToken:…...
SSD1306 OLED显示屏驱动方案简介
SSD1306是一种常见的单色OLED(有机发光二极管)显示屏驱动芯片。以下从它的基本特点、工作原理和应用领域进行详细介绍: 一、基本特点 1. 尺寸与分辨率: SSD1306芯片支持多种尺寸的OLED显示屏,常见的有0.96寸、1.3寸等。不同尺寸的屏幕具有不…...
React18快速入门
需要先安装并配置React相关的工具和插件 下载安装Node.js,这里以MacOS Node.js v22.6.0为例 终端命令行检查是否安装成功 node -v npm -vNode.js快速入门 npm设置镜像源 #设置为阿里镜像源 npm config set registry https://registry.npmmirror.com #查看是否生…...
Day11笔记-字典基本使用系统功能字典推导式
二、字典【重点掌握】 1.概念 列表和元组的使用缺点:当存储的数据要动态添加、删除的时候,我们一般使用列表,但是列表有时会遇到一些麻烦,定位元素比较麻烦 # 一个列表/元组保存5个学生的成绩, score_list [66,100,70,78,99] sc…...
Ribbon (WPF)
Ribbon (WPF) 在本文中主要包含以下内容: Ribbon组件和功能应用程序菜单快速访问工具栏增强的工具提示 Ribbon是一个命令栏,它将应用程序的功能组织到应用程序窗口顶部的一系列选项卡中。Ribbon用户界面(UI)增加了特性和功能的可发现性,使用…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...
Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
