首页> 中国专利> 一种在Linux虚拟机中设置显示模式的方法及装置

一种在Linux虚拟机中设置显示模式的方法及装置

摘要

本发明公开了一种在Linux虚拟机中设置显示模式的方法及装置。所述方法包括:对虚拟机的帧缓冲描述块进行初始化;获取所述虚拟机中虚拟显卡的显存信息;所述虚拟显卡的显存信息包括:虚拟显卡显存空间的地址和虚拟显卡的显存大小;根据所获取的虚拟显卡的显存信息,将虚拟显卡的显存空间映射到虚拟机内核的内存空间;将虚拟显卡显存空间在虚拟机内核内存空间的映射地址保存至所述帧缓冲描述块中;根据所述帧缓冲描述块中所保存的信息,通过虚拟显卡寄存器的输入/输出读写指令设置虚拟显卡的显示模式。应用本发明技术方案,可以令Linux虚拟机中的帧缓冲设备支持更多的显示模式。

著录项

  • 公开/公告号CN101739289A

    专利类型发明专利

  • 公开/公告日2010-06-16

    原文格式PDF

  • 申请/专利权人 闪联信息技术工程中心有限公司;

    申请/专利号CN200810226526.6

  • 发明设计人 周卫国;魏治宇;

    申请日2008-11-13

  • 分类号G06F9/46(20060101);G06F9/455(20060101);

  • 代理机构11227 北京集佳知识产权代理有限公司;

  • 代理人逯长明

  • 地址 100098 北京市海淀区知春路甲48号盈都大厦B座10层

  • 入库时间 2023-12-18 00:27:04

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2013-06-19

    授权

    授权

  • 2012-09-12

    专利申请权的转移 IPC(主分类):G06F9/46 变更前: 变更后: 登记生效日:20120807 申请日:20081113

    专利申请权、专利权的转移

  • 2010-10-27

    专利申请权的转移 IPC(主分类):G06F9/46 变更前: 变更后: 登记生效日:20100909 申请日:20081113

    专利申请权、专利权的转移

  • 2010-09-01

    实质审查的生效 IPC(主分类):G06F9/46 申请日:20081113

    实质审查的生效

  • 2010-06-16

    公开

    公开

说明书

技术领域

本发明涉及虚拟机技术领域,特别是涉及一种在Linux虚拟机中设置显示模式的方法及装置。

背景技术

在基于Linux操作系统的嵌入式开发过程中,由于开发的目标设备资源有限,因此在目标设备上建立完整的开发环境与调试环境都比较困难。目前一般在PC(Personal Computer,个人计算机)环境中通过两台计算机交叉编译的方法建立针对目标设备的开发环境,这样一方面可以充分利用PC环境强大的计算能力,另一方面也以可充分利用PC环境中丰富的调试工具进行应用程序的调试。

虚拟机技术,是一种通过软件方式模拟具有完整功能的计算机系统的技术,在宿主机的操作系统中运行虚拟机管理器(Virtual Machine Manager,VMM),可以模拟出一台或多台虚拟的计算机,参见图1所示。这些虚拟机可以像真正的计算机一样进行工作,例如可以安装操作系统、应用程序、访问网络资源等等。虚拟机技术为程序开发人员提供了便利:开发人员可以在宿主机使用虚拟机管理器虚拟出一台计算机,然后将宿主机中的源程序完全共享给虚拟机,在虚拟机中安装开发所需的操作系统并与开发平台级联。这样,仅需一台计算机,就可以完成原本需要两台计算机才能完成的交叉开发工作。

在嵌入式产品开发中,UI(User Interface,用户界面)程序的开发往往占有一定的比重,由于嵌入式产品中没有独立的显示设备,因此UI程序的开发需要借助开发环境中的显示设备来完成。Linux操作系统中的帧缓冲设备(framebuffer),为图形硬件提供了操作接口,允许应用软件在图形模式下直接对图形硬件进行读写等操作,可以为UI程序的开发提供绘制和显示环境。根据开发需要,帧缓冲设备可以设置为不同的分辨率与颜色深度。

在实现本发明过程中,发明人发现现有技术中至少存在如下问题:在Linux虚拟机环境下,帧缓冲设备最高能够使用的显示模式为分辨率1024*768、颜色深度24位。而在实际的开发过程中,有些UI程序需要将帧缓冲设备设置为更高的分辨率和颜色深度(例如在高清电视上运行的UI程序,需要将帧缓冲设备设置为分辨率1360*768,颜色深度为32位真彩色的显示模式),由于无法为虚拟机的帧缓冲设备设置提供这种显示模式,因此对于这类UI程序的开发,目前仍然只能使用两台计算机来完成。

发明内容

有鉴于此,本发明提供了一种在Linux虚拟机中设置显示模式的方法及装置,可以为Linux虚拟机的帧缓冲设备提供更多的显示模式,技术方案如下:

