首页> 中国专利> 用于建立虚拟PCI设备和虚拟MMIO设备的泛型方法

用于建立虚拟PCI设备和虚拟MMIO设备的泛型方法

摘要

公开了一种用于实现将虚拟设备建立为虚拟外围控制器互连(PCI)设备或虚拟输入/输出(I/O)设备中的至少一个的方法的技术。本公开的方法包括接收针对PCI兼容设备的请求。所述方法还包括基于针对所述PCI兼容设备的请求来建立虚拟设备,其中所述虚拟设备被建立为虚拟PCI设备或虚拟I/O设备中的至少一个。

著录项

  • 公开/公告号CN104995613A

    专利类型发明专利

  • 公开/公告日2015-10-21

    原文格式PDF

  • 申请/专利权人 英特尔公司;

    申请/专利号CN201380073082.6

  • 发明设计人 W·杨;C·徐;L·梁;

    申请日2013-03-14

  • 分类号

  • 代理机构永新专利商标代理有限公司;

  • 代理人刘瑜

  • 地址 美国加利福尼亚

  • 入库时间 2023-12-18 11:38:13

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-02-16

    授权

    授权

  • 2015-11-18

    实质审查的生效 IPC(主分类):G06F13/40 申请日:20130314

    实质审查的生效

  • 2015-10-21

    公开

    公开

说明书

技术领域

本文所描述的实施例通常涉及处理设备,并且更具体地涉及用于建立 虚拟PCI设备和虚拟MMIO设备的泛型方法。

背景技术

计算系统能够包括多个部件,例如,处理设备(如,微型控制器、微 型处理器等)、存储器块、定时源、外围设备、外部接口、模拟接口、电压 调节器、功率管理电路等。存储器块、外部接口或其它部件可以包括功能 块,也被称为IP块或控制器,其提供处理设备和外围设备之间的接口。

计算系统中的部件能够与计算系统可访问的软件以及与外围设备以不 同方式进行通信,例如,通过外围部件互连(PCI)总线。软件可以从一些 外围设备(例如,闪速存储器)启动,然后由计算系统中的处理设备执行。

然而,计算系统中的一些部件(例如,功能块)可能不是PCI兼容的, 并且因此不能与使用PCI总线用于通信的软件进行通信。此外,一些软件 不能从某些外围设备(例如,PCI兼容外围设备)启动。

已经使用了多种方案来解决这些问题。解决功能块不能与使用PCI总 线用于通信的软件进行通信的当前方案包括硬件方案和软件方案。当前的 硬件方案需要改变功能块的硬件设计,以便使得功能块成为PCI兼容的。 当前的软件方案需要创建用于功能块的软件,例如,用于功能块的可以解 决功能块的不兼容性的专用设备驱动程序。解决软件不能从PCI兼容的外 围设备启动的当前方案需要改变PCI兼容的外围设备的硬件构造(例如, 改变硅)。然而,这些方案可能消耗相当大量的时间和成本。

附图说明

将从以下给出的详细描述以及根据本公开的各个实施例的附图来更全 面地理解本公开。然而,附图不应被理解为将本公开限制为具体实施例, 而仅是用于解释和理解。

图1是实现用于将虚拟设备建立为虚拟PCI设备或虚拟I/O设备的泛 型方法的处理设备的一个实施例的框图;

图2是示出了根据本公开的实施例的用于实现将虚拟设备建立为虚拟 PCI设备或虚拟I/O设备的泛型方法的虚拟设备模块的框图;

图3是示出了根据本公开的实施例的用于将虚拟设备建立为虚拟PCI 设备或虚拟I/O设备的方法的流程图;

图4是示出了根据本公开的实施例的用于将虚拟设备建立为虚拟PCI 设备的方法的流程图;

图5是示出了根据本公开的实施例的用于将虚拟设备建立为虚拟I/O设 备的方法的流程图;

图6是示出了根据本公开的实施例的用于使用虚拟设备的方法的流程 图;

图7是根据本公开的实施例的计算机系统的框图;

图8是根据本公开的另一实施例的计算系统的框图;以及

图9是根据本公开的又一实施例的计算系统的框图。

具体实施方式

软件(例如,操作系统或运行在计算系统的操作系统上的应用)可以 利用驱动程序来访问计算系统中的硬件设备(例如,外围设备)。当驱动程 序请求访问硬件设备时,驱动程序可以经由与硬件设备相关联的功能块来 发送访问请求。功能块然后能够访问硬件设备,接收来自硬件设备的响应, 并且将响应发送到驱动程序。因此,功能块用作驱动程序(以及相对应的 软件)和硬件设备之间的接口。功能块对于驱动程序和/或硬件设备而言可 以是透明的。驱动程序可以通过将用于硬件设备的命令(例如,诸如读取 或写入之类的访问命令)写入到计算系统中的外围部件互连(PCI)总线来 请求访问硬件设备。然而,如果与硬件设备相对应的功能块不是PCI兼容 的,则功能块可能不知道驱动程序试图访问硬件设备或可能不能与驱动程 序进行通信。

此外,操作系统可能仅能从一些硬件设备(例如,输入/输出(I/O)设 备)启动,并且可能不能从其它硬件设备启动。例如,操作系统可能不能 从操作系统视其为是可移除设备的外围设备(例如,PCI兼容设备)启动。 然而,计算系统不会将硬件设备视为可移除的,并且可能希望操作系统从 该硬件设备启动。

本公开的实施例提供了用于将虚拟设备建立为虚拟PCI设备或虚拟I/O 设备的泛型方法。在一个实施例中,本公开的方法包括接收针对PCI兼容 设备的请求。该方法还包括基于针对PCI兼容设备的请求来建立虚拟设备, 其中虚拟设备被建立为虚拟PCI设备或虚拟I/O设备中的至少一个。

虚拟设备可以被建立为用于不是PCI兼容的功能块的虚拟PCI设备, 并且虚拟设备可以被建立为用于与要从PCI兼容设备启动的操作系统相关 联的PCI兼容设备的虚拟I/O设备。通过将虚拟设备建立为用于不是PCI 兼容的功能块的虚拟PCI设备,针对与功能块相关联的PCI兼容设备的由 PCI总线上的软件发送的任意访问和/或请求可以由虚拟设备识别,并且其 可以被发送到功能块。因此,虚拟设备提供用于不是PCI兼容的功能块的 接口,以接收PCI兼容访问和/或请求。通过将虚拟设备建立为用于与要从 PCI兼容设备启动的操作系统相关联的PCI兼容设备的虚拟I/O设备,操作 系统能够从虚拟设备启动,这是因为操作系统将判定出操作系统从其启动 的设备是I/O设备而不是PCI兼容设备。

图1是根据本公开的实施例的实现用于建立虚拟PCI设备和虚拟 MMIO设备的泛型方法的设备100的框图。设备100的一些示例可以包括 但不限于:移动通信设备,例如,蜂窝手持式装置或智能电话;移动计算 设备,例如平板计算机、上网本、笔记本型计算机、膝上型计算机、台式 计算机、服务器计算机等等。

设备100可以包括例如主机105,以处理用于设备100的基线操作。主 机105例如可以包括处理模块110、功能块115、存储器模块120以及其它 模块135。处理模块110可以包括位于分离部件中的一个或多个处理器(也 称为处理设备),或者可替换地,体现在例如被布置在片上系统(SOC)配 置中的单个集成电路(IC)中的一个或多个处理核心。

