E-BOOK 嵌入式虚拟化技术与应用:ACRN开源项目实践 王洪波 嵌入式虚拟化技术与应用:ACRN开源项目实践

嵌入式虚拟化技术与应用:ACRN开源项目实践

👤 王洪波 📖 机械工业出版社 📋 9787111736325 🌐 zh-CN
82
下载次数
4.8
用户评分

📦 下载本书

  • 理解虚拟化原理:系统讲解CPU、内存、中断和设备虚拟化的核心机制,帮助读者建立扎实的理论基础。
  • 掌握ACRN架构:深入剖析ACRN 1.0/2.0/3.0的整体架构与关键组件,使读者能快速上手开源嵌入式虚拟机。
  • 实现代码级开发:从第一行代码开始,指导读者在x86平台上实现嵌入式虚拟机,掌握实际开发技能。
  • 性能调优实践:提供虚拟化系统实时性能调优的具体方法,解决高算力场景下的性能瓶颈问题。
  • 功能安全认证:总结功能安全认证的实践经验,满足工业领域对安全合规的需求。
★★★
中级
入门初级中级进阶高级
  • 嵌入式开发者:需要在高算力场景中实现工作负载整合,本书提供完整的ACRN技术方案。
  • 虚拟化工程师:希望从云虚拟化转向嵌入式领域,本书对比KVM与ACRN,帮助快速转型。
  • 汽车软件工程师:从事智能驾驶舱或软件定义汽车开发,本书覆盖关键虚拟化技术。
  • 工业自动化从业者:需要实现工业领域的工作负载整合,本书提供实践指导和案例。
  1. 基础优先:先阅读第1-2章,理解虚拟化基本概念和原理,为后续ACRN学习打基础。
  2. 对比学习:第3章KVM与第4章ACRN对照阅读,明确嵌入式与云虚拟化的差异。
  3. 代码实践:第4-7章建议边读边动手,在开发环境中运行ACRN代码,加深理解。
  4. 调优重点:第9章实时性能调优是核心,结合实际项目反复实践,掌握调优技巧。
  • 理论体系:系统掌握虚拟化技术原理,包括CPU、内存、中断和设备的虚拟化机制。
  • ACRN技能:深入理解ACRN架构设计,具备独立开发嵌入式虚拟机的能力。
  • 实践能力:通过代码示例和案例,学会在x86平台上实现和部署ACRN。
  • 调优方法:掌握实时性能调优的方法论,能有效解决系统性能问题。
  • 安全认证:了解功能安全认证的流程和要点,为工业级应用提供保障。

📖 书籍简介

编辑推荐
1.英特尔开源软件技术中心虚拟化项目组专家力作,本书围绕嵌入式虚拟化技术的核心内容,详细解读Linux基金会开源嵌入式虚拟机ACRN技术的架构、原理和应用实现。本书还特别披露和总结了虚拟化系统的实时性能调优方法和功能安全认证实践。读者可以从第一行代码实现一个x86平台上的“小身材、大能耐”的嵌入式虚拟机。ACRN开源项目的地址:https://projectacrn.org/。
2.读者通过该书学习,在需要高算力的嵌入式应用场景中,基于x86平台和ACRN虚拟化技术可以实现工业领域的工作负载整合或软件定义汽车智能驾驶舱等应用产品。
3.本书适合从事嵌入式虚拟化领域开发的技术人员,或者任何想了解如何在嵌入式系统上实现虚拟机管理程序的专业人员。
内容简介

伴随着物联网设备的指数级增长,在需要高算力的场景,例如软件定义汽车驾驶舱、工业领域的工作负载整合,开源虚拟化技术在嵌入式系统上受到了越来越多的关注和应用。本书首先介绍虚拟化技术的基本原理,包括CPU虚拟化、内存虚拟化、中断虚拟化和设备虚拟化,对比KVM在云服务器上参考实现,重点介绍了开源嵌入式虚拟机ACRN的架构设计、原理和实现。还特别总结了虚拟化系统的实时性能调优方法和功能安全认证实践,以及嵌入式虚拟化技术的典型应用场景案例分析。本书作为嵌入式虚拟化技术入门参考书,通过对ACRN开源软件的介绍,帮助读者从代码开始了解、学习、开发虚拟机软件,掌握嵌入式虚拟化技术并应用于工程实践。

