qemu 对 ARMv8的支持

2023-10-31

qemu 可以支持 ARMv8 
且支持的 boot 包括
	1. 从 ATF启动
	2. 从 UEFI启动
	3. 从 u-boot启动
	4. 从 linux 启动
这里打算用以下平台 qemu-system-aarch64 -M virt -cpu 

qemu virt 平台 // https://qemu.readthedocs.io/en/latest/system/arm/virt.html
	1.硬件平台
		1. 可配置项
			1. cpu微架构,个数 // cortex-a53/57/72 // many CPUs (up to 512 if using a GICv3 and highmem)
			2. 内存大小  // large amounts of RAM (at least 255GB, and more if using highmem)
			3. flash镜像 // -bios xxx , xxx 被装在到 flash 0x0000 0000 开始的地方
			4. RAM 镜像  // -drive if=pflash,format=raw,index=1,file=flash.img // flash.img 装在到 0x4000 0000 的地方
		2. 不可配置项 
			1. Flash memory starts at address 0x0000_0000 , 支持 XIP ,可配置
			2. RAM starts at 0x4000_0000
			3. One PL011 UART
			4. 其他配置项
				All other information about device locations may change between QEMU versions, so guest code must look in the DTB.
				qemu-system-aarch64 -machine virt,dumpdtb=virt.dtb -cpu cortex-a57 -smp 1 -m 2G -nographic
	2.boot
		QEMU supports two types of guest image boot for virt, and the way for the guest code to locate the dtb binary differs:
			1.For guests using the Linux kernel boot protocol (this means any non-ELF file passed to the QEMU -kernel option) 
				the address of the DTB is passed in a register (r2 for 32-bit guests, or x0 for 64-bit guests)
			2.For guests booting as “bare-metal” (any other kind of boot)
				the DTB is at the start of RAM (0x4000_0000) // 类似 u-boot.bin 或者 UEFI.bin

  • qemu 的boot
qemu-system-aarch64 -M virt -cpu cortex-a57 -nographic -smp 4
qemu-system-aarch64 支持bios ,但是必须显式设置,否则不使用bios
但是qemu-system-aarch64 在 不显式设置 bios 的时候,会去看share/qemu/efi-virtio.rom 是否为存在,是否为空,如果存在且不空, 才可正常走下去.否则,会自动结束
但是qemu-system-aarch64 并不会 读 share/qemu/efi-virtio.rom 中的内容

share/qemu/efi-virtio.rom 的格式
	bin/../share/qemu/efi-virtio.rom: BIOS (ia32) ROM Ext. (135*512)
	// aarch64-linux-gnu-objdump  -D -b binary -m aarch64  efi-virtio.rom   > efi-virtio.asm
	// 但是好像 efi-virtio.asm 并不像代码


不显式设置-bios // 例如-kernel xxx.elf
	直接跑kernel
-bios none 
	不支持
-bios xxx.bin
	 会去找 xxx.bin 文件,并以其为 bios 运行
	-bios QEMU_EFI.fd // 从UEFI启动
	-bios u-boot.bin // 从U-boot 启动

qemu-system-aarch64/qemu-system-x86/qemu-system-riscv64 都有自己的 bios // 对应不显示 传入 "-bios xxx" 的情况
对应 arm64 virt板 来说是  不跑bios
对应 x86 来说是 UEFI.fd ? // TODO
对应 rv 来说 是 opensbi-riscv64-generic-fw_dynamic.bin
// -kernel选项 ,如果有则跑完(或不跑)bios,就跑kernel, 目前不知道 bios 和 kernel 是怎么衔接的
-kernel  xxx.elf // 跑完不跑bios只跑xxx.elf
  • qemu从UEFI启动
UEFI + ubuntu-16.04.3-server-arm64.iso
	http://doc.okbase.net/69908250/archive/258251.html
	https://blog.csdn.net/chenxiangneu/article/details/78955462

// ubuntu-16.04.3-server-arm64.iso 是ubuntu 官方发布的镜像文件
// 这种方式 是 一种 安装系统的方式,类似于 X86的系统安装
// ubuntu-16.04.3-server-arm64.iso 中有 u-boot ,kernel ,rootfs
// 这种启动方式, 第一个启动代码是 UEFI
// 启动流程 UEFI -> grub -> kernel -> rootfs