功能块115可以包括被配置为支持处理模块110的电路。功能块115 可以包括接口/桥接电路。在一个实施例中,每一个功能块115是被配置为 处理与设备100中的专用总线(例如,PCI、串行AT附件(SATA)、通用 串行总线(USB)等)或接口(例如,多媒体卡(MMC)设备、嵌入式多 媒体卡(eMMC)设备、安全数字(SD)设备等)相关联的通信的集成电 路(IC)。例如,如果设备100包括用于PCI、SATA、USB、MMC、eMMC 和SD设备的总线和/或接口,则设备100将包括作为PCI控制器的功能块 115(例如,控制器)、作为SATA控制器的功能块115、作为USB控制器 的功能块115,作为MMC控制器的功能块115、作为eMMC控制器的功能 块115、以及作为SD控制器的功能块115。功能块115可以通过将一种类 型/速度的通信转换成另一种来处理各个模块之间的信令。每一个功能块115 还可以与多种不同的设备兼容,以允许不同的系统实现、升级等。功能块 115的功能中的一些还可以并入到处理模块110、存储器模块120、或其它 模块135中。

处理模块110可以执行指令。指令可以包括程序代码以使得处理模块 110执行各种动作,例如但不限于,读取数据、写入数据、处理数据、用公 式表示数据、转换数据、变换数据等。包括指令、数据等(未示出)的信 息可以存储于存储器模块120中。

存储器模块120可以包括固定或可移除格式的随机存取存储器(RAM) 或只读存储器(ROM)。RAM可以包括在设备100的操作期间保持信息的 存储器,例如,静态RAM(SRAM)或动态RAM(DRAM)。ROM可以 包括诸如计算设备BIOS存储器之类的存储器,以用于在设备100激活时提 供指令,可编程存储器(如,电可编程ROM(EPROM))、闪存等。其它 固定和/或可移除存储器可以包括:磁存储器,例如,软盘、硬盘驱动等; 电子存储器,例如固态闪速存储器(如,eMMC等);可移除存储器卡或棒 (例如,USB、微型SD等);光存储器,例如基于压缩盘的ROM(CD-ROM)、 全息等。

其它模块135可以包括用于支持设备100内的其它功能的模块。其它 模块135可以包括例如用于向设备100供电的模块、用于在设备100中支 持有线和/或无线通信的模块、用于在设备100中提供用户界面(UI)特征 的模块、用于支持专门功能的模块等。取决于例如形状因子、配置设备100 的用途等,其它模块100的组成是可变的。

外围设备140可以包括可移除或不可移除外围设备,例如,PCI兼容外 围设备、存储器映射I/O(MMIO)外围设备、磁存储器(如软盘、硬盘驱 动等)、电子存储器(例如,固态闪速存储器(如eMMC等))、可移除存储 器卡或棒(例如,USB、微型SD等)、光存储器(例如基于压缩盘的ROM (CD-ROM))、全息存储器,等等。外围设备可以由其所附着的总线编号 以及用于外围设备的类型的设备编号识别出。外围设备140可以包括存储 于外围设备140中的一个或多个软件部件145(例如,应用、操作系统等)。

存储器模块120的实施例可以包括虚拟设备模块125以及一个或多个 软件部件130。软件部件130可以包括应用、操作系统、BIOS、系统管理 中断处理(SMI)程序等。在一个实施例中,软件部件130将针对外围设备 140的请求(例如,枚举请求、访问请求等)发送给虚拟设备模块125。请 求可以是用于获得针对外围设备140的信息的请求,所述信息例如是针对 外围设备140的供应商标识符、设备标识符、以及地址信息。如果该信息 通过虚拟设备模块125返回,则软件部件130能够使用该信息经由PCI来 与外围设备140进行通信。

虚拟设备模块125能够接收针对外围设备140的请求。虚拟设备模块 125能够基于针对外围设备140的请求来建立虚拟设备。虚拟设备可以是虚 拟PCI设备或虚拟MMIO设备。

如果虚拟设备模块125判定所请求的外围设备140与不是PCI兼容的 功能块115相关联,则虚拟设备模块125能够建立作为虚拟PCI设备的虚 拟设备。如果功能块115不能读取或写入对PCI总线的访问请求,则功能 块115不是PCI兼容的。在一个实施例中,虚拟设备模块125通过读取或 写入对功能块115的访问请求来判定功能块115是否不是PCI兼容的。如 果功能块115返回错误或者功能块115不能读取或写入访问请求的其它指 示,则虚拟设备模块125可以确定功能块115不是PCI兼容的。在可替换 的实施例中,虚拟设备模块125通过从功能块115获得兼容性信息并且判 定功能块115的兼容性信息是否包括PCI,来判定功能块115是否不是PCI 兼容的。在另一实施例中,虚拟设备模块125通过从设备100的专用硬件 获得兼容性信息,来判定功能块115是否不是PCI兼容的。在又一实施例 中,虚拟设备模块125通过从SMI处理机(未示出)、BIOS(未示出)等 获得兼容性信息,来判定功能块115是否不是PCI兼容的。如果用于功能 块115的兼容性信息不包括PCI,则功能块115不是PCI兼容的。在一个实 施例中,虚拟设备模块125通过判定针对虚拟PCI设备的信息(例如,供 应商标识符、设备标识符和地址信息),来将虚拟设备建立为虚拟PCI设备。 在一些实施例中,响应于来自软件部件130的请求,虚拟设备模块125将 该信息发送给软件部件130。

如果虚拟设备模块125判定所请求的外围设备140与将从外围设备140 启动的软件部件145相关联,则虚拟设备模块125能够建立作为虚拟MMIO 设备的虚拟设备。在一个实施例中,虚拟设备模块125通过访问存储于外 围设备140上的一个或多个软件部件145,并且判定是否所述软件部件中的 任何是预定义的软件部件(例如,操作系统等),来判定外围设备140是否 与将从外围设备启动的软件部件145相关联。在一个实施例中,虚拟设备 模块125通过丢弃从软件部件130接收到的请求,并且确定针对虚拟I/O设 备的I/O地址范围,来将虚拟设备建立作为虚拟I/O设备。

一旦针对外围设备140建立了虚拟设备,则虚拟设备模块125可以将 虚拟设备存储在诸如存储器模块120之类的存储器中。在一些实施例中, 如果虚拟设备是用于外围设备140的虚拟PCI设备,则虚拟设备模块125 向软件部件130(例如,发送针对外围设备140的请求的软件部件130)中 的一个或多个提供针对所创建的虚拟设备的供应商标识符、设备标识符以 及地址信息。在一些实施例中,如果虚拟设备是用于外围设备140的虚拟 I/O设备,则软件部件130不再直接访问针对其发送请求的外围设备140, 但相反访问用于外围设备140的虚拟PCI设备或虚拟I/O设备。虚拟设备模 块125还可以提供软件部件130和虚拟设备之间的接口。在一些实施例中, 当从软件部件130接收到对I/O地址的访问时,虚拟设备模块125判定I/O 地址是否在作为虚拟I/O设备的虚拟设备的范围内。在这些实施例中,如果 虚拟设备模块125判定I/O地址在作为虚拟I/O设备的虚拟设备的范围内, 则虚拟设备模块125在向与虚拟I/O设备相关联的外围设备140提供访问请 求之前将I/O地址转换成PCI地址。

图2示出了根据本公开的一个实施例的用于实现建立虚拟PCI设备和 虚拟MMIO设备的泛型方法的虚拟设备模块200。在一个实施例中,虚拟 设备模块200与以上关于图1描述的虚拟设备模块125相同。虚拟设备模 块200可以包括虚拟设备判定模块205、虚拟PCI设备创建模块210、虚拟 I/O设备创建模块215,以及虚拟I/O设备地址转换模块220。在不损失普 遍性的情况下,虚拟设备模块200可以包括更多或更少的部件。

虚拟设备判定模块205能够接收针对外围设备的请求。该请求可以包 括关于请求的识别信息,例如,该请求是否是访问请求、枚举请求等。该 请求还可以包括针对外围设备的识别信息,例如,外围设备的地址。虚拟 设备模块125能够基于针对外围设备的请求来判定是否将虚拟设备建立为 虚拟PCI设备或虚拟I/O设备。