目录
目  录
推荐序一
推荐序二
前言
第1章 虚拟化技术概述 / 1
1.1 虚拟化技术的发展历史 / 1
1.2 VMM模型的分类 / 3
1.3 虚拟化技术的分类 / 4
1.4 云虚拟化与嵌入式虚拟化 / 5
1.4.1 嵌入式虚拟化的背景与原因 / 5
1.4.2 云虚拟化和嵌入式虚拟化
   的区别 / 5
1.5 嵌入式虚拟化技术的挑战 / 6
1.6 本章小结 / 7
第2章 虚拟化技术原理 / 8
2.1 通用虚拟化架构 / 8
2.1.1 虚拟化的基本概念 / 8
2.1.2 虚拟化技术的基本原理 / 9
2.1.3 虚拟化的主要方式 / 18
2.1.4 VMM的分类 / 19
2.2 云虚拟化和嵌入式虚拟化对比 / 22
2.3 嵌入式虚拟化的场景 / 23
2.4 嵌入式虚拟化技术的特征 / 23
2.5 本章小结 / 25
第3章 开源虚拟化技术—KVM / 26
3.1 KVM的历史 / 26
3.2 KVM的原理 / 27
3.2.1 KVM的架构 / 27
3.2.2 KVM API及示例 / 28
3.3 KVM虚拟化实现 / 32
3.3.1 KVM的初始化 / 33
3.3.2 KVM虚拟机的创建 / 35
3.3.3 CPU虚拟化 / 36
3.3.4 内存虚拟化 / 43
3.3.5 中断虚拟化 / 56
3.4 设备虚拟化 / 61
3.4.1 仿真设备 / 61
3.4.2 半虚拟化设备 / 62
3.4.3 直通设备 / 63
3.4.4 KVM设备虚拟化实现 / 64
3.5 本章小结 / 68
第4章 嵌入式虚拟化技术—
    ACRN实现 / 69
4.1 ACRN简介 / 69
4.1.1 ACRN的由来 / 69
4.1.2 ACRN的关键技术特点 / 70
4.1.3 许可证和社区 / 71
4.2 ACRN应用场景 / 71
4.3 ACRN架构设计 / 73
4.3.1 ACRN 1.0整体架构 / 73
4.3.2 ACRN 2.0/3.0 整体架构 / 74
4.3.3 ACRN的关键组成 / 75
4.3.4 ACRN Hypervisor的架构 / 76
4.4 CPU虚拟化与实现 / 77
4.4.1 处理器管理 / 79
4.4.2 vCPU 生命周期 / 80
4.4.3 vCPU调度 / 80
4.4.4 VMX 初始化 / 85
4.4.5 CPUID 虚拟化 / 85
4.4.6 MSR虚拟化 / 86
4.4.7 CR虚拟化 / 86
4.4.8 IO/MMIO模拟 / 86
4.4.9 指令模拟 / 87
4.4.10 TSC 模拟 / 88
4.4.11 ART虚拟化 / 88
4.4.12 XSAVE虚拟化 / 89
4.5 内存虚拟化及实现 / 90
4.5.1 概述 / 90
4.5.2 Hypervisor物理内存管理 / 91
4.5.3 Hypervisor内存虚拟化 / 93
4.5.4 与EPT相关的VM Exit / 96
4.5.5 服务虚拟机内存管理 / 96
4.5.6 可信 / 97
4.6 中断虚拟化及实现 / 98
4.6.1 概述 / 98
4.6.2 物理中断 / 100
4.6.3 虚拟中断 / 105
4.6.4 中断重映射 / 107
4.7 I/O虚拟化及实现 / 110
4.7.1 I/O访问捕获路径 / 111
4.7.2 Hypervisor中的I/O模拟 / 112
4.7.3 I/O请求 / 112
4.8 本章小结 / 115
第5章 嵌入式虚拟化技术—
       ACRN设备虚拟化 / 116
