Enterprise Just Builder

Solution for Enterprise Software Architecture

qemu

为 QEMU 虚拟设备编写 Linux PCI 设备驱动

本文将以 QEMU 的 ivshmem 虚拟设备作为硬件平台,逐步演示如何为其编写 Linux PCI 设备驱动。该驱动通过的测试环境为 QEMU 版本V1.0,主机操作系统 Ubuntu 12.04,客户机(VM)操作系统 Linux v3.x,此外它在 QEMU v1.0.1, v2.2.0 和 v2.7.0-rc4 中也表现良好。例子中所引用的头文件和其他源文件如 drivers/pci/pci.c 是以 Linux 内核源文件的根目录为搜索路径的。如 即意指 include/linux/pci.h。

背景
要特别强调的是虚拟平台不能替代实际的物理硬件。但在演示、培训、实验等场景,虚拟平台就特别适合:配置虚拟硬件则相当便捷,且可提供一个一致的可供使用的硬件平台。而且添加、扩展或者移除虚拟平台组件也十分方便。 1

本文选用的是 InterVM SHared MEMory (ivshmem) 这个 QEMU PCI 设备。选择该设备的原因有很多, 包括设备构造简单,可以在主机上使用代码和它进行交互和测试。主机 SHM 共享内存被映射为客户机的 MMIO 区域,通过模拟的物理设备(ivshmem 设备)的 MMIO 访问,客户机操作系统就可以访问主机上的 POSIX SHM 共享内存。此外 ivshmem 框架还允许其他启用 ivshmem 的客户机 (或主机上的程序) 通过 eventfd (2) 机制将 irq 发送给虚拟机。如图1-1 所示。

由于 ivshmem 不是默认启用的 QEMU PC 字符设备, 因此需要在 QEMU 启动命令行中指定相应的设备选项。要查看所支持的设备的列表, 请运行 (以 X64 为例):

$ qemu-system-x86_64 -device ?

注: 编写 PCI 设备驱动所用的 Linux API 通常可以支持 PCI 族,包括 PCI, PCI-X 和 PCI-E。ivshmem 设备模拟的是 PCI 设备。

>>> 阅读全文

 

, , ,

玩转 UEFI Secure Boot

对 Windows 8.0 的安全启动 (secure boot) 不少人都有困惑,但鲜有人真正了解它是如何工作的。我觉得理解它的最好方式就是从头开始配置安全启动,之后能就看清楚安全启动究竟带来了什么新功能。

首先要解决硬件问题。因为我手边缺少 UEFI 硬件以供测试。幸运的是 OVMF 开源项目提供了可供虚拟机使用的 UEFI 参考固件,它可以在 QEMU 中运行。EDK2 项目提供了编译好的二进制文件。但要支持安全启动,就需要自己动手重新编译。

我们需要的工具是 Intel 的 UEFI Build Tools,它是 EDK2 开发工具的一部分。 利用 svn 或者 git 可以检出 EDK2 源代码。

git clone git://github.com/tianocore/edk2.git

EDK2 随源代码还提供了最新的 Windows 版和 Unix 版的 BaseTools ,这是进行 UEFI 编程的一些辅助工具;如果选择在 Linux 上进行开发,你不得不选择重新编译 BaseTools,详情请参考 Ubuntu Wiki。1

这里假设 EDK2 源代码保存在 C:\edk2 目录中,后续的编译过程均以此为工作目录。你还需安装 iasl 和 Visual Studio 2012 Express 作为编译工具,isal 用于编译 ACPI 代码。此外还需要 Windows 8.0 SDK 或以上版本以及 .NET 4.5,该 SDK 提供了微软签名工具。

>>> 阅读全文

 

, , , , ,

从虚拟化到云计算(一)概述

文章评价:

在计算机科学领域中,虚拟化有广义和狭义两种概念。广义上来说,虚拟化代表着对计算资源的抽象,而不仅仅局限于虚拟机的概念。例如对物理内存的抽象,产生了虚拟内存技术,使得应用程序认为其自身拥有连续可用的地址空间(Address Space),而实际上,应用程序的代码和数据可能是被分隔成多个碎片页或段),甚至被交换到磁盘、闪存等外部存储器上,即使物理内存不足,应用程序也能顺利执行。

狭义的虚拟化技术,则通常指的是硬件虚拟化技术,即计算元件在虚拟的硬件基础上而不是真实的硬件基础上运行。将这个概念应用到计算机系统中,可以在一台计算机上同时运行多个操作系统(例如,一台计算机可以同时运行 Linux 和 Windows),不同用户看到不同的单个系统,而且每一个操作系统中都有多个程序运行,每一个操作系统都运行在一个虚拟的CPU或者是虚拟主机上。这通常称为全虚拟化(full virtualization)。

硬件虚拟化也可以有更加复杂的格式,例如单个计算机看上去具有多个架构(对于一个用户来说,它是一个标准的 x86 平台;对于另外一个用户来说,它是 IBM Power PC 平台)。这种虚拟化形式通常被称为硬件仿真。

反之,更加简单的一种硬件虚拟化是操作系统虚拟化 (OS Level Virtualization),其中一台计算机可以运行相同类型的多个操作系统。在传统操作系统中,所有用户的进程本质上是在同一个操作系统的实例中运行,因此内核或应用程序的缺陷可能影响到其它进程。操作系统级虚拟化是一种在服务器操作系统中使用的轻量级的虚拟化技术,内核通过创建多个虚拟的操作系统实例(内核和库)来隔离不同的进程,不同实例中的进程完全不了解对方的存在。比较著名的有 Solaris Container,FreeBSD Jail 和 OpenVZ 等。

>>> 阅读全文

 

, , , ,