如果所请求的外围设备与不是PCI兼容的功能块相关联,则虚拟设备 判定模块205能够判定出虚拟设备应该被建立为虚拟PCI设备。在一个实 施例中,虚拟设备判定模块205通过从功能块获得兼容性信息并且确定针 对功能块的兼容新信息是否包括PCI,来判定所请求的外围设备是否与不是 PCI兼容的功能块相关联。在该实施例中,如果针对功能块的兼容性信息不 包括PCI,则虚拟设备判定模块205判定出该功能模块不是PCI兼容的。在 该实施例中,如果针对功能块的兼容性信息包括PCI,则虚拟设备判定模块 205判定出该功能模块是PCI兼容的。在可替换的实施例中,虚拟设备判定 模块205通过从SMI处理机(未示出)、陷阱(trap)处理机(未示出)或 中断处理机(未示出)获得信息,来判定所请求的外围设备是否与不是PCI 兼容的功能块相关联。如果外围设备与不是PCI兼容的功能块相关联,则 虚拟设备判定模块205可以将请求发送到虚拟PCI设备创建模块210来将 虚拟PCI设备建立为虚拟设备。

如果所请求的外围设备与将从外围设备启动的软件(例如,操作系统) 相关联,则虚拟设备判定模块205可以确定虚拟设备应该被建立为虚拟I/O 设备。在一个实施例中,虚拟设备判定模块205通过访问存储于外围设备 上的软件,并且判定软件中的任何是否是预定义类型的软件(例如,操作 系统等),来判定外围设备是否与将从外围设备启动的软件相关联。在可替 换的实施例中,虚拟设备判定模块205通过从SMI处理机、陷阱处理机或 中断处理机获得信息,来判定外围设备是否与将从外围设备启动的软件相 关联。如果所请求的外围设备与将从外围设备启动的软件相关联,则虚拟 设备判定模块205可以将请求发送到虚拟I/O设备创建模块215以将虚拟 I/O设备创建为虚拟设备。

虚拟PCI设备创建模块210可以接收来自虚拟设备判定模块205的请 求以创建虚拟PCI设备。虚拟PCI设备创建模块210可以通过基于与外围 设备相关联的功能块来判定针对虚拟PCI设备的识别信息和地址信息,来 创建虚拟PCI设备。所述识别信息可以包括供应商标识符、设备标识符等。 所述地址信息可以包括能够由软件(未示出)使用以访问虚拟PCI设备的 地址范围。在一个实施例中,虚拟PCI设备创建模块210从SMI处理机、 陷阱处理机或中断处理机来获得识别信息和地址信息。一旦虚拟PCI设备 创建模块210创建了虚拟PCI设备,则虚拟PCI设备创建模块210就能够 将虚拟PCI设备存储在存储器中。在一个实施例中,虚拟PCI设备创建模 块210将作为虚拟设备的虚拟PCI设备存储于存储器模块250内的虚拟设 备信息255中。

虚拟I/O设备创建模块215能够接收来自虚拟设备判定模块205的请求 以创建虚拟I/O设备。虚拟I/O设备创建模块215能够通过丢弃针对外围设 备的请求并且确定针对虚拟I/O设备的I/O地址范围,来创建虚拟I/O设备。 在一个实施例中,虚拟I/O设备创建模块215通过不响应针对外围设备的请 求来丢弃针对外围设备的请求。在可替换的实施例中,虚拟I/O设备创建模 块215通过将响应发送到请求失败的请求(例如,不成功的PCI读取),来 丢弃针对外围设备的请求。一旦虚拟I/O设备创建模块215创建了虚拟I/O 设备,虚拟I/O设备创建模块215就能够将虚拟I/O设备存储于存储器中。 在一个实施例中,虚拟I/O设备创建模块215将虚拟I/O设备存储于存储器 模块250内的虚拟设备信息255中。

虚拟I/O设备地址转换模块220能够接收对I/O地址的请求或访问。在 一个实施例中,从软件接收所述请求或访问。响应于所述请求或访问,虚 拟I/O设备地址转换模块220可以判定I/O地址是否在作为虚拟I/O设备的 虚拟设备的地址范围内。虚拟I/O设备地址转换模块220通过对I/O地址与 作为虚拟I/O设备的每一个虚拟设备的地址范围进行比较,来判定I/O地址 是否在虚拟I/O设备的地址范围内。在一个实施例中,虚拟I/O设备地址转 换模块220对I/O地址与虚拟设备信息255中的地址范围进行比较。如果 虚拟I/O设备地址转换模块220判定出I/O地址在作为虚拟I/O设备的虚拟 设备的地址范围内,则虚拟I/O设备地址转换模块220可以将I/O地址转换 为PCI地址,并且能够使得与虚拟设备相关联的外围设备的PCI地址能被 访问。

图3是根据本公开的实施例的用于建立虚拟PCI设备和虚拟MMIO设 备的方法300的流程图。方法300可以由处理逻辑执行,所述处理逻辑可 以包括硬件(例如,电路、专用逻辑、可编程逻辑、微代码等)、软件(例 如在处理设备上运行的指令)、固件,或其组合。在一个实施例中,方法300 由关于图1所描述的设备100执行。

在框305处,处理逻辑接收针对PCI兼容设备的请求。PCI兼容设备可 以是能够附接到PIC总线上的外围设备。针对PCI兼容设备的请求可以包 括关于请求的识别信息,例如,请求是否是访问请求、枚举请求等。在一 个实施例中,所述请求是从SMI处理机接收到的枚举请求,而执行方法300 的处理设备处于系统管理模式(SMM)。

SMM是处理设备的所有正常执行(包括OS)都被挂起的操作模式, 并且特殊的分离软件(通常是固件或硬件辅助调试器)在高权限模式中执 行。SMM提供隔离的存储器和执行环境,并且SMM代码对于操作系统(OS) 是不可见的同时保持对存储器的完全访问和对外围设备(例如PCI兼容设 备等)的完全控制。当启动SMM时,处理设备的当前状态被保存并且所有 其它进程被停止。高权限操作可以在SMM模式中执行,如调试、硬件管理、 安全功能、枚举等,随后处理设备基于处理设备的保存状态来恢复操作。 当发生系统管理中断(SMI)时,处理设备可以进入SMM并且运行SMI 处理机。在处理设备的执行开始(启动)时,在将新的外围设备添加到设 备上时,等等,可以生成SMI。例如,固件或BIOS能够在启动时生成SMI。

当接收到SMI时,SMI处理机通过查询(例如,试图读取)PCI总线 以确定PCI兼容设备来枚举处理设备可用的PCI兼容(外围)设备。如果 响应于启动而生成SMI,则设备中所有的PCI兼容设备可能尚未被枚举。 如果响应于添加了新的PCI兼容设备而生成SMI,则新的PCI兼容设备可 能尚未被枚举。SMI处理机可以生成针对每一个尚未被枚举的PCI兼容设 备的枚举请求。所述枚举请求可以包括针对PCI兼容设备的识别信息,例 如,针对PCI兼容设备的总线数量和设备数量。

返回图3,在框310处,处理逻辑判定所请求的PCI兼容设备是否与不 是PCI兼容的功能块相关联。如果功能块不能读取或写入对PCI总线的访 问请求,则该功能模块不是PCI兼容的。

在一个实施例中,处理逻辑通过从与PCI兼容设备相关联的功能块获 得兼容性信息,并且判定用于功能块的兼容性信息是否包括PCI兼容性, 来判定所请求的外围设备是否与不是PCI兼容的功能块相关联。如果针对 功能块的兼容性信息包括PCI兼容性,则处理逻辑判定该PCI兼容设备与 不是PCI兼容的功能块不相关联(换句话说,PCI兼容设备与是PCI兼容 的功能块相关联)。如果针对功能块的兼容性信息不包括PCI兼容性,则处 理逻辑判定该PCI兼容设备与不是PCI兼容的功能块相关联。