5.1 ACRN设备模型介绍 / 116
5.2 ACRN全虚拟化设备 / 119
5.2.1 PS/2控制器 / 119
5.2.2 UART串口 / 121
5.2.3 USB设备 / 122
5.2.4 AHCI控制器 / 125
5.2.5 系统时钟 / 126
5.2.6 看门狗设备 / 131
5.2.7 Ivshmem / 132
5.2.8 显卡设备 / 134
5.3 ACRN的virtio设备 / 135
5.3.1 ACRN的virtio框架实现 / 135
5.3.2 virtio-net / 139
5.3.3 virtio-blk / 141
5.3.4 virtio-input / 143
5.3.5 virtio-console / 144
5.3.6 virtio-i2c / 146
5.3.7 virtio-gpio / 148
5.3.8 virtio-rnd / 150
5.3.9 virtio-gpu / 151
5.4 本章小结 / 152
第6章 嵌入式虚拟化技术—
    ACRN安装使用 / 153
6.1 系统环境硬件配置 / 153
6.1.1 开发环境搭建 / 153
6.1.2 目标机硬件配置要求 / 154
6.2 ACRN支持三种模式的场景 / 154
6.2.1 共享模式的场景 / 155
6.2.2 分区模式的场景 / 156
6.2.3 混合模式的场景 / 156
6.3 安装部署流程 / 157
6.4 安装部署入门指南 / 159
6.4.1 选择硬件和场景 / 160
6.4.2 准备开发机环境 / 160
6.4.3 准备目标机并生成目标
   平台配置文件 / 162
6.4.4 编译ACRN / 169
6.4.5 在目标机上安装ACRN / 170
6.4.6 启动ACRN和服务
      虚拟机 / 171
6.4.7 启动用户虚拟机 / 171
6.5 本章小结 / 172
第7章 嵌入式虚拟化技术——实时
    性能优化 / 173
7.1 整体架构设计 / 173
7.1.1 实时性的分类 / 175
7.1.2 实时性的优化准则 / 175
前言/序言

前 言
嵌入式系统与虚拟化技术似乎是两个独立的技术领域,没有交集。但随着物联网设备的爆炸式增长和万物互联应用的快速发展,嵌入式虚拟化技术这个跨界创新组合应运而生,也越来越受到业界的关注和重视。本书将主要回答两个问题:为什么嵌入式系统需要虚拟化技术?如何在资源受限的嵌入式系统上实现虚拟化技术?
为什么嵌入式系统需要虚拟化技术
因为虚拟化技术已经来到了下一个风口—万物互联时代的虚拟化!
先从虚拟化技术的发展历史说起。虚拟化技术得益于分时操作系统和PC的蓬勃发展,现代虚拟化技术已经有了20多年的发展历史。而真正催生虚拟化技术快速部署和发展的是云时代春天的到来。开源虚拟化技术和Linux催生了基础设施即服务(Infrastructure as a Service,IaaS),开启了云计算时代的新篇章。虚拟机可以作为服务,提供一系列独特优势,例如弹性资源共享、快速部署、廉价方便、集中式IT管理等。这个起始于大型电商的内部技术革新,迅速成长为一种公共服务,构成了云计算时代的基础。云计算技术的发展使得作为标准化产品的虚拟机作为服务走入“寻常百姓家”。目前各大云服务厂商都不约而同地切换到基于KVM技术的云架构上,并发展出各种各样的应用技术。
进入新世纪后,计算机领域出现了另一个新的虚拟化应用场景—万物互联,进一步促进了虚拟化技术的应用落地和发展。万物互联是把百亿级别的嵌入式设备整合在一起,并通过云连接起来。虚拟化技术因此在嵌入式领域得到广泛的应用,以此整合各种单一功能设备,通过共同的网络接口接入互联网,构建更加高效、低成本的万物互联系统。这也是实现工业4.0的必由之路。
促使嵌入式设备支持虚拟化技术的原因有如下几点。第一,随着半导体技术的发展,摩尔定律推动硬件的性能提升,成本下降。今天的嵌入式SoC的性能甚至可能超过了昨天的服务器。第二,无处不在的CPU多核技术的发展自然地能够支持多个系统。第三是业务的负载整合、数字化互联的需求。出于节约成本考虑,系统整合并重用已有的软件系统,降低移植工作量,减少硬件系统的互连,降低整体硬件系统的复杂度,可以把多个 “异构” 的操作系统和业务整合在一套硬件系统上。这些都需要虚拟化技术在嵌入式设备上的支持。
如何在资源受限的嵌入式系统上实现虚拟化
“云”虚拟化和“物”虚拟化两种技术虽然同根同源,但是嵌入式虚拟化技术和传统虚拟化技术还是有很多不同的地方,例如应用场景和目标定位不同、可用的资源多寡不同、支持的物理硬件设备和外设不同、软件发布的模式不同、各自的生态系统不同。为此,本书专门选择了Linux开源基金会下支持Intel x86平台的开源嵌入式虚拟机管理程序ACRN进行架构剖析和代码实现的解读。主要原因有两点。第一,在嵌入式虚拟机市场上大多都是闭源的商用软件,以支持Arm平台为主,开源的、专门为嵌入式设备设计的虚拟机在市面上并不多见。第二,ACRN具有如下特点:在x86平台上支持实时操作系统;小尺寸,额外开销小;能通过工业IEC 61508 功能安全认证;具有BSD 3.0友好的许可证,完全开源。
虚拟化技术主要包括四部分核心内容:CPU虚拟化、内存虚拟化、中断虚拟化和设备虚拟化。本书围绕这四个方面,以ACRN为例介绍如何在嵌入式系统上实现一个完整的虚拟机管理程序(VMM或者Hypervisor)。本书首先介绍最基本的、通用的虚拟化技术原理。考虑到云虚拟化技术和KVM的广泛流行,再以主流开源KVM为例来介绍其CPU、内存、中断和设备虚拟化的实现。有了这两章的铺垫,当读者随后读到ACRN的架构设计和代码实现时,可以一边比较KVM,一边理解嵌入式系统上虚拟化技术实现的要点。本书还有两章是针对ACRN的高级技术的,分别是性能调优和功能安全认证。因为嵌入式虚拟机Hypervisor是运行在嵌入式硬件和实时操作系统之间的薄薄的软件层,Hypervisor的出现会对整机的实时性能带来额外的开销,对于如何最大限度地减少Hypervisor自身引入的实时开销,读者可以阅读性能调优相关章节。ACRN还有另外一个独特优点,它是第一个能支持IEC 61508安全认证的开源虚拟机。以前只有商用虚拟机软件才能够完成的安全认证,开源虚拟机也能做到。本书讨论安全认证实现的章节将从技术和流程两个方面“解密”如何实现这一目标。
目标读者
在某种程度上可以将嵌入式系统的虚拟化技术看作一门跨领域的交叉技术。虚拟化技术本身涉及操作系统、计算机体系结构等领域知识。当把虚拟化技术“嫁接”到嵌入式系统上时,除了虚拟化技术背景之外,工作人员还必须具有良好的嵌入式系统设计经验。Hyper-visor要运行在资源受限的硬件平台上,性能调优又必须是整机系统(硬件+虚拟机+实时操作系统+应用程序)的调优,所以工作人员还需要一些“螺蛳壳里做道场”的系统调优能力。
另外,本书并没有定位成一本纯理论的学术书籍,而是一本综合了虚拟化原理知识和技术实践的图书。本书定位的读者包括:
从事嵌入式虚拟化领域开发的研发人员或专业技术人员。
从事嵌入式系统开发,但是对虚拟化技术感兴趣的研发人员。
从事虚拟化领域开发,但是希望扩展到嵌入式领域的研发人员。
全书结构
本书的逻辑主线是按照如下思路来组织的:为什么需要嵌入式虚拟化技术→如何实现嵌入式虚拟化→嵌入式虚拟化和主流的云虚拟化在实现上有何不同→嵌入式虚拟化技术在哪些领域可以带来价值。各章具体内容简介如下。
第1章主要介绍虚拟化技术的发展历史、虚拟机的三种模型、虚拟化技术的分类,并分析当前嵌入式虚拟化技术所面临的发展和挑战。
第2章介绍虚拟化技术的通用概念,并描述处理器虚拟化、内存虚拟化和I/O虚拟化的实现,比较“云”虚拟化和“物”虚拟化,以及嵌入式虚拟化技术的特征和必要性。
第3章主要介绍在服务器领域广泛使用的KVM的基本原理,并探讨其与嵌入式领域虚拟化技术的不同之处。通过实现一个极简版的用户态VMM,进而描述KVM的主要功能实现:CPU虚拟化、内存虚拟化、中断虚拟化和设备虚拟化。
第4章介绍一个Linux基金会下的专门为资源受限的嵌入式设备而设计的虚拟机ACRN。它尺寸小,额外开销小,专门为实时系统进行了设计和优化,同时具有完全开源、友好的许可证。该章将深入介绍ACRN嵌入式虚拟机的具体实现,包括CPU虚拟化、内存虚拟化、中断虚拟化和I/O虚拟化的框架支持,并提供设计框图及部分流程图。
第5章继续介绍ACRN中的设备虚拟化。丰富的I/O设备虚拟化支持是ACRN的另一个优势,也是专门为嵌入式系统而设计实现的。
第6章主要介绍ACRN系统的使用和环境搭建过程,并配有完整的安装部署入门指南,方便读者了解和具体操作ACRN。
第7章介绍嵌入式虚拟机如何能够支持实时性,以及如何做到性能调优,并结合Intel硬件平台和ACRN虚拟机介绍几种常用的实时优化思路及工具。
第8章介绍嵌入式实时操作系统。虽然本书主要介绍嵌入式虚拟机,但是也需要对运行在Hypervisor之上的嵌入式操作系统进行介绍,因为两者需要配合在一起才能实现业务应用程序的实时性能。ACRN是在x86硬件平台上实现的,所以该章主要介绍三个比较流行的x86平台上的开源实时操作系统。
ACRN是第一个能够通过功能安全认证的开源的虚拟机Hypervisor。第9章主要从流程和技术两方面来分享ACRN的功能安全的工程实践。
第10章介绍智能数控系统和数字孪生的实现。借助虚拟化技术来实现智能数控系统,可以把传统数控系统设备端侧的各个分离的单独控制器整合到同一平台上,还可以通过数字孪生技术在云中构建设备的数字实例。
第11章介绍如何使用虚拟化技术进行工作负载整合。通过把机器视觉和机器控制整合在一个物理硬件平台上运行,可以使工业设备装上“眼睛”和“手臂”,既可以看到需要识别的物品,又可以使用机器控制执行相应的操作。
第12章主要介绍如何通过虚拟化方案使移动机器人、复合机器人的设计变得更从容,同时可以从控制器的体积、成本、功耗、性能、安全等角度满足机器人开发所需,为多样化的上层应用打好基础。
第13章介绍虚拟化技术在智能驾驶舱中的解决方案。通过虚拟化技术,数字仪表盘系统及车载娱乐系统现在可以同时运行在一颗SoC处理器上,从而降低整机成本和平台的集成复杂性。
如何阅读本书
本书大体上介绍了5部分技术内容,读者可以针对自己的兴趣点来阅读。
希望了解虚拟化技术基础知识的读者,可以阅读第1、2章。
希望了解服务器上常用的KVM虚拟机实现的读者,可以阅读第3章。
希望了解如何实现一个完整的嵌入式虚拟机的读者,可以阅读第4~6章。
希望了解如何进行实时性能调优的读者,可以阅读第7章。
希望了解常用x86平台的开源实时操作系统的读者,可以阅读第8章。
希望了解功能安全认证的读者,可以阅读第9章。
希望了解嵌入式虚拟机的应用场景和实际案例的读者,可以阅读第10~13章。
致谢
本书的作者都是英特尔公司的工程师。他们有的是来自开源技术中心部门的虚拟化开发工程师,有的是来自物联网事业部的开发工程师或市场经理。他们大都在虚拟化领域、嵌入式领域、工业领域沉浸和工作多年,具有丰富的技术实践经验。
写作本书主要有三个原因。第一,虚拟化技术的发展。在2008年,英特尔开源软件技术中心的虚拟化团队和复旦大学并行处理研究所合作并出版了《系统虚拟化—原理与实现》一书。十几年过去了,虚拟化技术依然发展迅猛,不仅使云计算资源唾手可得,而且伴随着万物互联时代的春风,虚拟化技术在嵌入式领域也迎来了新的大发展。所以,团队认为很有必要再续写一本书,来专门介绍新的嵌入式虚拟化技术的原理与实现。第二,本书的作者除了日常的技术开发工作,也负责客户的技术推广和产品落地,在与OEM、ODM、车企、设备制造厂商打交道时,他们深刻体会到我国制造行业的“一手硬、一手软”,即硬件制造优势领先,但软件设计开发能力却缺乏技术积累,水平有待提高。所以也希望本书能扮演一个虚拟化技术入门和普及的“敲门砖”的角色。虽然它不能使人“21天学会虚拟化”,但是通过ACRN开源软件的介绍(ACRN只有3万多行代码),却可以让人们有机会从第一行代码来了解、学习虚拟化技术,甚至开发自己的虚拟机管理程序,从而能掌握嵌入式和虚拟化技术的要点。第三,本书的策划编辑专门为团队提供了读者需求、业界热点技术分析,并给出了写作方向。
本书的作者分工如下:第1章由董耀祖、沈溢合作撰写;第2章由王稳超撰写;第3章由王稳超、邓杰合作撰写;第4章由曹明贵、高世青、单峻俊合作撰写;第5章由邓杰撰写;第6章由邹皓、江燕婷合作撰写;第7章由曹明贵撰写;第8章由曹剑波、杨湘、陈鹏、陈红展合作撰写;第9章由吴向阳撰写;第10章由沈溢、李世奇合作撰写;第11章由王洪波撰写;第12章由瞿好聪、杨洪、李世奇合作撰写;第13章由张泉撰写。王洪波、曹明贵、王稳超、邓杰、高世青对全书做了审校。感谢本书的技术顾问茅俊杰、王禹、孙捷。还要感谢机械工业出版社的编辑进行了细致的审稿,并提出了宝贵的修改建议,最终促成了本书的出版。
最后,感谢你在茫茫书海中选择了本书,并衷心祝愿你能从中受益。

编者
2023年5月

📑 章节目录

  1. 虚拟化技术概述
  2. 虚拟化技术原理
  3. 开源虚拟化技术—KVM
  4. 嵌入式虚拟化技术—ACRN实现
  5. ACRN CPU虚拟化与实现
  6. ACRN内存虚拟化与实现
  7. ACRN中断虚拟化与实现
  8. ACRN设备虚拟化与实现
  9. 虚拟化系统实时性能调优
  10. 功能安全认证实践
  11. 嵌入式虚拟化典型应用场景
  12. ACRN社区与项目展望