当前位置: 首页 > 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;使用…...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

搭建DNS域名解析服务器(正向解析资源文件)

正向解析资源文件 1&#xff09;准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2&#xff09;服务端安装软件&#xff1a;bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...