在可替换的实施例中,处理逻辑通过从SMI处理机获得针对与PCI兼 容设备相关联的功能块的兼容性信息,来判定所请求的外围设备是否与不 是PCI兼容的功能块相关联。所述兼容性信息能够包括与PCI兼容设备相 关联的功能块是否是PCI兼容的。SMI处理机能够收集关于驱动程序和/或 在处理设备上运行的或将要运行的软件(例如,应用)的信息,并且能够 判定哪个PCI兼容设备被驱动程序和/或软件支持。SMI处理机能够从文档、 从驱动程序或软件源代码等中收集关于驱动程序和/或软件的信息。当判定 PCI兼容设备由驱动程序和/或软件支持时,SMI处理机能够确定针对每一 个PCI兼容设备的相对应的功能块(例如,控制器),并且能判定相对应的 功能块是否是PCI兼容的。SMI处理机能够访问每一个功能块以判定每一 个功能块的PCI兼容性。例如,针对每一个功能块的设备类型信息可以被 SMI处理机访问。在一个实施例中,通过发送针对功能块的兼容性信息的 请求并且从SMI处理机接收针对功能块的兼容性信息,处理逻辑能够从 SMI处理机获得针对与PCI兼容设备相关联的功能块的兼容性信息。在可 替换实施例中,通过访问由SMI处理机写入的预定义的存储器位置,处理 逻辑能够从SMI处理机获得针对功能块的兼容性信息。如果所述兼容性信 息包括功能块不是PCI兼容的兼容性信息,则处理逻辑判定所述PCI兼容 设备与不是PCI兼容的功能块相关联。如果针对功能块的兼容性信息包括 功能块是PCI兼容的信息,则处理逻辑判定所述PCI兼容设备与不是PCI 兼容的功能块不相关联(换句话说,PCI兼容设备与是PCI兼容的功能块 相关联)。

在另一可替换实施例中,处理逻辑通过读取或写入对所请求的外围设 备的访问请求,来判定所请求的外围设备是否不是PCI兼容的。如果所请 求的外围设备返回错误或所请求的外围设备不能读取或写入访问请求的其 它指示,则处理逻辑能够判定所请求的外围设备不是PCI兼容的。

如果处理逻辑判定PCI兼容设备与不是PCI兼容的功能块不相关联, 则方法300进行到框320。如果处理逻辑判定PCI兼容设备与不是PCI兼容 的功能块相关联,则方法300进行到框315。

在框315处,处理逻辑将虚拟设备建立为虚拟PCI设备。处理逻辑能 够通过确定针对虚拟设备的PCI识别信息和地址信息,来将虚拟设备建立 为虚拟PCI设备。以下关于图4描述了将虚拟设备建立为虚拟PCI设备的 一个实现方式。在一个实施例中,当建立虚拟设备时,处理逻辑能够可选 地提供对在305处接收到的请求的响应。所述对请求的响应可以包括成功 读取与虚拟设备相关联的预定寄存器,并且还可以包括针对虚拟设备的标 识符信息,例如,针对虚拟设备的供应商标识符、设备标识符、I/O地址范 围、以及MMIO地址范围。例如,针对不是PCI兼容的具有GPIO控制器 的通用输入/输出(GPIO)设备的枚举请求将接收成功响应,并且包括针对 被创建用于与GPIO设备相关联的GPIO控制器的虚拟设备的供应商标识符 (例如,0x8888)、设备标识符(例如,0x9999)、I/O地址范围(例如, 0x200-0x20F)以及MMIO范围(0xA0000-0xA00FF)。

在框320处,处理逻辑判定PCI兼容设备是否与将从PCI兼容设备启 动的软件相关联。将从PCI兼容设备启动的软件可以是操作系统、软件应 用、BIOS等。在一些实施例中,将从PCI兼容设备启动的软件是要求从I/O 设备启动的软件,所述I/O设备例如是存储器映射的I/O外围设备。在这些 实施例中,软件可以被设计成不从被认为是可移除的设备的外围设备启动, 所述外围设备例如是PCI兼容设备(如,嵌入式多媒体存储器卡(eMMC) 等)。然而,一些PCI兼容设备是不可移除的,例如,SOC中的PCI设备。

在一个实施例中,处理逻辑通过访问存储于PCI兼容设备上的软件部 件,并且判定该软件部件是否是预定义的软件部件,来判定PCI兼容设备 是否与将从PCI兼容设备启动的软件相关联。处理逻辑能够通过将软件部 件与已经被判定为在是不可移除的外围设备上的一个或多个预定义软件部 件(例如,eMMC上的操作系统等)进行比较,来判定软件部件是否是预 定义的软件部件。如果所述比较指示存储于PCI兼容设备上的软件部件包 括一个或多个预定软件部件,则处理逻辑能够判定PCI兼容设备与将从PCI 兼容设备启动的软件相关联。如果所述比较指示存储于PCI兼容设备上的 软件部件不包括一个或多个预定软件部件,则处理逻辑能够判定PCI兼容 设备不与将从PCI兼容设备启动的软件相关联。

在可替换实施例中,处理逻辑通过从SMI处理机获得软件信息,来判 定PCI兼容设备是否与将从PCI兼容设备启动的软件相关联。在一个这样 的实施例中,从SMI处理机获得的软件信息包括PCI兼容设备上的软件部 件。在该实施例中,SMI处理机能够收集关于存储于PCI兼容设备上的驱 动程序和/或软件部件的信息。在该实施例中,处理逻辑能够获得软件信息, 并且将该软件信息与已经被判定为在不可移除的外围设备上的一个或多个 预定软件部件(例如,eMMC上的操作系统等)进行比较。如果所述比较 指示软件信息包括一个或多个预定软件部件,则处理逻辑能够判定PCI兼 容设备与将从PCI兼容设备启动的软件相关联。如果所述比较指示软件信 息不包括一个或多个预定软件部件,则处理逻辑能够判定PCI兼容设备与 将从PCI兼容设备启动的软件不相关联。在可替换的这样的实施例中,软 件信息包括在PCI兼容设备上的软件部件中的任意软件部件是否将从PIC 兼容设备启动的指示符(例如,正指示符,如设置为1的位;或负指示符, 如设置为0的位)。在该实施例中,处理逻辑获得该软件信息,并且基于指 示符来判定PCI兼容设备是否与将从PCI兼容设备启动的软件相关联。如 果指示符指示PCI兼容设备上的软件将从PCI兼容设备启动(例如,正指 示符),则处理逻辑可以判定PCI兼容设备与将从PCI兼容设备启动的软件 相关联。如果指示符指示PCI兼容设备不与将从PCI兼容设备启动的软件 相关联(例如,负指示符),则处理逻辑可以判定PCI兼容设备与将从PCI 兼容设备启动的软件不相关联。

在一个实施例中,处理逻辑能够通过发送针对PCI兼容设备的软件信 息的请求以及从SMI处理机接收针对PCI兼容设备的软件信息,来从SMI 处理机获得针对PCI兼容设备的软件信息。在可替换实施例中,处理逻辑 能够通过访问由SMI处理机写入的预定义的存储器单元,来从SMI处理机 获得针对PCI兼容设备的软件信息。

如果处理逻辑判定PCI兼容设备不与将从PCI兼容设备启动的软件相 关联,则方法300以不建立虚拟设备结束。如果处理逻辑判定PCI兼容设 备与将从PCI兼容设备启动的软件相关联,则方法300进行到框325。

在框325处,处理逻辑将虚拟设备建立为虚拟I/O设备。在一个实施例 中,虚拟I/O设备是虚拟MMIO设备。以下结合图5描述了将虚拟设备建 立为虚拟I/O设备的一种实现方式。在一个实施例中,当建立虚拟设备时, 处理逻辑能够可选地提供对在框305处接收到的请求的响应。所述对请求 的响应可以包括不成功的读取与PCI兼容设备相关联的预定寄存器。

图4是根据本公开的实施例的用于将虚拟设备建立为虚拟PCI设备的 方法400的流程图。方法400可以由处理逻辑执行,所述处理逻辑可以包 括硬件(例如,电路、专用逻辑、可编程逻辑、微代码等)、软件(例如, 在处理设备上运行的指令)、固件,或其组合。在一个实施例中,方法400 由结合图1所描述的设备100执行。

