当前位置: 首页 > news >正文

使用 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“ 上传文件

目标&#xff1a;实现文件上传功能 原型图&#xff1a; HTML部分&#xff1a; <div class"invoice-item"><div class"invoice-title">增值税专用发票</div><div class"invoice-box"><el-form-item label"标准…...

【Unity新闻】Unity的产品命名变化

快速回顾一下Unity产品命名的调整。 在2023年 Unity就宣布版本命名的变化&#xff0c;将使用Unity 6作为最新版本的命名。 具体的规则&#xff0c;在论坛里进行了说明。 以后正式的LTS版本就是Unity 6&#xff0c;将在2024年末发布。 而不管是之前的Runtime费还是今天的费用…...

《PostMan(一):配置全局令牌》

文章目录 一、配置全局token1、设置2、添加全局3、添加全局变量名称4、选中全局&#xff0c;并查看5、添加赋值脚本6、配置令牌取值7、即可成功获取用户信息 一、配置全局token 1、设置 2、添加全局 3、添加全局变量名称 4、选中全局&#xff0c;并查看 5、添加赋值脚本 // 把…...

如何理解Configurational entropy

Configurational entropy 是热力学和统计力学中的一个重要概念&#xff0c;它描述的是系统中由于其微观状态排列&#xff08;即配置&#xff09;导致的不确定性或混乱程度。不同于热力学中的热熵&#xff08;thermal entropy&#xff09;&#xff0c;它特指那些与系统中的粒子、…...

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(有机发光二极管)显示屏驱动芯片。以下从它的基本特点、工作原理和应用领域进行详细介绍&#xff1a; 一、基本特点 1. 尺寸与分辨率&#xff1a; SSD1306芯片支持多种尺寸的OLED显示屏&#xff0c;常见的有0.96寸、1.3寸等。不同尺寸的屏幕具有不…...

React18快速入门

需要先安装并配置React相关的工具和插件 下载安装Node.js&#xff0c;这里以MacOS Node.js v22.6.0为例 终端命令行检查是否安装成功 node -v npm -vNode.js快速入门 npm设置镜像源 #设置为阿里镜像源 npm config set registry https://registry.npmmirror.com #查看是否生…...

Day11笔记-字典基本使用系统功能字典推导式

二、字典【重点掌握】 1.概念 列表和元组的使用缺点&#xff1a;当存储的数据要动态添加、删除的时候&#xff0c;我们一般使用列表&#xff0c;但是列表有时会遇到一些麻烦,定位元素比较麻烦 # 一个列表/元组保存5个学生的成绩&#xff0c; score_list [66,100,70,78,99] sc…...

Ribbon (WPF)

Ribbon (WPF) 在本文中主要包含以下内容&#xff1a; Ribbon组件和功能应用程序菜单快速访问工具栏增强的工具提示 Ribbon是一个命令栏&#xff0c;它将应用程序的功能组织到应用程序窗口顶部的一系列选项卡中。Ribbon用户界面(UI)增加了特性和功能的可发现性&#xff0c;使用…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明&#xff1a;server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...