使用 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)增加了特性和功能的可发现性,使用…...
Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...