在框405处,处理逻辑判定针对虚拟设备的供应商标识符。在一个实 施例中,通过从SMI处理机或BIOS获得供应商标识符来确定供应商标识 符。从SMI处理机或BIOS识别出的供应商可以由SMI处理机或BIOS进 行分配,或能够匹配由驱动程序或软件部件要求的供应商标识符。例如, 如果驱动程序请求供应商标识符“0x8086”,则SMI处理机或BIOS将供应 商标识符“0x8086”分配给虚拟设备。在可替换实施例中,通过确定与PCI 兼容设备相关联的供应商标识符以及将针对虚拟设备的供应商标识符配置 为与所确定的供应商标识符相同,来确定供应商标识符。例如,如果PCI 兼容设备是具有供应商标识符0x8888的GPIO设备,则针对虚拟设备的相 对应的供应商标识符将也会是0x8888。

在框410处,处理逻辑确定针对虚拟设备的设备标识符。在一个实施 例中,通过从SMI处理机或BIOS获得设备标识符,来确定设备标识符。 从SMI处理机或BIOS识别出的供应商可以通过SMI处理机或BIOS分配, 或能够匹配由驱动程序或软件部件要求的供应商标识符。例如,如果驱动 程序请求设备标识符“0x8086”,则SMI处理机或BIOS将设备标识符 “0x8086”分配给虚拟设备。在可替换实施例中,通过确定与PCI兼容设 备相关联的设备标识符以及将虚拟设备的设备标识符配置为与所确定的设 备标识符相同,来确定设备标识符。例如,如果PCI兼容设备是具有设备 标识符0x9999的GPIO设备,则针对虚拟设备的相对应的设备标识符将也 会是0x9999。

在框415处,处理逻辑确定针对虚拟设备的地址信息。针对虚拟设备 的地址信息可以是针对虚拟设备的地址I/O地址范围和MMIO地址范围。 在一个实施例中,可以通过从SMI处理机、BIOS、或硬件规范来获得地址 信息,从而确定地址信息。在可替换实施例中,通过确定与PCI兼容设备 相关联的地址信息,并且将针对虚拟PCI设备的地址信息配置为与所确定 的地址信息相同,来确定地址信息。例如,如果PCI兼容设备是具有包括 0x200到0x20F的I/O范围以及0xA0000到0xA00FF的MMIO地址范围在 内的地址信息的GPIO设备,则针对虚拟设备的相对应的地址信息将也会是 0x200到0x20F的I/O范围以及0xA0000到0xA00FF的MMIO地址范围。 所述地址信息可以包括能够由软件部件(未示出)使用来访问虚拟设备的 针对虚拟设备的地址范围。

图5是根据本公开的实施例的用于将虚拟设备建立为虚拟I/O设备的方 法500的流程图。方法500可以由处理逻辑执行,所述处理逻辑可以包括 硬件(例如,电路、专用逻辑、可编程逻辑、微代码等)、软件(例如,在 处理设备上运行的指令)、固件,或其组合。在一个实施例中,方法500由 关于图1所描述的设备100执行。

在框505处,处理逻辑丢弃针对PCI兼容设备的请求。在一个实施例 中,所述请求是与PCI兼容设备相关联的枚举请求。通过丢弃针对PCI兼 容设备的请求,处理逻辑能够对做出请求的软件提供反馈:没有PCI兼容 设备与请求相关联。这将使得软件相信软件存储于MMIO设备上或软件正 在访问MMIO设备。在一个实施例中,处理逻辑通过不响应请求,来丢弃 针对PCI兼容设备的请求。在可替换实施例中,处理逻辑通过生成对请求 的响应,所述响应包括不成功读取与PCI兼容设备相关联的一个或多个预 定寄存器(例如,与请求中所提供的供应商标识符和设备标识符相关联的 PCI配置寄存器),来丢弃针对PCI兼容设备的请求。

在框510处,处理逻辑确定针对虚拟I/O设备的I/O地址范围。在一个 实施例中,I/O地址范围是MMIO地址范围。在一个实施例中,处理逻辑 通过从SMI处理机获得I/O地址范围,来确定针对虚拟I/O设备的I/O地址 范围。在可替换实施例中,处理逻辑通过从高级配置和功率接口(ACPI) 表获得(例如,解析)针对PCI兼容设备的I/O地址范围,来确定针对虚拟 I/O设备的I/O地址范围。ACPI规范能够提供针对由操作系统进行的设备 配置和功率管理的开放标准。ACPI表可以包括系统中可用的针对设备的设 备资源信息。针对设备的设备资源信息可以包括设备名称、MMIO地址范 围、I/O地址范围、中断机制、与设备相关联的设备等。

图6是根据本公开的实施例的用于使用虚拟设备的方法600的流程图。 方法600可以由处理逻辑执行,所述处理逻辑可以包括硬件(例如,电路、 专用逻辑、可编程逻辑、微代码等)、软件(例如,在处理设备上运行的指 令)、固件,或其组合。在一个实施例中,方法600由关于图1所描述的设 备100执行。

在框605处,处理逻辑接收对于I/O地址的访问请求。在一个实施例中, I/O地址是MMIO地址。在一个实施例中,对于I/O地址的访问请求是从软 件接收的。

在框610处,处理逻辑判定I/O地址是否在为虚拟I/O设备的虚拟设备 的地址范围内。处理逻辑可以通过将该I/O地址与计算系统中的每一个虚拟 I/O设备的地址范围进行比较,来判定I/O地址是否在为虚拟I/O设备的虚 拟设备的地址范围内。如果处理逻辑判定I/O地址不在为虚拟I/O设备的虚 拟设备的地址范围内,则方法600结束。如果处理逻辑判定I/O地址在虚拟 I/O设备的地址范围内,则方法600进行到框615。在一个实施例中,框610 是可选的并且不被执行。在该实施例中,判定I/O地址是否在为虚拟I/O设 备的虚拟设备的地址范围内是由SMI处理机执行的。

在框615处,处理逻辑确定与I/O地址相对应的PCI设备的PCI地址。 处理逻辑可以通过从SMI处理机获得针对I/O地址的PCI地址,来判定与 I/O地址相对应的PCI设备的PCI地址。在一个实施例中,如果处理逻辑不 支持存储器空间陷阱,则框615是可选的。在该实施例中,处理逻辑将访 问针对虚拟I/O设备先前确定的针对虚拟I/O设备的I/O地址,这公开了与 PCI设备的I/O地址相同的I/O地址。

例如,如果系统支持存储器空间中的陷阱,则当访问发生在作为虚拟 I/O设备的虚拟设备的监控地址范围内时处理逻辑触发SMI。在该示例中, SMI处理机将被触发并且确定I/O地址是否在虚拟设备的地址范围内,以及 从I/O地址转换为PCI地址。

图7是根据本公开的实施例的包括用于建立虚拟PCI设备和虚拟 MMIO设备的逻辑电路的SoC 700的框图。虚线框是更为高级的SoC上的 可选特征。在图7中,互连单元712与以下项目耦合:应用处理器720,其 包括一个或多个核心702A-N以及共享高速缓存单元706的集合;系统代理 单元710;总线控制器单元716;集成存储器控制器单元714;一组或者一 个或多个介质处理器718,其可以包括集成图形逻辑708、用于提供静止和 /或视频摄像机功能的图像处理器724、用于提供硬件音频加速的音频处理 器726、以及用于提供视频编码/解码加速的视频处理器728;静态随机存取 存储器(SRAM)单元730;直接存储器存取(DMA)单元732;以及用于 与一个或多个外部显示器耦合的显示器单元740。

存储器层级包括核心内的一级或多级高速缓存,一组或者一个或多个 共享高速缓存单元706,以及与一组集成存储器控制器单元714耦合的外部 存储器(未示出)。所述一组共享高速缓存单元706可以包括一个或多个中 间级别高速缓存,例如,二级(L2)、三级(L3)、四级(L4)、或其它级别 的高速缓存、最后一级高速缓存(LLC),和/或其组合。