我之前搭好了一个从 UEFI 启动的平台 : https://blog.csdn.net/u011011827/article/details/120601147

qemu-system-aarch64 \
    -M virt \
    -cpu cortex-a57  -smp 1 \
    -m 1024M \
    -bios QEMU_EFI.fd \
    -drive if=none,file=xenial-server-cloudimg-arm64-uefi1.img,format=qcow2,id=hd0 -device virtio-blk-device,drive=hd0 \
    -netdev user,id=hostnet0,hostfwd=tcp::2222-:22 -device virtio-net-device,netdev=hostnet0 \
    -nographic

  • qemu从U-Boot启动

// 这种启动方式,要手动制作 u-boot , kernel , rootfs
// 这种启动方式, 第一个启动代码是 u-boot
// 启动流程 u-boot -> kernel -> rootfs

qemu virt 的启动有没有参考资料???
// 为什么可以从
我们探索从 u-boot 启动 ,可参考 https://stdrc.cc/post/2021/02/23/u-boot-qemu-virt/

qemu-system-aarch64  \
    -M virt \
    -cpu cortex-a57 -smp 1 \
    -m 2G \
    -bios u-boot.bin \
    -drive if=pflash,format=raw,index=1,file=flash.img \
    -nographic

  • 默认
从 EL1 boot
  • 虚拟化
-machine virt,virtualization=on
  • 安全
使用QEMU(3.0版本以上)模拟一个arm64 virt平台,virt平台上有两个cfi flash。
	// -machine virt,secure=on

启动过程为 : BootRom(BL1) 从Flash1 FIP中加载BL2,BL2再加载BL3, BL33(u-boot)

Flash0当成Boot使用,用于烧录 ATF(arm trust firmware)的BL1; 
	// -bios bl1.bin
Flash1上 用于烧录 格式为ATF FIP的Image 
	// 包含了BL2,BL31,BL33(uboot)
	// 注意 : BL33 可以为 Image ,即 不需要 uboot 的参与
	// BL33 在 ATF 配置为 ARM_LINUX_KERNEL_AS_BL33 是 Image 
	// 注意 : BL33 也可以为 QEMU_EFI.fd
	// QEMU_EFI.fd 可以完全替代 u-boot ,即 QEMU_EFI.fd 直接加载 Image

qemu-system-aarch64

-machine virt,secure=xxx 和 -machine virt,virtualization=yyy 的关系
总结:
	virtualization 可单独存在
	secure 存在时, virtualization 必须存在

在这里插入图片描述

在这里插入图片描述

$ qemu-system-aarch64  -machine virt,help  
virt-6.1-machine options:
  acpi=<OnOffAuto>       - Enable ACPI
  append=<string>        - Linux kernel command line
  confidential-guest-support=<link<confidential-guest-support>> - Set confidential guest scheme to support
  default_bus_bypass_iommu=<bool> - Set on/off to enable/disable bypass_iommu for default root bus
  dt-compatible=<string> - Overrides the "compatible" property of the dt root node
  dtb=<string>           - Linux kernel device tree file
  dump-guest-core=<bool> - Include guest memory in a core dump
  dumpdtb=<string>       - Dump current dtb to a file and quit
  firmware=<string>      - Firmware image
  gic-version=<string>   - Set GIC version. Valid values are 2, 3, host and max
  graphics=<bool>        - Set on/off to enable/disable graphics emulation
  highmem=<bool>         - Set on/off to enable/disable using physical address space above 32 bits
  initrd=<string>        - Linux initial ramdisk file
  iommu=<string>         - Set the IOMMU type. Valid values are none and smmuv3
  its=<bool>             - Set on/off to enable/disable ITS instantiation
  kernel=<string>        - Linux kernel image file
  mem-merge=<bool>       - Enable/disable memory merge support
  memory-backend=<string> - Set RAM backendValid value is ID of hostmem based backend
  memory-encryption=<string> - Set memory encryption object to use
  mte=<bool>             - Set on/off to enable/disable emulating a guest CPU which implements the ARM Memory Tagging Extension
  phandle-start=<int>    - The first phandle ID we may generate dynamically
  ras=<bool>             - Set on/off to enable/disable reporting host memory errors to a KVM guest using ACPI and guest external abort exceptions
  secure=<bool>          - Set on/off to enable/disable the ARM Security Extensions (TrustZone)
  smp=<SMPConfiguration> - CPU topology
  suppress-vmdesc=<bool> - Set on to disable self-describing migration
  usb=<bool>             - Set on/off to enable/disable usb
  virtualization=<bool>  - Set on/off to enable/disable emulating a guest CPU which implements the ARM Virtualization Extensions
  x-oem-id=<string>      - Override the default value of field OEMID in ACPI table header.The string may be up to 6 bytes in size
  x-oem-table-id=<string> - Override the default value of field OEM Table ID in ACPI table header.The string may be up to 8 bytes in size
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