一种在虚拟机中设置显示模式的方法,包括:

对虚拟机的帧缓冲描述块进行初始化;

获取所述虚拟机中虚拟显卡的显存信息;所述虚拟显卡的显存信息包括:虚拟显卡显存空间的地址和虚拟显卡的显存大小;

根据所获取的虚拟显卡的显存信息,将虚拟显卡的显存空间映射到虚拟机内核的内存空间;

将虚拟显卡显存空间在虚拟机内核内存空间的映射地址保存至所述帧缓冲描述块中;

根据所述帧缓冲描述块中所保存的信息,通过虚拟显卡寄存器的输入/输出读写指令设置虚拟显卡的显示模式。

一种在虚拟机中设置显示模式的装置,包括:

初始化单元,用于对虚拟机的帧缓冲描述块进行初始化;

虚拟显卡信息获取单元,用于获取所述虚拟机中虚拟显卡的显存信息;所述虚拟显卡的显存信息包括:虚拟显卡显存空间的地址和虚拟显卡的显存大小;

映射单元,用于根据所述虚拟显卡信息获取单元所获取的虚拟显卡的显存信息,将虚拟显卡的显存空间映射到虚拟机内核的内存空间;

保存单元,用于所述映射单元获得的存虚拟显卡显存空间在虚拟机内核内存空间的映射地址,保存至所述初始化单元获得的帧缓冲描述块中;

显示模式设置单元,用于根据所述保存单元在帧缓冲描述块中所保存的信息,通过虚拟显卡寄存器的输入/输出读写指令设置虚拟显卡的显示模式。

以上技术方案,可以为Linux虚拟机中的帧缓冲设备提供更多的显示模式。与现有技术相比,对于需要更高的分辨率和颜色深度的开发工作,也可以在虚拟机中实现,这样就可以使用一台计算机完成高分辨率和高颜色深度的嵌入式UI程序开发,有效节约了开发成本,并且提高了开发人员的工作效率。

附图说明

图1为现有的虚拟机系统架构示意图;

图2为本发明实施例所应用的开发环境架构示意图;

图3为实现本发明方法具体实施例的流程图;

图4为本发明实施例在虚拟机中设置显示模式的装置的结构示意图;

图5为本发明实施例初始化单元的结构示意图;

图6为本发明实施例在虚拟机中设置显示模式的装置的另一种结构示意图。

具体实施方式

首先对本发明实施例所应用的开发环境架构进行说明,参见图2所示。在宿主机上安装第一操作系统,然后在第一操作系统中安装虚拟机管理器,并在虚拟机管理器所虚拟出的计算机中安装开发所需的第二操作系统。在第一操作系统中将源程序完全共享,以便于虚拟机访问;在虚拟机的第二操作系统下对第一操作系统共享的源程序目录进行挂接,并使用虚拟的第二操作系统联接开发平台。

宿主机是实际的硬件系统,因此上述第一操作系统可以对真实的物理显卡等实际硬件资源进行管理与使用。而虚拟机可以通过虚拟机管理器访问物理显卡,并为第二操作系统提供虚拟显卡(Virtual Display Card),这个虚拟显卡对于虚拟机而言,相当于真实的图形硬件,帧缓冲设备可以对其进行读写操作。

下面结合附图,对本发明的实施方案进行详细描述,在本实施例中,将上述在虚拟机中安装的第二操作系统具体化为Linux操作系统。

图3所示为本发明的设置显示模式的方法流程图,包括以下步骤:

S101,对虚拟机中的虚拟显卡进行初始化。

在本实施例中,虚拟机中安装的是Linux操作系统。虚拟机启动后,通过调用Linux设备驱动框架函数,对虚拟机中的虚拟显卡进行初始化。初始化时要通过虚拟显卡的寄存器来配置虚拟显卡的总线地址,配置完成后,虚拟机的CPU就可以访问该设备的各项资源。

S102,初始化帧缓冲描述块。

缓冲帧描述块是在Linux操作系统中,用于保存缓冲帧设备相关信息的区域,在使用帧缓冲设备的过程中,需要读取这部分信息。Linux首先会为帧缓冲描述块分配内存空间,确认在缓冲帧描述块中需要保存哪些相关信息,并进一步为这些相关信息分配存储所用的子空间。

S103,获取宿主机中真实物理显卡的显示模式信息。

通过读取虚拟显卡的寄存器,获取宿主机中真实物理显卡的信息,主要包括物理显卡的能够支持的显示模式。

S104,获取虚拟显卡的显存信息。

通过读写虚拟显卡的寄存器,获取虚拟显卡信息,主要包括虚拟显卡显存空间的地址,虚拟显卡的显存大小等信息。

S105,将虚拟显卡的显存空间映射到虚拟机内核的内存空间。

根据S104中所获取到的虚拟显卡信息,将虚拟显卡的显存空间映射到虚拟机内核的内存空间。所述虚拟机内核的内存空间,是运行在虚拟机中的应用程序可以直接访问的内存空间。而这些应用程序无法直接访问虚拟显卡的显存空间,映射完成之后,应用程序就可以通过直接读写内核的此块内存空间,间接地实现对虚拟显卡显存内容的读写。

S106,在帧缓冲描述块中保存虚拟显卡显存空间在内核内存空间的映射地址。

如S102所述,缓冲帧描述块是用于保存缓冲帧设备相关信息的区域。这里,除了保存S105中所获得的映射地址之外,还可以保存前面所获取的虚拟显卡显存空间的地址、虚拟显卡显存空间的大小等信息。

S107,根据帧缓冲描述块中所保存的信息通过虚拟显卡寄存器的输入/输出读写指令设置虚拟显卡的显示模式。

通过输入/输出读写指令,分别设置虚拟显卡的分辨率、颜色深度。

需要说明的是,为虚拟显卡所设置的显示模式,应该是S103中所获取真实物理显卡所支持的显示模式。如果这里设置的显示模式不是物理显卡所能支持的显示模式,那么将会返回错误信息。

如果所需要设置的是固定的显示模式,例如,针对高清电视UI程序的开发,需要设置高清电视的显示模式:分辨率1360*768、颜色深度32位。如果能够确定物理显卡可以支持这种模式,那么也可以省略前面的步骤S103。

至此,显示模式设置已经完成,虚拟机可以通过向宿主机发送相应信息,通知宿主机已完成虚拟机中虚拟显卡的寄存器设置。这样,在虚拟机中就可以通过读写处于高清显示模式下的虚拟显卡的寄存器,获取帧缓冲描述块中所保存的信息,并根据帧缓冲描述块中的信息设置正确的像素操作函数,应用程序通过像素操作函数即可对处于高清分辨率模式下的虚拟显卡进行像素的填充、读写等操作。

本发明实施例所提供的方法,可以突破现有的Linux虚拟机帧缓冲设备不支持高分辨率及高色深的限制,令帧缓冲设备支持更多的显示模式。与现有技术相比,对于需要支持更高的分辨率和颜色深度的开发工作,也可以在虚拟机中实现,这样就可以使用一台计算机完成高分辨率和高颜色深度的嵌入式UI程序开发,有效节约了开发成本,并且提高了开发人员的工作效率。

本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。

相应于上面的方法实施例,本发明实施例还提供一种在虚拟机中设置显示模式的装置,参见图4所示,包括:

初始化单元410,用于对虚拟机的帧缓冲描述块进行初始化;

虚拟显卡信息获取单元420,用于获取所述虚拟机中虚拟显卡的显存信息;所述虚拟显卡的显存信息包括:虚拟显卡显存空间的地址和虚拟显卡的显存大小;

映射单元430,用于根据所述虚拟显卡信息获取单元420所获取的虚拟显卡的显存信息,将虚拟显卡的显存空间映射到虚拟机内核的内存空间;

保存单元440,用于将所述映射单元430获得的存虚拟显卡显存空间在虚拟机内核内存空间的映射地址,保存至所述初始化单元410获得的帧缓冲描述块中;

显示模式设置单元450,用于根据所述保存单元在帧缓冲描述块中所保存的信息,通过虚拟显卡寄存器的输入/输出读写指令设置虚拟显卡的显示模式。

参见图5所示,所述初始化单元410,可以包括:

帧缓冲描述块内存分配子单元411,用于为所述帧缓冲描述块分配内存空间;

子空间分配子单元412,用于在所述分配帧缓冲描述块内存分配子单元411分配的内存空间中,为所述缓冲帧描述块中需要保存的信息分配子空间。

参见图6所示,该装置还可以包括:

物理显卡信息获取单元460,用于获取所述虚拟机所在宿主机中的真实物理显卡所支持的显示模式。

如果所述装置包括物理显卡信息获取单元460,那么所述显示模式设置单元450,具体可以包括验证子单元451、设置子单元452和提示子单元453;

所述验证子单元451,所述验证子单元,用于验证所设置的显示模式是否为所述物理显卡信息获取单元460所获取的虚拟机所在宿主机中的真实物理显卡所支持的显示模式;

如果是,则所述设置子单元452通过虚拟显卡寄存器的输入/输出读写指令设置虚拟显卡的显示模式;

如果否,则所述提示子单元453提示错误信息。

对于装置实施例而言,由于其基本相应于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

以上所述仅是本发明的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

去获取专利,查看全文>

相似文献

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

客服邮箱:kefu@zhangqiaokeyan.com

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

  • 服务号