在一些实施例中,核心702A-N中的一个或多个能够是多线程的。

系统代理710包括调整和操作核心702A-N的那些部件。系统代理单元 710可以包括例如功率控制单元(PCU)和显示器单元。PCU可以是或包括 用于调整核心702A-N和集成图形逻辑708的功率状态所需的逻辑和部件。 显示器单元用于驱动一个或多个外部连接的显示器。

根据架构和/或指令集,核心702A-N可以是同构的或异构的。例如, 一些核心702A-N可以是有序的,而其它的则是乱序的。作为另一示例,两 个或更多个核心702A-N能够执行相同的指令集,而其它的则仅能够执行所 述指令集的子集或不同的指令集。

应用处理器720可以是通用处理器,例如,CoreTMi3、i5、i7、2Duo 和Quad、XeonTM、ItaniumTM、XScalTM或StrongARMTM处理器,其可从加 利福尼亚的圣克拉拉的英特尔公司获得。可替换地,应用处理器720可以 来自其它公司(例如,ARM Holding有限公司)的MIPS等。应用处理器 720可以是专用处理器,例如,网络或通信处理器、压缩引擎、图形处理器、 协同处理器、嵌入式处理器等。应用处理器720可以实现于一个或多个芯 片上。应用处理器720可以利用任意数量的处理技术(例如,BiCMOS、 CMOS或NMOS)实现于一个或多个基板上和/或是其一部分。

在一个实施例中,应用处理器720还包括根据本发明的实施例的用于 实现建立虚拟PCI设备和虚拟MMIO设备的逻辑。例如,应用处理器720 可以包括用于执行虚拟设备模块(例如,关于图1描述的虚拟设备模块125) 的逻辑,其中,虚拟设备模块能够基于针对外围设备的请求来建立虚拟设 备。虚拟设备可以是虚拟PCI设备或虚拟MMIO设备。

图8是根据本公开的片上系统(SOC)设计的实施例的框图。作为具 体的示意性示例,SOC 800包括在用户设备(UE)中。在一个实施例中, UE指的是由终端设备用于通信的任何设备,例如,手持电话、智能电话、 平板电脑、超薄笔记本、具有宽带适配器的笔记本,或任意其它类似的通 信设备。通常,UE连接到基站或节点上,所述UE可能本质上与GSM网 络中的移动站(MS)相对应。

因此,SOC 800包括两个核心—806和807。核心806和807可以符合 指令集架构,例如,基于Architecture CoreTM处理器、Advaced Micro  Devices,Inc.(AMD)处理器、基于MIPS的处理器、基于ARM的处理器 设计、或其顾客以及其许可方或接管者。核心806和807耦合到与总线接 口单元809和L2高速缓存810相关联的高速缓存控制器808上,以与系统 800的其它部件进行通信。互连件810包括片上互连件,例如,IOSF、AMBA 或上述的其它互连件,其可能实现了上述公开的一个或多个方面。

接口810将通信信道提供给其它部件,例如,订户身份模块(SIM)830 其用于与SIM卡进行接合;启动rom 835以保存由核心806和807执行的 启动代码以初始化和启动SOC 800;SDRAM控制器840,其用于与外部存 储器(例如,DRAM 806)进行接合;闪存控制器845,其用于与非易失性 存储器(例如,闪存865)进行接合;外围控制850(例如,串行外围接口), 其用于与外围部件进行接合;视频编码解码器820和视频接口825,其用于 显示和接收输入(例如,支持触摸输入);GPU 815,其用于执行与图像有 关的计算,等等。任何这些接口可以并入到本文所描述的本公开的方面。

在一个实施例中,核心806和807也包括根据本发明的实施例的用于 实现建立虚拟PCI设备和虚拟MMIO设备的逻辑。例如,核心806和807 可以包括用于执行虚拟设备模块(例如,关于图1描述的虚拟设备模块125) 的逻辑,其中,虚拟设备模块能够基于针对外围设备(例如,DRAM 860、 闪存865等)的请求来建立虚拟设备。虚拟设备可以是虚拟PCI设备或虚 拟MMIO设备。

另外,系统800示出了用于通信的外围部件,例如,蓝牙模块870、3G 调制解调器875、GPS 880、以及WiFi 885。如上所述应注意的是,UE包 括用于通信的无线电装置。结果,并不要求所有这些外围通信模块。然而, 在UE中,将包括用于外部通信的一些形式的无线装置。

图9示出了计算机系统900的示例性形式中的机器的示意性图示,在 计算机系统900中,可以执行使得机器执行本文所讨论的任意一种或多种 方法的一组指令。在可替换实施例中,所述机器可以连接(例如,联网) 到LAN、内联网、外联网、或互联网中的其它机器上。机器可以在客户端- 服务器网络环境中的服务器或客户端设备容量内进行操作或者作为对等 (或分布式)网络环境中的对等机器操作。机器可以是个人计算机(PC)、 平板PC、机顶盒(STB)、个人数字助理(PDA)、蜂窝电话、网络应用、 服务器、网络路由器、交换机或桥,或能够执行指定机器将要采取的动作 的一组指令(顺序或其它方式)的任意机器。此外,虽然仅示出了单个机 器,但术语“机器”还应被理解为包括单个和集体执行一组(或多组)指 令以执行本文所讨论的一种或多种方法的机器的任意集合。

计算机系统900包括处理设备902、主存储器904(例如,只读存储器 (ROM)、闪速存储器、动态随机存取存储器(DRAM)(例如,同步DRAM (SDRAM)或DRAM(RDRAM)等))、静态存储器906(例如,闪速存 储器、静态随机存取存储器(SRAM)等),以及数据存储设备918,其经 由总线930彼此进行通信。

处理设备902表示一个或多个通用处理设备,例如,微型处理器、中 央处理单元等。更具体地,处理设备可以是复杂指令集计算(CISC)微型 处理器、精简指令集计算机(RISC)微型处理器,超长指令字(VLIW)微 型处理器、或实现其它指令集的处理器、或实现组合指令集的处理器。处 理设备902还可以是一个或多个专用处理设备,例如,专用集成电路 (ASIC)、现场可编程门阵列(FPGA)、数字信号处理器(DSP)、网络处 理器等。在一个实施例中,处理设备902可以包括一个或多个处理核心。 处理设备902被配置为执行处理逻辑926,以用于执行本文所讨论的操作和 步骤。在一个实施例中,处理设备902与关于图1描述的实现用于建立虚 拟PCI设备和虚拟MMIO设备的泛型方法的处理设备100相同。例如,处 理设备902可以包括虚拟设备模块,例如,图1的虚拟设备模块125。

计算机系统900还可以包括与网络920可通信地耦合的网络接口设备 908。计算机系统900还可以包括视频显示单元910(例如,液晶显示器(LCD) 或阴极射线管(CRT))、字母数字输入设备912(例如,键盘)、光标控制 设备914(例如,鼠标),以及信号生成设备916(例如,扬声器)。此外, 计算机系统900可以包括图形处理单元922、视频处理单元928、以及音频 处理单元932。

数据存储设备918可以包括机器可访问存储介质924,在其上存储有实 现本文描述的功能的任意一种或多种方法的软件926,例如,实现如上所述 建立虚拟PCI设备和虚拟MMIO设备的泛型方法。软件926还可以在由计 算机系统900对其执行期间完全或至少部分地驻于主存储器904内作为指 令926,和/或在处理设备902内作为处理逻辑926;主存储器904和处理设 备902也构成机器可访问存储介质。

