CN114115938A - 基于QEMU的Linux跨架构运行文件方法 - Google Patents
基于QEMU的Linux跨架构运行文件方法 Download PDFInfo
- Publication number
- CN114115938A CN114115938A CN202111292580.2A CN202111292580A CN114115938A CN 114115938 A CN114115938 A CN 114115938A CN 202111292580 A CN202111292580 A CN 202111292580A CN 114115938 A CN114115938 A CN 114115938A
- Authority
- CN
- China
- Prior art keywords
- architecture
- file
- qemu
- linux
- executable
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明提供了一种基于QEMU的Linux跨架构运行文件方法,包括:将所有不同架构的可执行文件上传到源上,并将所述可执行文件移植到目标架构的机器上;将所述可执行文件的路径添加到配置文件中;重启检测服务,Linux系统从源上拉下所述可执行文件执行所需要的库;通过QEMU在所述目标架构上执行所述可执行文件。该方法在QEMU的基础上,使得Linux系统能够跨架构运行文件。
Description
技术领域
本发明涉及计算机系统架构技术领域,具体为一种基于QEMU的Linux跨架构运行文件方法。
背景技术
在日常生活中,各种架构机器快速普及,并且与主流的x86架构的机器拥有同样强大的功能,例如手机等电子产品大多基于ARM架构,我们的国产芯片也大多基于非x86架构。但是,由于大多数硬件设备厂商只提供基于单一架构的程序,这就令不同架构的机器在使用外设等硬件设备上受到很大的制约。同时重新编译不同架构的驱动等程序会耗费大量的人力物力等,目前并没有行之有效的方法能够跨架构使用二进制文件。
Linux系统在日常生活中使用场景越来越多,相比Windows在架构支持的局限性来说,Linux系统支持多架构,并且QEMU能够对不同架构上的可执行文件进行翻译,这就令在不同架构的Linux系统上进行跨架构运行程序成为了一种可能。
因此,针对现有技术存在的问题和现有技术的可能性,可以尝试在QEMU的基础上,使得Linux系统能够跨架构运行文件。
发明内容
本发明提供了一种基于QEMU的Linux跨架构运行文件方法,该方法在QEMU的基础上,使得Linux系统能够跨架构运行文件。
为实现上述目的和其他相关目的,本发明提供了一种基于QEMU的Linux跨架构运行文件方法,包括:
将所有不同架构的可执行文件以及关联库上传到源上,并将所述可执行文件移植到目标架构的机器上;
将所述可执行文件的路径添加到配置文件中;
重启检测服务,Linux系统从源上拉下所述可执行文件执行所需要的关联库;
通过QEMU在所述目标架构上执行所述可执行文件。
进一步地,所述Linux系统从源上拉下所述可执行文件执行所需要的库,具体包括:
所述Linux系统依赖LDD命令的机制,获取所述可执行文件运行所需要的库;
所述Linux系统在源上将所述库更新下来,并将所述可执行文件转换成为可有效执行的脚本。
进一步地,所述库为依赖库。
进一步地,所述可执行文件来自x86架构,所述目标架构为ARM架构。
进一步地,所述可执行文件为可执行二进制文件。
进一步地,该方法用于在x86架构运行不同架构的二进制程序,具体包括:
将所有不同架构的二进制程序上传到源上,并将二进制程序移植到x86架构的机器上;
通过QEMU将不同架构平台下的指令动态翻译成所述x86架构上可解析的x86指令,以在所述x86架构上运行不同架构的二进制程序。
进一步地,通过QEMU-USER-STATIC将不同架构平台下的指令动态翻译成所述x86架构上可解析的x86指令。
进一步地,所述可执行文件为打印机的filter以及特定功能的驱动。
基于同一发明构想,本发明提供了一种电子设备,包括处理器和存储器,所述存储器上存储有计算机程序,所述计算机程序被所述处理器执行时,实现上述任一项所述的方法。
基于同一发明构想,本发明还提供了一种可读存储介质,其特征在于,所述可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时,实现上述任一项所述的方法。
综上所述,本发明在Linux系统下,通过QEMU技术模拟不同架构的环境,实现了一种自动部署跨架构运行文件所需环境的方案。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明一实施例提供的基于QEMU的Linux跨架构运行文件方法步骤示意图;
图2为本发明一实施例提供的基于QEMU的Linux跨架构运行文件方法流程示意图。
具体实施方式
以下结合附图1-2和具体实施方式对本发明提出的基于QEMU的Linux跨架构运行文件方法作进一步详细说明。根据下面说明,本发明的优点和特征将更清楚。需要说明的是,附图采用非常简化的形式且均使用非精准的比例,仅用以方便、明晰地辅助说明本发明实施方式的目的。为了使本发明的目的、特征和优点能够更加明显易懂,请参阅附图。须知,本说明书所附图式所绘示的结构、比例、大小等,均仅用以配合说明书所揭示的内容,以供熟悉此技术的人士了解与阅读,并非用以限定本发明实施的限定条件,故不具技术上的实质意义,任何结构的修饰、比例关系的改变或大小的调整,在不影响本发明所能产生的功效及所能达成的目的下,均应仍落在本发明所揭示的技术内容能涵盖的范围内。
首先对本发明涉及到的技术术语进行介绍。
Linux系统:全称GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统,其内核由林纳斯·本纳第克特·托瓦兹于1991年10月5日首次发布,,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
QEMU:是一款开源的模拟器及虚拟机监管器,默认支持多种架构,可以进行模拟、翻译不同架构,同时可以达到相对较快的速度。
LDD命令:获取可执行文件执行所需要的动态库的命令。
X86架构:是微处理器执行的计算机语言指令集,指一个intel通用计算机系列的标准编号缩写,也标识一套通用的计算机指令集合。
ARM架构:曾称进阶精简指令集机器(Advanced RISC Machine)更早称作AcornRISC Machine,是一个32位精简指令集(RISC)处理器架构。还有基于ARM设计的派生产品,重要产品包括Marvell的XScale架构和德州仪器的OMAP系列,以及华为鲲鹏架构。
参阅图1,本发明一实施例提供了一种基于QEMU的Linux跨架构运行文件方法,包括如下步骤:
S100、将所有不同架构的可执行文件以及关联库上传到源上,并将所述可执行文件移植到目标架构的机器上;
S200、将所述可执行文件的路径添加到配置文件中;
S300、重启检测服务,Linux系统从源上拉下所述可执行文件执行所需要的关联库;
S400、通过QEMU在所述目标架构上执行所述可执行文件。
具体实施的时候,首先将所有不同架构的可执行文件全部上传到源上,然后将可执行文件移植到目标架构的机器上,然后将该可执行文件的路径添加到配置文件,使得系统知道该文件需要通过QEMU进行执行,完成之后重新启动服务,获取可执行程序运行所需要的库,在源上将所需要的库更新下来,最后可以将该可执行文件转换为可有效执行的脚本。所有步骤完成之后即可在目标架构上运行不同可执行文件。
在本实施例中,所述Linux系统从源上拉下所述可执行文件执行所需要的库,具体包括:所述Linux系统依赖LDD命令的机制,获取所述可执行文件运行所需要的库;所述Linux系统在源上将所述库更新下来,并将所述可执行文件转换成为可有效执行的脚本;并且,所述库一般为依赖库。库文件是计算机上的一类文件,提供给使用者一些开箱即用的变量、函数或类。库文件分为静态库和动态库,静态库和动态库的区别体现在程序的链接阶段:静态库在程序的链接阶段被复制到了程序中;动态库在链接阶段没有被复制到程序中,而是程序在运行时由系统动态加载到内存中供程序调用。使用动态库系统只需载入一次,不同的程序可以得到内存中相同的动态库的副本,因此节省了很多内存,而且使用动态库也便于模块化更新程序。而依赖库是指调用一个动态库A时,A又需要调用动态库B,则B是A的依赖库。
在本实施例中,通过上述方法部署完环境后,能成功将的x86架构上的可执行文件在华为鲲鹏(ARM)上运行起来。具体操作如下:
将相关可执行文件拷贝到ARM机器上。
将该可执行文件的路径添加到配置文件中。
重启服务,系统根据LDD命令找到该可执行文件执行所需要的库,并将其从之前布好的源上下载下来。
系统即可通过QEMU在华为鲲鹏(ARM)上执行该可执行文件。
即可执行文件来自x86架构,而目标架构为华为鲲鹏(ARM)架构,当然,本发明技术领域内的人员应该明白,可执行文件的来源架构以及运行的目标架构并不唯一,应当是任意两个架构都可。
在本实施例中,所述可执行文件一般为可执行二进制文件,使得该方法可以用于在x86架构运行不同架构的二进制程序,具体包括:
将所有不同架构的二进制程序上传到源上,并将二进制程序移植到x86架构的机器上;
通过QEMU-USER-STATIC将不同架构平台下的指令动态翻译成所述x86架构上可解析的x86指令,以在所述x86架构上运行不同架构的二进制程序。
本实施例用到的是QEMU-USER-STATIC,它是QEMU用户模式的实现,是一个静态的二进制文件,QEMU-USER-STATIC可以在x86系统平台上运行arm64、mips64el架构的Linux程序,将不同架构平台下的指令动态地翻译成x86系统平台能够解析的指令。
在本实施例中,参阅图2,所述可执行文件可以为打印机的filter以及特定功能的驱动,当然,本发明技术领域内的人员应该明白,可执行文件并不唯一。
基于同一发明构想,本发明还提供了一种电子设备,包括处理器和存储器,所述存储器上存储有计算机程序,所述计算机程序被所述处理器执行时,实现所述基于QEMU的Linux跨架构运行文件方法。
所述处理器在一些实施例中可以是中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器(例如GPU(Graphics Processing Unit-图形处理器))、或其他数据处理芯片。该处理器通常用于控制所述电子设备的总体操作。本实施例中,所述处理器用于运行所述存储器中存储的程序代码或者处理数据,例如运行所述基于QEMU的Linux跨架构运行文件方法的程序代码。
所述存储器至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,所述存储器可以是所述电子设备的内部存储单元,例如该电子设备的硬盘或内存。在另一些实施例中,所述存储器也可以是所述电子设备的外部存储设备,例如该电子设备上配备的插接式硬盘,智能存储卡(SmartMedia Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。当然,所述存储器还可以既包括所述电子设备的内部存储单元也包括其外部存储设备。本实施例中,所述存储器通常用于存储安装于所述电子设备的操作方法和各类应用软件,例如所述基于QEMU的Linux跨架构运行文件方法的程序代码等。此外,所述存储器还可以用于暂时地存储已经输出或者将要输出的各类数据。
基于同一发明构想,本发明还提供一种可读存储介质,所述可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时,实现所述基于QEMU的Linux跨架构运行文件方法。
本发明的优点在于在Linux系统下,通过QEMU技术模拟不同架构的环境,实现了一种自动部署跨架构运行文件所需环境的方案。
尽管本发明的内容已经通过上述优选实施例作了详细介绍,但应当认识到上述的描述不应被认为是对本发明的限制。在本领域技术人员阅读了上述内容后,对于本发明的多种修改和替代都将是显而易见的。因此,本发明的保护范围应由所附的权利要求来限定。
Claims (10)
1.一种基于QEMU的Linux跨架构运行文件方法,其特征在于,包括:
将所有不同架构的可执行文件以及关联库上传到源上,并将所述可执行文件移植到目标架构的机器上;
将所述可执行文件的路径添加到配置文件中;
重启检测服务,Linux系统从源上拉下所述可执行文件执行所需要的关联库;
通过QEMU在所述目标架构上执行所述可执行文件。
2.如权利要求1所述的基于QEMU的Linux跨架构运行文件方法,其特征在于,所述Linux系统从源上拉下所述可执行文件执行所需要的库,具体包括:
所述Linux系统依赖LDD命令的机制,获取所述可执行文件运行所需要的库;
所述Linux系统在源上将所述库更新下来,并将所述可执行文件转换成为可有效执行的脚本。
3.如权利要求2所述的基于QEMU的Linux跨架构运行文件方法,其特征在于,所述库为依赖库。
4.如权利要求1所述的基于QEMU的Linux跨架构运行文件方法,其特征在于,所述可执行文件来自x86架构,所述目标架构为ARM架构。
5.如权利要求1所述的基于QEMU的Linux跨架构运行文件方法,其特征在于,所述可执行文件为可执行二进制文件。
6.如权利要求1所述的基于QEMU的Linux跨架构运行文件方法,其特征在于,该方法用于在x86架构运行不同架构的二进制程序,具体包括:
将所有不同架构的二进制程序上传到源上,并将二进制程序移植到x86架构的机器上,
通过QEMU将不同架构平台下的指令动态翻译成所述x86架构上可解析的x86指令,以在所述x86架构上运行不同架构的二进制程序。
7.如权利要求6所述的基于QEMU的Linux跨架构运行文件方法,其特征在于,通过QEMU-USER-STATIC将不同架构平台下的指令动态翻译成所述x86架构上可解析的x86指令。
8.如权利要求1所述的基于QEMU的Linux跨架构运行文件方法,其特征在于,所述可执行文件为打印机的filter以及特定功能的驱动。
9.一种电子设备,其特征在于,包括处理器和存储器,所述存储器上存储有计算机程序,所述计算机程序被所述处理器执行时,实现权利要求1至7中任一项所述的方法。
10.一种可读存储介质,其特征在于,所述可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时,实现权利要求1至7中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111292580.2A CN114115938A (zh) | 2021-11-03 | 2021-11-03 | 基于QEMU的Linux跨架构运行文件方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111292580.2A CN114115938A (zh) | 2021-11-03 | 2021-11-03 | 基于QEMU的Linux跨架构运行文件方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114115938A true CN114115938A (zh) | 2022-03-01 |
Family
ID=80380347
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111292580.2A Pending CN114115938A (zh) | 2021-11-03 | 2021-11-03 | 基于QEMU的Linux跨架构运行文件方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114115938A (zh) |
-
2021
- 2021-11-03 CN CN202111292580.2A patent/CN114115938A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Olivier et al. | A binary-compatible unikernel | |
US5999732A (en) | Techniques for reducing the cost of dynamic class initialization checks in compiled code | |
CN1258702C (zh) | 为不同的指令集结构所编写的固件之间进行通信的方法 | |
US5812848A (en) | Subclassing system for computer that operates with portable-executable (PE) modules | |
CN111651752B (zh) | 一种获取容器需要的系统调用白名单的方法 | |
CN113238819B (zh) | 一种适用于U-Boot的驱动文件动态加载方法及系统 | |
US11061695B2 (en) | Unikernel provisioning | |
US20040083467A1 (en) | System and method for executing intermediate code | |
CN102364433B (zh) | 在ARM处理器上实现Wine构建工具移植的方法 | |
US7219341B2 (en) | Code analysis for selective runtime data processing | |
US20070300054A1 (en) | Universal BSP tool for porting on embedded systems and an application thereof | |
US10552135B1 (en) | Reducing a size of an application package | |
CN114115938A (zh) | 基于QEMU的Linux跨架构运行文件方法 | |
RU2718235C1 (ru) | Архитектура операционной системы для обеспечения поддержки поколений микроядер | |
Lyu et al. | A procedure-based dynamic software update | |
CN113672238B (zh) | 基于实时操作系统模块化管理的运行方法、装置及设备 | |
RU2521265C2 (ru) | Система и способ автоматической обработки системных ошибок программного обеспечения | |
US11989569B2 (en) | Unikernel provisioning | |
Kedem | Creating an Arduino Operating System | |
Kalibera et al. | Real-time Java in space: Potential benefits and open challenges | |
CN116578377A (zh) | 基于安卓模拟器的risc-v架构的构建方法及装置 | |
CN118363612A (zh) | 一种最小rtos系统移植方法 | |
Nguyen | Tutorial: Run SPEC CPU 2006 Benchmarks in Full System Mode with gem5art | |
Sivaram et al. | Transplantation and Analysis U-Boot Boot Loader on Arm (S3C2410) Processor | |
CN115756663A (zh) | 程序模块的初始化方法、系统、设备、介质及芯片 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |