随着物联网设备的爆炸式增长和万物互联应用的快速发展,嵌入式系统正面临着一系列的挑战与机遇。为了适应这一变革,虚拟化技术逐渐成为了业界关注的焦点,并在嵌入式系统中得到了广泛的应用。本文将深入探讨嵌入式系统为何需要虚拟化技术,以及这一跨界创新组合的应用场景。
随着半导体技术的飞速发展,摩尔定律在推动硬件性能提升的同时,也使得成本逐渐降低。这使得今天的嵌入式系统中的SoC(System on a Chip)性能得到了极大的提升,甚至在某些方面超越了传统的服务器。这种性能的提升为嵌入式系统引入虚拟化技术提供了可能。通过虚拟化技术,我们可以将多个操作系统或应用程序运行在单一的硬件平台上,进一步提升硬件资源的利用率。
随着CPU多核技术的发展,一个物理处理器能够同时执行多个线程或任务,这为嵌入式系统支持虚拟化技术提供了强大的基础。通过多核技术,我们可以轻松地在单个硬件平台上运行多个操作系统或应用程序,从而实现真正的并行处理。
随着物联网的普及,不同业务之间的负载整合成为了关键需求。通过虚拟化技术,我们可以将各种业务负载整合到一个统一的平台上,从而实现资源的集中管理和优化。这种整合不仅有助于提升系统的整体性能,还能降低运营成本和维护难度。
在嵌入式系统的应用中,节约硬件成本是一个重要的考虑因素。通过引入虚拟化技术,我们可以减少硬件系统的互连,降低整体硬件系统的复杂度。这不仅能够降低硬件成本,还能提升系统的可靠性和稳定性。
在嵌入式系统中,软件重用和移植是一个重要的需求。通过虚拟化技术,我们可以将已有的软件系统进行封装和隔离,使其在不同的硬件平台上得到重用。此外,虚拟化技术还可以简化软件的移植过程,降低开发难度和维护成本。
在许多应用场景中,我们需要将不同类型的操作系统(如实时系统和非实时系统、安全系统和非安全系统)整合到一个系统中。通过虚拟化技术,我们可以轻松地实现这种异构操作系统的整合,从而满足各种复杂的应用需求。这种整合不仅有助于提升系统的灵活性和可扩展性,还能降低开发和维护成本。
嵌入式虚拟化技术的应用场景十分广泛,包括但不限于以下几个方面:软件定义汽车驾驶舱、工业领域的工作负载整合、智能家居设备的集中管理、医疗设备的远程监控和维护等。在这些场景中,虚拟化技术能够有效地提升系统的性能、可靠性和可维护性。
尽管嵌入式虚拟化技术已经得到了广泛的应用和认可,但仍面临着一些挑战。例如,如何进一步提升虚拟化技术的性能和效率、如何实现更精细的资源管理和调度等。未来,随着技术的不断进步和应用需求的不断增长,我们相信嵌入式虚拟化技术将会得到更广泛的应用和更深入的研究。
适读人群 :本书定位的读者是从事嵌入式虚拟化领域开发的技术人员,或者任何想了解如何在嵌入式系统上实现虚拟机管理程序的专业人员。
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
7.2 ACRN虚拟机优化 / 177
7.3 CPU优化 / 179
7.4 中断优化 / 180
7.5 内存优化 / 181
7.5.1 缓存分配技术 / 182
7.5.2 软件SRAM / 185
7.6 I/O虚拟化 / 186
7.6.1 GPU直通 / 187
7.6.2 其他设备虚拟化 / 188
7.7 客户机优化—实时操作系统 / 188
7.8 工具辅助优化 / 189
7.8.1 ACRNTrace介绍 / 189
7.8.2 vmexit命令 / 191
7.8.3 PMU的数据分析 / 192
7.8.4 RTOS的实时性基准测试工具 / 192
7.8.5 Intel TCC的介绍 / 194
7.9 虚拟机间通信 / 197
7.10 本章小结 / 198
第8章 嵌入式实时操作系统 / 199
8.1 RTOS介绍 / 199
8.1.1 常见的RTOS / 199
8.1.2 从GPOS到RTOS的转换 / 200
8.1.3 RTOS运行在虚拟机上的
注意事项 / 200
8.2 Xenomai / 201
8.2.1 Xenomai的起源 / 201
8.2.2 Xenomai的特性 / 202
8.2.3 Xenomai 3.1系统架构 / 204
8.3 PREEMPT_RT Linux / 205
8.3.1 PREEMPT_RT Linux的起源 / 206
8.3.2 PREEMPT_RT Linux的发展 / 206
8.3.3 PREEMPT_RT的特性 / 207
8.4 Zephyr / 213
8.4.1 Zephyr的起源 / 213
8.4.2 Zephyr的特点 / 213
8.4.3 Zephyr的系统架构 / 214
8.4.4 Zephyr的实现 / 219
8.5 本章小结 / 224
第9章 嵌入式虚拟化技术赋能功能安全 / 226
9.1 功能安全背景 / 226
9.2 功能安全概述 / 227
9.2.1 风险概念 / 229
9.2.2 功能安全标准的基本
术语与定义 / 230
9.2.3 风险和安全完整性 / 232
9.2.4 系统功能安全 / 234
9.2.5 软件功能安全 / 236
9.3 典型软件安全设计 / 236
9.4 混合关键性系统 / 239
9.4.1 混合关键性系统典型应用场景 / 239
9.4.2 QNX Hypervisor / 241
9.5 ACRN赋能混合关键性系统 / 243
9.5.1 安全目标 / 245
9.5.2 系统级安全措施 / 246
9.5.3 独立性相关安全措施 / 247
9.5.4 安全分析 / 248
9.5.5 系统化开发流程 / 249
9.5.6 安全状态设计 / 253
9.5.7 安全架构设计 / 254
9.5.8 安全需求概述 / 256
9.5.9 使用限制 / 261
9.6 嵌入式虚拟化技术的功能
安全价值 / 265
9.7 本章小结 / 265
第10章 应用案例—智能数控
系统和数字孪生 / 266
10.1 行业概述 / 266
10.2 行业挑战与需求 / 266
10.3 解决方案 / 267
10.4 具体实现 / 268
10.4.1 架构设计 / 268
10.4.2 虚拟机与云端应用的
协同机制 / 270
10.4.3 编译及安装 / 271
10.5 方案优势 / 272
10.6 本章小结 / 273
第11章 应用案例—基于机器视觉和机器
控制的工作负载整合 / 274
11.1 行业概述 / 274
11.1.1 迈向工业4.0 / 274
11.1.2 物联网中的工作负载整合 / 275
11.1.3 现代工业物联网模型 / 275
11.2 行业挑战与需求 / 276
11.2.1 工业自动化需要数字化转型 / 276
11.2.2 软件定义的基础设施帮助
工业数字化转型 / 277
11.2.3 将软件定义的基础设施应用于
工业自动化 / 277
11.2.4 在工业领域进行工作负载整合
的需求 / 279
11.2.5 工业控制领域的工作负载
整合案例—机器视觉和
机器控制 / 280
11.3 解决方案 / 281
11.3.1 负载整合技术方案—虚拟化
和容器化 / 281
11.3.2 通过虚拟化技术实现工作
负载整合 / 282
11.4 具体实现 / 284
11.4.1 机器视觉—运行在人机交互
虚拟机里 / 284
11.4.2 机器控制—运行在实时
虚拟机里 / 285
11.4.3 服务虚拟机—为整机系统
提供后台服务 / 285
11.4.4 嵌入式虚拟机管理程序—
ACRN Hypervisor / 286
11.4.5 硬件资源和I/O设备的分配 / 286
11.4.6 虚拟机间通信 / 287
11.4.7 物理硬件平台—基于x86的
工控机 / 287
11.4.8 性能调优 / 287
11.4.9 安装步骤示例 / 288
11.5 方案优势 / 288
11.6 本章小结 / 289
第12章 应用案例—自主移动机器人 / 290
12.1 行业概述 / 290
12.2 行业挑战与需求 / 290
12.3 解决方案 / 291
12.4 具体实现 / 292
12.5 安装步骤示例 / 295
12.6 方案优势 / 295
12.7 本章小结 / 296
第13章 应用案例—软件定义汽车
驾驶舱 / 297
13.1 行业概述 / 297
13.1.1 多个独立ECU的实现 / 298
13.1.2 软件定义驾驶舱 / 299
13.2 行业挑战与需求 / 300
13.3 解决方案 / 302
13.4 具体实现 / 303
13.4.1 基于x86架构的SoC / 304
13.4.2 ACRN Hypervisor / 304
13.4.3 仪表盘系统—服务
虚拟机 / 304
13.4.4 中控娱乐系统—用户
虚拟机 / 304
13.4.5 Intel GVT-g图形显卡共享 / 305
13.5 编译及安装 / 306
13.6 方案优势 / 307
13.7 软件定义驾驶舱的未来展望 / 307
13.8 本章小结 / 308
附录 / 309
附录A Xenomai及其应用程序的
编译和安装 / 309
附录B PREEMPT_RT Linux的
编译和安装 / 316
附录C Zephyr的编译和安装 / 319
附录D 在ACRN上安装运行两个
虚拟机 / 323
附录E ROS 2安装与使用示例 / 331
技术术语表 / 335
参考文献 / 342