机器可读存储介质924还可以用于存储实现建立虚拟PCI设备和虚拟 MMIO设备的泛型方法的指令926,例如关于图1的设备100所描述的,和 /或包含调用上述应用的方法的软件库。虽然在示例性实施例中将机器可读 存储介质924示出为是单个介质,但是术语“机器可访问存储介质”应该 被认为包括存储一组或多组指令的单个介质或多个媒介(例如,集中式或 分布式数据库,和/或相关联的高速缓存和服务器)。术语“机器可读存储介 质”也应该被认为包括能够存储、编码或携带一组用于由机器执行的一组 指令的并且使得机器执行任意一种或多种本公开的方法的任意介质。术语 “机器可读存储介质”因此可以被认为包括但不限于固态存储器以及光和 磁介质。

以下示例属于进一步的实施例。

示例1是一种用于建立虚拟设备的装置,包括:1)存储器;以及2) 与存储器通信地耦合的处理设备,所述处理设备用于:接收针对外围控制 器互连(PCI)兼容设备的PCI请求;以及基于所述PCI兼容设备来建立虚 拟设备,其中所述虚拟设备被建立为虚拟PCI设备或虚拟输入/输出(I/O) 设备中的至少一个。

在示例2中,示例1的所述PCI兼容设备能够可选地与软件驱动程序 相关联,其中所述软件驱动程序用于将PCI兼容的访问请求发送给虚拟设 备,其中所述虚拟设备将所述PCI兼容访问请求提供给功能块,并且其中 所述功能块基于所述PCI兼容的访问请求来与所述PCI兼容设备进行通信。

在示例3中,操作系统可选地利用示例1的所述虚拟设备来从所述PCI 兼容设备启动。

在示例4中,基于所述PCI兼容设备来建立虚拟设备,所述示例1的 处理设备能够可选地基于判定所述PCI兼容设备与不是PCI兼容的功能块 相关联,来将所述虚拟设备建立为虚拟PCI设备;以及基于判定所述PCI 兼容设备与将从PCI兼容设备启动的操作系统相关联,来将所述虚拟设备 建立为虚拟I/O设备。

在示例5中,将所述虚拟设备建立为虚拟PCI设备,所述示例4的处 理设备可选地确定针对所述虚拟设备的供应商标识符;确定针对所述虚拟 设备的设备信息;以及确定针对所述虚拟设备的地址信息。

在示例6中,示例5的处理设备能够可选地响应于针对所述PCI兼容 设备的请求,发送针对所述虚拟设备的供应商标识符、针对所述虚拟设备 的设备信息、以及针对所述设备的地址信息。

在示例7中,将所述虚拟设备建立为虚拟I/O设备,示例4的处理设备 可选地丢弃针对所述PCI兼容设备的PCI枚举请求;以及确定针对所述虚 拟设备的I/O地址范围。

在示例8中,示例1的处理设备可选地接收针对I/O地址的存储器访问; 当所述虚拟设备被建立为虚拟I/O设备时,判定所述I/O地址是否与所述虚 拟设备相关联;以及当所述虚拟设备被建立为虚拟I/O设备时,基于判定出 所述I/O地址与所述虚拟设备相关联,来判定与所述I/O地址相对应的所述 PCI设备相关联的PCI地址。

在示例9中,示例1的虚拟I/O设备可以可选地包括虚拟存储器映射的 输入/输出(MMIO)设备。

在示例10中,示例1的请求可以可选地包括针对PCI兼容设备的PCI 枚举请求。

各个实施例可以具有上述操作特征的不同组合。例如,以上描述的装 置的所有可选特征也可以相对于本文所描述的方法或过程而被实现,并且 示例中的细节可以用于一个或多个实施例中的任意地方。

示例11是一种用于建立虚拟设备的方法,所述方法包括:1)接收针 对外围控制器互连(PCI)兼容设备的PCI请求;以及2)基于所述PCI兼 容设备来建立虚拟设备,其中所述虚拟设备被建立为虚拟PCI设备或虚拟 输入/输出(I/O)设备中的至少一个。

在示例12中,示例11的PCI兼容设备与软件驱动程序相关联,其中 所述软件驱动程序用于将PCI兼容访问请求发送给所述虚拟设备,其中所 述虚拟设备将所述PCI兼容的访问请求提供给功能块,并且其中所述功能 块基于所述PCI兼容访问请求来与所述PCI兼容设备进行通信。

在示例13中,操作系统可选地利用示例11的虚拟设备从所述PCI兼 容设备启动。

在示例14中,基于示例11的PCI兼容设备来建立虚拟设备,可以可 选地包括:基于判定所述PCI兼容设备与不是PCI兼容的功能块相关联, 来将所述虚拟设备建立为虚拟PCI设备;以及基于判定所述PCI兼容设备 与将从PCI兼容设备启动的操作系统相关联,来将所述虚拟设备建立为虚 拟I/O设备。

在示例15中,示例14的将所述虚拟设备建立为虚拟PCI设备可以可 选地包括:确定针对所述虚拟设备的供应商标识符;确定针对所述虚拟设 备的设备信息;以及确定针对所述虚拟设备的地址信息。

在示例16中,示例15的主题可以可选地包括响应于针对所述PCI兼 容设备的请求,发送针对所述虚拟设备的供应商标识符、针对所述虚拟设 备的设备信息、以及针对所述设备的地址信息。

在示例17中,示例14的将所述虚拟设备建立为虚拟I/O设备可以可选 地包括:丢弃针对所述PCI兼容设备的PCI枚举请求;以及确定针对所述 虚拟设备的I/O地址范围。

在示例18中,示例11的主题可以可选地包括:接收针对I/O地址的存 储器访问;当所述虚拟设备被建立为虚拟I/O设备时,判定所述I/O地址是 否与所述虚拟设备相关联;以及当所述虚拟设备被建立为虚拟I/O设备时, 基于判定出所述I/O地址与所述虚拟设备相关联,判定与所述I/O地址相对 应的所述PCI设备相关联的PCI地址。

在示例19中,示例11的虚拟I/O设备可以可选地包括虚拟存储器映射 输入/输出(MMIO)设备。

在示例20中,示例11的请求可以可选地包括针对PCI兼容设备的PCI 枚举请求。

各个实施例可以具有上述操作特征的不同组合。例如,以上描述的方 法的所有可选特征也可以相对于非暂时性的、计算机可读存储介质而被实 现。示例中的细节可以用于一个或多个实施例中的任意地方。

示例21是一种包括数据的非暂时性、机器可读存储介质,所述数据当 被处理设备访问时,使得处理设备执行示例11-20所述的方法。

示例22是一种用于建立虚拟设备的装置,包括:1)存储器;以及2) 与所述存储器耦合的计算系统,其中所述计算系统被配置为执行根据权利 要求11-20中的任一项所述的方法.

在示例23中,示例22的计算系统可以可选地包括用于接收针对外围 控制器互连(PCI)兼容设备的PCI请求的接口;以及与所述接口耦合的虚 拟设备处理块。

示例24是一种用于建立虚拟设备的计算系统,包括:用于接收针对外 围控制器互连(PCI)兼容设备的PCI请求的接口;以及与所述接口耦合的 虚拟设备处理块,其中所述虚拟设备处理块用于基于PCI兼容设备来建立 虚拟设备,其中所述虚拟设备被建立为虚拟PCI设备或虚拟输入/输出(I/O) 设备中的至少一个。

在示例25中,示例24的虚拟设备处理块可以可选地包括:虚拟设备 判定块,其用于判定PCI兼容设备是否与不是PCI兼容的功能块相关联, 以及用于判定所述PCI兼容设备是否与将从PCI兼容设备启动的操作系统 相关联;虚拟PCI设备创建块,其用于当PCI兼容设备与不是PCI兼容的 功能块相关联时,将虚拟设备建立为虚拟PCI设备;以及虚拟I/O设备创建 块,其用于当所述PCI兼容设备与将从PCI兼容设备启动的操作系统相关 联时,将所述虚拟设备建立为虚拟I/O设备。

在示例26中,用于将虚拟设备建立为虚拟PCI设备,示例25的虚拟 PCI设备创建块可选地用于确定针对所述虚拟设备的供应商标识符;确定针 对所述虚拟设备的设备信息;以及确定针对所述虚拟设备的地址信息。