qemu 对 ARMv8的支持 的相关文章

  • 微服务常见的配置中心简介

    微服务架构中 常见的配置中心包括以下几种 Spring Cloud Config Spring Cloud Config是官方推荐的配置中心解决方案 它支持将配置文件存储在Git SVN等版本控制系统中 通过提供RESTful API 各个
  • 微服务常见的配置中心简介

    微服务架构中 常见的配置中心包括以下几种 Spring Cloud Config Spring Cloud Config是官方推荐的配置中心解决方案 它支持将配置文件存储在Git SVN等版本控制系统中 通过提供RESTful API 各个
  • Docker Java 应用程序无法从控制台获取输入

    我正在尝试为我的 java 应用程序创建一个 docker 映像 启动时需要为该应用程序提供密码 当前通过控制台 我尝试了多种获取输入的方法 但都失败了 这是 docker 的限制吗 如果是 有解决方法吗 对于这个片段 Console co
  • 为什么要在 MS Vista 中的 ProgramData 文件夹上进行虚拟化?

    我修改了一个应用程序以考虑 VISTA 中的 UAC 所以 现在 mdb JET 或 Access 文件 位于ProgramData MyApp 我意识到 当我的应用程序第一次读取数据库时 它是从该位置执行的 但是当我的应用程序写入数据库时
  • IOS 应用程序加载器显示捆绑错误

    我已经浪费了3天的时间 解决 这个问题 实际上我已经尝试了我能想象到的一切 但一无所获 当我的应用程序二进制上传时 我收到以下错误 错误 ITMS 9000 此捆绑包无效 armv7 需要包含 armv7 架构 在软件资产 软件资产 MZI
  • 为 Citrix/终端服务器编程 .NET 应用程序:合规性和陷阱

    我们在这里有点迷失了 我们需要使我们的应用程序可安装在具有 80 多个 Citrix 服务器的网络上 尽管我们的应用程序是 100 有效且可正常运行的 NET 但我们还是经历了一些 对我们来说很奇怪的 行为 您不能使用任何 文档和设置 文件
  • CCSC,一种CPU架构

    core circuit separate computer 核与执行电路的分离 最初是为了省电 用寄存器实现这种分离 V寄存器控制着执行电路的供电 V 0则不供电 进入省电模式 V 1则供电 进入工作模式 P寄存器是parameter r
  • C/C++软件可以编译成字节码以便以后执行吗? (架构独立的 UNIX 软件。)

    我想将现有软件编译成演示文稿 以便以后可以在不同的体系结构 和操作系统 上运行 为此 我需要一个可以在另一个架构 操作系统上轻松运行 模拟的 字节 代码 LLVM http llvm org 红外 一些 RISC 汇编 一些随机的想法 编译
  • WPF TreeView 虚拟化

    我正在尝试弄清楚这个虚拟化功能 我不确定我是否理解错误或发生了什么 但我正在使用 ANTS 内存分析器来检查虚拟化 TreeView 中的项目数 并且它只是不断增加 我有一个包含 1 001 个项目 1 个根项目 1000 个子项目 的 T
  • QEMU和KVM在虚拟机I/O中扮演什么角色?

    我发现 QEMU 和 KVM 之间的界限非常模糊 我发现有人说虚拟机是qemu进程 而另一些人说是kvm进程 究竟是什么 而QEMU和KVM在虚拟机I O中扮演什么角色呢 比如一个vm做PIO MMIO的时候 是qemu还是kvm会把它困住
  • 盲猜你不懂H5架构和原生架构的区别

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • DockerCompose - 微服务项目部署全过程(最佳实践)

    目录 一 微服务项目部署 1 1 项目介绍 1 2 准备 MySQL 初始化文件 1 3 pom xml 插件 1 4 测试工作 1 5 编写 Dockerflie 文件 1 6 编写 DockerCompose yml 文件 1 7 修改
  • 如何在没有虚拟化的 Macintosh 上进行“干净”测试?

    我在 Windows 上遇到的一件事是 当您正在开发的 Web 浏览器插件或程序假设安装了默认情况下并不总是存在于 Windows 上的某些内容时 一个完美的例子是 NET 很多运行 Windows XP 的人从未安装过任何版本的 NET
  • Amazon EC2 容量和工作流程问题

    我希望你们中一些有使用亚马逊 EC2 经验的人能够提供一些建议 当然这将是主观的 这很好 我很确定你们的猜测会比我的更好 我计划将我客户的所有网站从共享托管环境迁移到 Amazon EC2 它们都是流量相当低的网站 最繁忙的网站每天接待大约
  • 自动化 VMWare 或 VirtualPC

    我目前正在尝试使用构建脚本 并且由于我有一个受源代码控制的 ASP net Web 部件 因此我的构建脚本应该在最后执行此操作 从网络获取 裸 Windows 2003 IIS VMWare 或 Virtual PC 映像 启动它 将文件从
  • 在同一个ipa中支持armv6和armv7

    我有一个 XCode 项目 配置如下 项目格式 XCode 3 1 兼容 架构 标准 armv6 armv7 基础 SDK 最新 iOS 当前设置为 iOS 4 2 仅构建活动架构 未选中 有效架构 armv6 armv7 我的问题 生成的
  • 使用矢量化为 iPhone 编译 Eigen 库

    我正在努力为 iPhone 4 编译 Eigen 库 该库具有带有 armv7 指令集的 ARM 处理器 到目前为止 当我指定预处理器定义 EIGEN DONT VECTORIZE 时 一切正常 但由于一些性能问题 我想使用armv7优化的
  • 如何编写虚拟机[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 检测注册表虚拟化

    我有一组 C v2 应用程序 并且在 Win7 以及较小程度上的 Vista 中的注册表虚拟化方面遇到了困难 我有一个共享注册表配置区域 我的应用程序需要在 HKLM Software Company 中访问该区域 在 Vista 之前 所
  • 如何创建一个快速加载的包装列表框?

    我制作了一个很好的小三项宽列表 用作开关 它看起来像这样 看起来不错吧 好吧 我在垂直滚动列表中大约有 130 个这样的图块 并且需要很长时间才能加载 根据性能分析工具 每个元素的渲染时间约为 18 毫秒 这给了我大约 2 3 秒的渲染时间

随机推荐

  • 【机器学习】支持向量机SVM - 对SVM与核函数的理解及sklearn参数详解

    支持向量机是在深度学习流行开来之前 性能表现最好的一种机器学习方法 在看这篇blog之前 默认读者已经有了对支持向量机的基本概念的认识 一 支持向量机的进一步理解 支持向量机的优化目标在逻辑回归优化目标基础上进一步产生的 具体优化目标不说了
  • web标准化设计:常用的CSS命名规则

    头 header 内容 content container 尾 footer 导航 nav 侧栏 sidebar 栏目 column 页面外围控制整体布局宽度 wrapper 左右中 left right center 登录条 loginb
  • (二) three.js 导入模块

    导入模块 目录结构 示例 First html 导入three js 的模块 script 标签导入模块 红色框是导入three js 下面绿色框就不用加type module Import导入模块 同样注意红色框和绿色框的对应关系
  • es6面试题

    1 es5和es6的区别 说一下你所知道的es6 ECMAScript5 即ES5 是ECMAScript的第五次修订 于2009年完成标准化ECMAScript6 即ES6 是ECMAScript的第六次修订 于2015年完成 也称ES2
  • 常见的通讯协议总结(USART、IIC、SPI、485、CAN)

    目录 一 通讯的基本概念 1 串行通讯 2 并行通讯 3 串行通讯与并行通讯对比 4 传输模式 单工 半双工 全双工 二 USART 串口通讯 1 物理层 2 协议层 1 波特率 2 起始和停止信号 3 有效数据 4 数据校验 2 异步串行
  • 使用CSMA/CD协议一个计算题

    题干 首先计算一下A这个以太网所容许的最短的帧它的发送帧的长度时间为 8 前同步码为8 64 最短帧长 8 单位转换b到B 576比特 有关于单位转换 B是Byte的缩写 B就是Byte 也就是字节 Byte b是bit的缩写 b就是bit
  • 理解高内聚低耦合

    低耦合 耦合就是元素与元素之间的连接 感知和依赖量度 这里说的元素即是功能 对象 系统 子系统 模块 例如 现在有方法A和方法B 我们在A元素去调用B元素 当B元素有问题或者不存在的时候 A元素就不能正常的工作 那么就说元素A和元素B耦合
  • 【数据结构】实验六:图论

    文章目录 7 1 邻接矩阵表示法创建无向图 参考代码 代码解析 7 2 邻接表创建无向图 参考代码 代码解析 7 3 图深度优先遍历 参考代码 代码解析 7 4 单源最短路径 参考代码 代码解析 7 5 列出连通集 参考代码 代码解析 7
  • 在Servlet中使用开源fileupload包实现文件上传功能

    当我们在 HTML 表单中选择本地文件之后点击 提交 按钮则会将文件上传到服务器中 此时该 HTTP 请求正文的数据类型就是 multipart form data 型的 而在 Servlet 技术中 该 HTTP 请求会被 Servlet
  • 在Windows上使用clang编译器

    在Stackoverflow等网站上 经常出现各种编译器的对比的结果 其中clang是很常见的 那么 怎样在Windows上使用clang呢 没那么直观 直接去llvm官网上下载clang的发行包 解压 到bin下面 看到应该是我们想要的工
  • QTreeWidget实现的树形节点的添加+双击响应+删除详解

    承接该文http blog csdn net bzhxuexi article details 10054289 在该文基础上继续讲解QTreeWidget控件的使用 同时解决该文最后留下的问题 QTreeWidget是实现树形结构的类 在
  • 微信小程序map组件路线规划,腾讯地图sdk的应用案例

    腾讯地图WebService API 是基于HTTPS HTTP协议的数据接口 开发者可以使用任何客户端 服务器和开发语言 按照腾讯地图WebService API规范 按需构建HTTPS请求 并获取结果数据 目前支持JSON JSONP方
  • stm32f103单片机—编码器测速

    一 涉及资源 stm32f103ZET6开发板 非指定 MG513P3012V型号电机 带霍尔编码器 非指定 二 涉及概念 1 单片机资源要求 此种测速方法要求单片机的定时器具有编码器模式 对于stm32f1系列 具备编码器模式的定时器有T
  • mysql a foreign key constraint fails_MySQL删除表:Cannot delete or update a parent row: a foreign key co...

    MySQL库中有俩表 table1和table2 相互关联 在删除表的时候出错 Cannot delete or update a parent row a foreign key constraint fails 很明显这是表关联生成的强
  • MATLAB APP纯小白入门 两数相加

    万事开头难 最怕第一次 使用matlab APP 实现两数求和 如下图所示 c a b 输入数字后 按 就计算 步骤 拖拽三个 Edit Field Numeric 过来 并且双击名字分别改为 a b c 注意修改名字后右边会有点变化 程序
  • 标准二阶响应--佛朗哥

    如果一个电路对任何有界输入在响应中产生一个有界的输出 就说明这个电路是稳定的 判断一个电路是否稳定一种方法是将某些能量注入到它的电抗元件中的一个或者多个 然后在没有任何外加电源的情况下观察这个电路是如何作为的 这种情况下的响应为无源或者自然
  • STM32F103 GPIO输出模式2MHz,10MHz,50MHz波形对比

    在STM32F103中GPIO的输出模式有三种速度配置 如图所示 经过测试发现 这三种速度的输出模式与IO的翻转频率没有关系 它们影响的可能是驱动能力 下面是在IO极限频率 18MHz 下 三种模式的波形
  • bootstrap实现轮播图

    div class carousel slide style width 400px margin 30px auto ol class carousel indicators li class active li li li ol div
  • 数据库类型区分

    数据库类型主要可分为 网状数据库 Network Database 关系数据库 Relational Database 树状数据库 Hierarchical Database 面向对象数据库 Object oriented Database
  • qemu 对 ARMv8的支持

    qemu 可以支持 ARMv8 且支持的 boot 包括 1 从 ATF启动 2 从 UEFI启动 3 从 u boot启动 4 从 linux 启动 这里打算用以下平台 qemu system aarch64 M virt cpu qem