在示例27中,将虚拟设备建立为虚拟I/O设备,示例25的虚拟I/O设 备创建块可选地丢弃针对所述PCI兼容设备的PCI枚举请求;以及确定针 对所述虚拟设备的I/O地址范围。

在示例28中,示例24的虚拟设备处理块能够可选地响应于针对所述 PCI兼容设备的请求,发送针对所述虚拟设备的供应商标识符、针对所述虚 拟设备的设备信息、以及针对所述设备的地址信息。

在示例29中,示例24的虚拟设备处理块可以可选地包括:虚拟I/O设 备地址转换块,其用于接收针对I/O地址的存储器访问,当所述虚拟设备被 建立为虚拟I/O设备时,判定所述I/O地址是否与所述虚拟设备相关联;以 及当所述虚拟设备被建立为虚拟I/O设备时,基于判定出所述I/O地址与所 述虚拟设备相关联,判定与所述I/O地址相对应的所述PCI设备相关联的 PCI地址。

示例30是一种包括指令的非暂时性机器可读存储介质,所述指令在被 计算系统执行时,使得计算系统执行包括以下的操作:1)接收针对外围控 制器互连(PCI)兼容设备的PCI请求;以及2)基于所述PCI兼容设备来 建立虚拟设备,其中所述虚拟设备被建立为虚拟PCI设备或虚拟输入/输出 (I/O)设备中的至少一个。

在示例31中,其中,示例30的PCI兼容设备可以可选地与软件驱动 程序相关联,其中所述软件驱动程序可选地将PCI兼容的访问请求发送给 所述虚拟设备,其中示例30的虚拟设备能够可选地将所述PCI兼容的访问 请求提供给功能块,并且其中所述功能块可以可选地基于所述PCI兼容的 访问请求与所述PCI兼容设备进行通信。

在示例32中,操作系统利用示例30的虚拟设备从所述PCI兼容设备 启动。

在示例33中,其中,基于示例30的PCI兼容设备来建立虚拟设备, 能够可选地包括:基于判定所述PCI兼容设备与不是PCI兼容的功能块相 关联,来将所述虚拟设备建立为虚拟PCI设备;以及基于判定所述PCI兼 容设备与将从PCI兼容设备启动的操作系统相关联,来将所述虚拟设备建 立为虚拟I/O设备。

在示例34中,示例33的将所述虚拟设备建立为虚拟PCI设备,可以 可选地包括:确定针对所述虚拟设备的供应商标识符;确定针对所述虚拟 设备的设备信息;以及确定针对所述虚拟设备的地址信息。

在示例35中,示例34的将虚拟设备建立为虚拟PCI设备可以可选地 包括:响应于针对所述PCI兼容设备的请求,发送针对所述虚拟设备的供 应商标识符、针对所述虚拟设备的设备信息、以及针对所述设备的地址信 息。

在示例36中,示例33的将所述虚拟设备建立为虚拟I/O设备,可以可 选地包括:丢弃针对所述PCI兼容设备的PCI枚举请求;以及确定针对所 述虚拟设备的I/O地址范围。

在示例37中,示例30的主题可以可选地包括:接收针对I/O地址的存 储器访问;当所述虚拟设备被建立为虚拟I/O设备时,判定所述I/O地址是 否与所述虚拟设备相关联;以及当所述虚拟设备被建立为虚拟I/O设备时, 基于判定出所述I/O地址与所述虚拟设备相关联,判定与所述I/O地址相对 应的所述PCI设备相关联的PCI地址。

示例38是一种用于建立虚拟设备的装置,包括:1)接收针对外围控 制器互连(PCI)兼容设备的PCI请求的接口;以及2)用于基于所述PCI 兼容设备来建立虚拟设备的单元,其中所述虚拟设备被建立为虚拟PCI设 备或虚拟输入/输出(I/O)设备中的至少一个。

在示例39中,示例38的用于基于PCI兼容设备来建立虚拟设备的单 元能够可选地包括:用于判定PCI兼容设备是否与不是PCI兼容的功能块 相关联的单元;用于基于判定出所述PCI兼容设备与不是PCI兼容的功能 块相关联来将所述虚拟设备建立为虚拟PCI设备的单元;用于判定所述PCI 兼容设备是否与将从PCI兼容设备启动的操作系统相关联的单元;以及用 于基于判定出所述PCI兼容设备与将从PCI兼容设备启动的操作系统相关 联来将所述虚拟设备建立为虚拟I/O设备的单元。

在上述描述中阐述了多个细节。然而对于本领域的技术人员显而易见 的是,可以在没有这些具体细节的情况下来实践本公开。在一些实例中, 以框图的形式而不是细节示出了公知的结构和设备,以便避免使本公开难 以理解。

具体实施方式的一些部分借由计算机存储器内的数据位上的操作的算 法和符号表示进行表示。这些算法描述和表示是数据处理领域中的技术人 员所用的最有效地向本领域的其他技术人员传达他们的工作的实质的手 段。算法在本文中通常被认为是导致期望结果的操作的自适应序列。操作 是需要物理量的物理操纵。通常,虽然不是必要的,但是这些量采用电或 磁信号的形式,其能够被存储、转移、组合、比较或者操纵。主要出于共 同使用的原因,已经多次证明了将这些信号称作位、值、元素、符号、字 符、术语、数字等是方便的。本文所描述的框可以是硬件、软件、固件或 其组合。

然而,应该记住的是,所有这些以及类似的术语将与适当的物理量相 关联,并且仅是应用于这些量的方便标签。除非明确以其它方式指出,否 则如从以下讨论中显而易见的,应当意识到遍及说明书、讨论使用的术语 例如“发送”、“接收”、“生成”、“判定”、“创建”、“转换”、“丢弃”、“比 较”等指的是计算机系统或类似的电子计算设备的动作和处理,所述计算 机系统或类似的电子计算设备将在计算机寄存器和存储器内表示为物理 (电子)量的数据操纵和转变为类似地被表示在计算机系统存储器或寄存 器或其它这种信息存储、传输或显示设备中的物理量的其它数据。

本公开还涉及用于执行本文的操作的装置。该装置可以是出于所要求 的目的而专门构造的,或者其可以包括由存储于计算机内的计算机程序选 择性地激活或重新配置的通用计算机。这样的计算机程序可以存储于机器 可读存储介质中,例如但不限于,任何类型的盘,包括软盘、光盘、CD-ROM 以及磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、EPROM、 EEPROM、磁或光卡,或者适于存储电子指令的任意类型的介质,其中的 每一个都耦合到计算机系统总线上。

本文所呈现的算法和显示本质上都不涉及任何特定的计算机或其它装 置。根据本文的教导各种通用系统可以与程序一起使用,或者可以证明构 建更专有的装置来执行操作是方便的。根据以下描述,多种这种系统所要 求的结构将变得清晰。另外,并不结合任意特定的编程语言来描述本实施 例。可以理解的是,多种编程语言可以用于实现本文描述的实施例的教导。

本公开可以被提供为可以包括其上存储有指令的机器可读介质的计算 机程序产品或软件,其可以用于对计算机系统(或其它电子设备)进行编 程以执行根据本公开的过程。机器可读介质包括用于以机器(例如,计算 机)可读的形式存储或发送信息的任意技术。例如,机器可读(如,计算 机可读)介质包括机器(如,计算机)可读存储介质(例如,只读存储器 (ROM)、随机存取存储器(RAM)、磁盘存储介质、光存储介质、闪速存 储器设备等),等等。

然而,在阅读了上述描述后,对于本领域的技术人员而言,无疑可以 想到对本公开的多种修改和变型,可以理解的是通过图示所示和所述的任 何特定实施例决不会是要被认为是限制性的。因此,对各个实施例的细节 的引用并不是要限制权利要求的范围,权利要求本身只引用这些特征以为 公开。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号