CN109426528A - 实现软件版本选择的方法、装置及存储介质、程序产品 - Google Patents
实现软件版本选择的方法、装置及存储介质、程序产品 Download PDFInfo
- Publication number
- CN109426528A CN109426528A CN201710791338.7A CN201710791338A CN109426528A CN 109426528 A CN109426528 A CN 109426528A CN 201710791338 A CN201710791338 A CN 201710791338A CN 109426528 A CN109426528 A CN 109426528A
- Authority
- CN
- China
- Prior art keywords
- instruction set
- cpu
- packet
- instruction
- software
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44536—Selecting among different versions
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本申请公开了一种实现软件版本选择的方法,用于提供一种通用的选择与CPU兼容的软件版本的方法,该方法包括:在软件包集合中选取当前软件包,软件包集合中的各个软件包分别由不同数量的指令集编译获得;判断CPU所支持的指令集是否与编译当前软件包所使用的指令集兼容;如果CPU所支持的指令集与编译当前软件包所使用的指令集兼容,则运行当前软件包;如果CPU所支持的指令集与编译当前软件包所使用的指令集不兼容,则将当前软件包从软件包集合中去除,并执行在软件包集合中确定当前软件包及后续步骤,直到运行当前软件包或者软件包集合为空。本申请还公开了一种实现软件版本选择的装置、存储介质以及计算机程序产品。
Description
技术领域
本申请涉及嵌入式技术领域,具体涉及一种实现软件版本选择的方法、装置及存储介质、程序产品。
背景技术
随着中央处理器(Central Processing Unit,CPU)的更新换代,新的指令集不断被引入到新的CPU架构中。指令集是存储在CPU内部,对CPU运算进行指导和优化的硬程序,拥有这些指令集,CPU就可以更高效地运行。新指令集带来的更快运算速度的同时,也带来了一些兼容性问题:使用新的指令集编译的软件程序往往不能运行在旧的中央处理器之上。
为了解决新指令集兼容性问题,在现有技术中,可以根据硬件设备的CPU类型为每种型号的硬件设备编译一个软件版本。在硬件设备开机时,通过脚本识别硬件设备的型号,选择对应的软件版本。但是,这种方式只适用于硬件设备型号有限的情况,当增加新的硬件型号,则需要程序调整脚本,重新配置硬件设备,通用性较差。
发明内容
有鉴于此,本申请提供一种实现软件版本选择的方法、装置及存储介质、程序产品,以解决现有技术中选择与CPU兼容的软件版本时,通用性较差的技术问题。
为解决上述问题,本申请提供的技术方案如下:
一种实现软件版本选择的方法,所述方法包括:
在软件包集合中选取当前软件包,所述软件包集合中的各个软件包分别由不同数量的指令集编译获得;
判断中央处理器CPU所支持的指令集是否与编译所述当前软件包所使用的指令集兼容;
如果所述CPU所支持的指令集与编译所述当前软件包所使用的指令集兼容,则运行所述当前软件包;
如果所述CPU所支持的指令集与编译所述当前软件包所使用的指令集不兼容,则将所述当前软件包从所述软件包集合中去除,并执行所述在软件包集合中确定当前软件包及后续步骤,直到运行所述当前软件包或者所述软件包集合为空。
相应的,所述在软件包集合中选取当前软件包,包括:
在当前软件包集合中选取编译所使用的指令集数量最多的软件包作为当前软件包。
相应的,所述软件包包括主程序以及指令兼容性判断程序,所述判断CPU所支持的指令集是否与编译所述当前软件包所使用的指令集兼容,包括:
调用所述当前软件包中的指令兼容性判断程序,由所述指令兼容性判断程序判断CPU所支持的指令集是否与编译所述当前软件包所使用的指令集兼容。
相应的,所述判断CPU所支持的指令集是否与编译所述当前软件包所使用的指令集兼容,包括:
当所述CPU支持获取指令集标识指令,通过所述获取指令集标识指令获取CPU所支持的指令集;
将所述CPU所支持的指令集与所述当前软件包对应的指令集对比;
如果所述当前软件包对应的指令集均为所述CPU所支持的指令集,则确定所述CPU所支持的指令集与编译所述当前软件包所使用的指令集兼容;
如果所述当前软件包对应的指令集不均为所述CPU所支持的指令集,则确定所述CPU所支持的指令集与编译所述当前软件包所使用的指令集不兼容。
相应的,所述判断CPU所支持的指令集是否与编译所述当前软件包所使用的指令集兼容,包括:
当所述CPU不支持获取指令集标识指令,执行所述当前软件包中的测试程序段,所述测试程序段为使用所述当前软件包的指令集编译后的汇编语言程序段;
如果所述测试程序段均能正确执行,则确定所述CPU所支持的指令集与编译所述当前软件包所使用的指令集兼容;
如果所述测试程序段无法正确执行,则确定所述CPU所支持的指令集与编译所述当前软件包所使用的指令集不兼容。
相应的,所述软件包的编译过程包括:编译所述主程序,将编译所述主程序使用的指令集记录到配置文件中;根据所述配置文件生成指令位图;将所述指令位图以全局变量的形式替换到所述指令兼容性判断程序中;使用与编译所述主程序一致的指令集编译所述指令兼容性判断程序;将编译后的主程序与指令兼容性判断程序打包生成软件包。
一种实现软件版本选择的装置,所述装置包括:
选取单元,用于在软件包集合中选取当前软件包,所述软件包集合中的各个软件包分别由不同数量的指令集编译获得;
判断单元,用于判断中央处理器CPU所支持的指令集是否与编译所述当前软件包所使用的指令集兼容;
运行单元,用于如果所述判断单元的判断结果为所述CPU所支持的指令集与编译所述当前软件包所使用的指令集兼容,则运行所述当前软件包;
去除单元,用于如果所述判断单元的判断结果为如果所述CPU所支持的指令集与编译所述当前软件包所使用的指令集不兼容,则将所述当前软件包从所述软件包集合中去除,并返回选取单元在软件包集合中确定当前软件包,直到所述运行单元运行所述当前软件包或者所述软件包集合为空。
相应的,所述选取单元具体用于:
在当前软件包集合中选取编译所使用的指令集数量最多的软件包作为当前软件包。
相应的,所述软件包包括主程序以及指令兼容性判断程序,所述判断单元具体用于:
调用所述当前软件包中的指令兼容性判断程序,由所述指令兼容性判断程序判断CPU所支持的指令集是否与编译所述当前软件包所使用的指令集兼容。
相应的,所述判断单元包括:
获取子单元,用于当所述CPU支持获取指令集标识指令,通过所述获取指令集标识指令获取CPU所支持的指令集;
对比子单元,用于将所述CPU所支持的指令集与所述当前软件包对应的指令集对比;
第一确定子单元,用于如果所述当前软件包对应的指令集均为所述CPU所支持的指令集,则确定所述CPU所支持的指令集与编译所述当前软件包所使用的指令集兼容;如果所述当前软件包对应的指令集不均为所述CPU所支持的指令集,则确定所述CPU所支持的指令集与编译所述当前软件包所使用的指令集不兼容。
相应的,所述判断单元包括:
运行子单元,用于当所述CPU不支持获取指令集标识指令,执行所述当前软件包中的测试程序段,所述测试程序段为使用所述当前软件包的指令集编译后的汇编语言程序段;
第二确定子单元,用于如果所述测试程序段均能正确执行,则确定所述CPU所支持的指令集与编译所述当前软件包所使用的指令集兼容;如果所述测试程序段无法正确执行,则确定所述CPU所支持的指令集与编译所述当前软件包所使用的指令集不兼容。
相应的,所述软件包的编译过程包括:编译所述主程序,将编译所述主程序使用的指令集记录到配置文件中;根据所述配置文件生成指令位图;将所述指令位图以全局变量的形式替换到所述指令兼容性判断程序中;使用与编译所述主程序一致的指令集编译所述指令兼容性判断程序;将编译后的主程序与指令兼容性判断程序打包生成软件包。
一种计算机可读存储介质,所述机算机可读存储介质中存储有指令,当所述指令在终端设备上运行时,使得所述终端设备执行上述的实现软件版本选择的方法。
一种计算机程序产品,所述计算机程序产品在终端设备上运行时,使得所述终端设备执行上述的实现软件版本选择的方法。
由此可见,本申请实施例具有如下有益效果:
本申请实施例利用不同数量的指令集分别编译出多个软件包,在包括这些软件包的软件包集合中,逐个选取软件包判断CPU所支持的指令集是否与编译所选取的软件包所使用的指令集兼容,如果兼容则可以运行选取的软件包,如果不兼容则继续在软件包集合中选取软件包进行判断,因此不同的硬件设备均可以采用本实施例的方式选择与CPU兼容的软件版本,选择与CPU兼容的软件版本的通用性较高。
附图说明
图1为本申请实施例提供的实现软件版本选择的方法实施例一的流程图;
图2为本申请实施例提供的实现软件版本选择的方法实施例二的流程图;
图3为本申请实施例中提供判断兼容性的方法实施例一的流程图;
图4为本申请实施例中提供判断兼容性的方法实施例二的流程图;
图5为本申请实施例提供的实现软件版本选择的装置实施例的示意图。
具体实施方式
为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请实施例作进一步详细的说明。
在现有技术中,为了解决新指令集兼容性问题,可以根据硬件设备的CPU类型为每种型号的硬件设备编译一个软件版本。硬件设备可以为具有嵌入式系统的设备,例如机顶盒等。则在硬件设备开机时,需要启动某一版本的应用软件,选择软件版本的实现过程可以为在硬件设备开机时,通过脚本识别硬件设备的型号,选择该型号对应的软件版本。但是,这种方式只适用于硬件设备型号有限的情况,当增加新的硬件型号,则需要程序调整脚本,重新配置硬件设备,通用性较差。
为此,本申请实施例提供一种实现软件版本选择的方法、装置及存储介质、程序产品,不同硬件设备均可以采用相同的方式选择与CPU兼容的软件版本,提高了选择软件版本的通用性。
参见图1所示,示出了本申请实施例中提供的实现软件版本选择的方法实施例一的流程图,可以包括以下步骤:
步骤101:在软件包集合中选取当前软件包。
在本申请实施例中,软件包可以指采用特定指令集编译出的软件二进制程序的压缩包。首先可以将软件编译为多个版本的软件包,各个软件包分别由不同数量的指令集编译获得,编译每个软件包所使用的指令集逐个递增,例如软件包A由指令集1编译获得,软件包B由指令集1以及指令集2编译获得,软件包C由指令集1、指令集2以及指令集3编译获得。各个软件包共同构成软件包集合,以使后续步骤可以对由不同数量指令集编译获得的软件包进行CPU兼容性判断。
在硬件设备的操作系统第一次启动或者更换CPU时,可以触发本实施例实现软件版本选择的方法,开始执行在软件包集合中选取一个软件包作为当前软件包以及后续步骤。
在本申请实施例一些可能的实现方式中,软件包可以包括主程序以及指令兼容性判断程序,主程序可以包括软件的二进制可执行程序、动态链接库等与指令集相关的软件组件,指令兼容性判断程序可以实现步骤102的功能。
另外,软件包中还可以包括软件资源包,软件资源包可以包括一些与指令集无关的组件,例如软件运行时可能用到的图片、帮助文档等资源。在软件包中,软件资源包可以与主程序以及指令兼容性判断程序相独立,以使在后续判断CPU兼容性的过程中无需读取软件资源包,从而可以提高判断CPU兼容性的速度。
步骤102:判断CPU所支持的指令集是否与编译当前软件包所使用的指令集兼容,如果是,进入步骤103,如果否,则进入步骤104。
编译当前软件包所使用的指令集均为CPU所支持的指令集,代表CPU所支持的指令集与编译当前软件包所使用的指令集兼容;编译当前软件包所使用的指令集包括CPU不支持的指令集,代表CPU所支持的指令集与编译当前软件包所使用的指令集不兼容。
例如,当前CPU支持指令集1、指令集2以及指令集3,编译当前软件包所使用的指令集为指令集1以及指令集2,则当前软件包对应的指令集与当前CPU兼容;又例如,编译当前软件包所使用的指令集为指令集1、指令集2以及指令集3,则当前软件包对应的指令集与当前CPU兼容;又例如,编译当前软件包所使用的指令集为指令集1、指令集2、指令集3以及指令集4,编译当前软件包所使用的指令集4为CPU不支持的指令集,则当前软件包对应的指令集与当前CPU不兼容。
在本申请实施例的一些可能的实现方式中,可以调用当前软件包中的指令兼容性判断程序,由指令兼容性判断程序判断CPU所支持的指令集是否与编译当前软件包所使用的指令集兼容。
实现判断CPU所支持的指令集是否与编译当前软件包所使用的指令集兼容的具体过程,将在后续实施例中详细说明。
步骤103:运行当前软件包。
步骤104:将当前软件包从软件包集合中去除。
步骤105:判断软件包集合是否为空,如果是,则结束,如果否,返回步骤101。
当判断CPU所支持的指令集与编译当前软件包所使用的指令集兼容,则代表当前软件包可以运行在当前CPU上,在实际应用中,运行当前软件包即为运行当前软件包中的主程序。当判断CPU所支持的指令集与编译当前软件包所使用的指令集不兼容,则代表当前软件包无法运行在当前CPU上,则需要在软件包集合中重新选取一个软件包进行兼容性判断,直到找到一个软件包与CPU兼容并运行,或者软件包集合中的软件包与CPU均不兼容,则退出。
这样,本申请实施例利用不同数量的指令集分别编译出多个软件包,在包括这些软件包的软件包集合中,逐个选取软件包判断CPU所支持的指令集是否与编译所选取的软件包所使用的指令集兼容,如果兼容则可以运行选取的软件包,如果不兼容则继续在软件包集合中选取软件包进行判断,因此不同的硬件设备均可以采用本实施例的方式选择与CPU兼容的软件版本,选择与CPU兼容的软件版本的通用性较高。
参见图2所示,以下以编译生成一个软件包为例,对编译生成软件包的过程进行说明,可以包括以下步骤:
步骤201:编译主程序,把编译主程序用到的指令集记录到配置文件中。
步骤202:为各个指令集中的每类指令进行编码,并根据配置文件生成指令位图。
为各个指令集中的每类指令设置一个指令编码,例如指令1对应指令编码1,指令2对应指令编码2等等。由于配置文件并不可以直接被机器读取,则需要将编译主程序用到的指令集转换为指令位图形式。即指令位图用于通过记录每个指令编码的使用状态以记录指令编码对应的指令是否在编译主程序时被使用。例如,编译主程序用到指令1,没有用到指令2,则指令位图中的指令编码1对应于已使用(1),指令位图中的指令编码2对应于未使用(0)。
步骤203:将指令位图以全局变量的形式替换到指令兼容性判断程序中。
指令位图可以加入指令兼容性判断程序,用于指令兼容性判断程序判断CPU所支持的指令集是否与编译当前软件包所使用的指令集兼容,判断的过程可以参见后续实施例中的详细说明。
步骤204:使用与编译主程序一致的指令集编译指令兼容性判断程序。
步骤205:将编译后的主程序与指令兼容性判断程序打包,生成软件包。
类似的,可以采用不同数量的指令集分别编译出不同的软件包,在实际应用中,可以为每个版本的软件包的命名加入一个数字后缀。例如software.tar.gz.1,software.tar.gz.2。数字后缀越大,则代表编译生成软件包时选取的指令集越丰富。
由于CPU具有向下兼容特性,即编译软件包的指令集如果少于CPU所支持的指令集,该软件包可以在CPU上运行。例如,CPU支持指令集1、指令集2以及指令集3,如果编译软件包的指令集为指令集1以及指令集2,则该软件包可以在CPU上运行。但是,编译软件包使用的指令集越少,则无法充分发挥CPU的性能。
因此,在本申请实施例的一种可能的实现方式中,在软件包集合中选取当前软件包的具体实现可以包括:在当前软件包集合中选取编译所使用的指令集数量最多的软件包作为当前软件包。
即在软件包集合中优先选取编译所使用的指令集数量最多的软件包开始进行兼容性判断,这样如果该软件包与CPU兼容,则该软件包为与当前CPU兼容且能最大化发挥CPU性能的软件版本。
结合实际应用,对实现软件版本选择的方法进行说明,本实施例可以包括以下步骤:
S1:判断CPU类型与上次启动时是否一致,如果操作系统第一次启动或者无法判断的,视为不一致。如果一致,则退出,如果不一致,则进入步骤302。
S2:将软件包按照文件命名数字后缀由大到小排序。
S3:选择数字后缀最大的软件包。
S4:将软件包内的指令兼容性判断程序解压出来并运行。
S5:判断指令兼容性判断程序的退出状态,计做s。
当指令兼容性判断程序判断CPU所支持的指令集与编译当前软件包所使用的指令集兼容,则判断指令兼容性判断程序的退出状态为0;当指令兼容性判断程序判断CPU所支持的指令集与编译当前软件包所使用的指令集不兼容,则判断指令兼容性判断程序的退出状态为非0。
S6:若s不为0,则选择数字后缀小1的软件包,并进入S4;若无软件包可选,则退出。
S7:若s为0,则解压对应的软件包,并在磁盘中记录当前CPU的型号特征。
S8:启动软件包中的主程序。
作为一个判断指令兼容性判断程序退出状态的例子,假设本实施例以Linux系统下的一个shell脚本运行,则执行指令兼容性判断程序后,可以通过$?变量即可得知指令兼容性判断程序的退出状态。
这样,本申请实施例把软件编译为多个版本,并为每个版本的软件编译一个指令兼容性判断程序。指令兼容性判断程序和主程序采用同样的指令集编译。启动主程序前,先启动指令兼容性判断程序。通过指令兼容性判断程序的返回结果,判断当前CPU是否与主程序版本兼容,进而实现自动选择出与当前CPU兼容且能最大化发挥CPU性能的软件版本。
以下将对本申请实施例中判断CPU所支持的指令集是否与编译当前软件包所使用的指令集兼容的实现过程进行详细说明。在一种情况下,CPU支持获取指令集标识指令(CPUID指令),在另一种情况下,CPU不支持获取指令集标识指令(CPUID指令)。以下两个实施例将分别针对这两种情况进行说明。
参见图3所示,当CPU支持CPUID指令,则判断CPU所支持的指令集是否与编译当前软件包所使用的指令集兼容的具体实现可以包括:
步骤301:通过获取指令集标识指令获取CPU所支持的指令集。
例如x86系列CPU支持CPUID指令,则可以通过CPUID指令直接获取到当前CPU所支持的指令集。
步骤302:将CPU所支持的指令集与当前软件包对应的指令集对比。
在实际应用中可以通过指令位图,将当前CPU所支持的指令集后,与当前软件包对应的指令集进行对比。通过指令位图可以标识出编译当前软件包时所使用的指令集,对比这些指令集是否为CPU所支持的指令集。
步骤303:如果当前软件包对应的指令集均为CPU所支持的指令集,则确定CPU所支持的指令集与编译当前软件包所使用的指令集兼容。即可以将指令兼容性判断程序的退出状态置为0,假设指令兼容性判断程序由C语言编写,则main函数返回0。
步骤304:如果当前软件包对应的指令集不均为CPU所支持的指令集,则确定CPU所支持的指令集与编译当前软件包所使用的指令集不兼容。即可以将指令兼容性判断程序的退出状态置为非0,假设指令兼容性判断程序由C语言编写,则main函数返回-1。
参见图4所示,当CPU不支持CPUID指令,则判断CPU所支持的指令集是否与编译当前软件包所使用的指令集兼容的具体实现可以包括:
步骤401:执行当前软件包中的测试程序段,测试程序段为使用当前软件包的指令集编译后的汇编语言程序段。
例如ARM系列CPU则不支持CPUID指令,无法通过CPUID指令直接获取到当前CPU所支持的指令集。则需要按照本实施例的方式进行兼容性判断。
在指令兼容性判断程序中存在特殊的汇编语言程序段,该汇编语言程序段使用与编译当前软件包的指令集进行编译,编译后的汇编语言程序段作为测试程序段进行执行。
例如,该测试程序段是由指令集1以及指令集2编译的,有CPU1支持指令集1以及指令集2,则该测试程序段运行在CPU1上不会产生问题;另有CPU2仅支持指令集1,则该测试程序段运行在CPU2时,由于CPU2不支持指令集2,则测试程序段无法正确运行,会因非常指令而异常退出。因此,可以通过执行当前软件包中的测试程序段,来判断CPU所支持的指令集是否与编译当前软件包所使用的指令集兼容。
汇编语言程序段只能使用汇编语言编写,而不能使用C语言等高级语言。因为高级语言在被编译器编译成机器指令时,无法控制编译器最终编译的机器代码使用哪类指令集,从而无法对兼容性进行判断。
步骤402:如果测试程序段均能正确执行,则确定CPU所支持的指令集与编译当前软件包所使用的指令集兼容。即可以将指令兼容性判断程序的退出状态置为0。
步骤403:如果测试程序段无法正确执行,则确定CPU所支持的指令集与编译当前软件包所使用的指令集不兼容。即可以将指令兼容性判断程序的退出状态置为非0。
通过上述两个实施例可以通过指令兼容性判断程序判断CPU所支持的指令集是否与编译当前软件包所使用的指令集兼容。
参见图5所示,示出了本申请实施例中提供的实现软件版本选择的装置实施例的示意图,可以包括:
选取单元501,用于在软件包集合中选取当前软件包,软件包集合中的各个软件包分别由不同数量的指令集编译获得。
在本申请实施例一些可能的实现方式中,软件包可以包括主程序以及指令兼容性判断程序。
软件包的编译过程可以包括:编译主程序,将编译主程序使用的指令集记录到配置文件中;根据配置文件生成指令位图;将指令位图以全局变量的形式替换到指令兼容性判断程序中;使用与编译主程序一致的指令集编译指令兼容性判断程序;将编译后的主程序与指令兼容性判断程序打包生成软件包。
在本申请实施例一些可能的实现方式中,选取单元可以具体用于:
在当前软件包集合中选取编译所使用的指令集数量最多的软件包作为当前软件包。
判断单元502,用于判断中央处理器CPU所支持的指令集是否与编译当前软件包所使用的指令集兼容。
在本申请实施例一些可能的实现方式中,判断单元可以具体用于:
调用当前软件包中的指令兼容性判断程序,由指令兼容性判断程序判断CPU所支持的指令集是否与编译当前软件包所使用的指令集兼容。
运行单元503,用于如果判断单元的判断结果为CPU所支持的指令集与编译当前软件包所使用的指令集兼容,则运行当前软件包。
去除单元504,用于如果判断单元的判断结果为如果CPU所支持的指令集与编译当前软件包所使用的指令集不兼容,则将当前软件包从软件包集合中去除,并返回选取单元在软件包集合中确定当前软件包,直到运行单元运行当前软件包或者软件包集合为空。
在本申请实施例一些可能的实现方式中,判断单元可以包括:
获取子单元,用于当CPU支持获取指令集标识指令,通过获取指令集标识指令获取CPU所支持的指令集;
对比子单元,用于将CPU所支持的指令集与当前软件包对应的指令集对比;
第一确定子单元,用于如果当前软件包对应的指令集均为CPU所支持的指令集,则确定CPU所支持的指令集与编译当前软件包所使用的指令集兼容;如果当前软件包对应的指令集不均为CPU所支持的指令集,则确定CPU所支持的指令集与编译当前软件包所使用的指令集不兼容。
在本申请实施例一些可能的实现方式中,判断单元可以包括:
运行子单元,用于当CPU不支持获取指令集标识指令,执行当前软件包中的测试程序段,测试程序段为使用当前软件包的指令集编译后的汇编语言程序段;
第二确定子单元,用于如果测试程序段均能正确执行,则确定CPU所支持的指令集与编译当前软件包所使用的指令集兼容;如果测试程序段无法正确执行,则确定CPU所支持的指令集与编译当前软件包所使用的指令集不兼容。
另外,本申请实施例中还提供一种计算机可读存储介质实施例,该机算机可读存储介质中可以存储有指令,当该指令在终端设备上运行时,使得终端设备执行本申请实施例中提供的实现软件版本选择的方法。
本申请实施例中还提供一种计算机程序产品,该计算机程序产品在终端设备上运行时,可以使得终端设备执行本申请实施例中提供的实现软件版本选择的方法。
这样,本申请实施例利用不同数量的指令集分别编译出多个软件包,在包括这些软件包的软件包集合中,逐个选取软件包判断CPU所支持的指令集是否与编译所选取的软件包所使用的指令集兼容,如果兼容则可以运行选取的软件包,如果不兼容则继续在软件包集合中选取软件包进行判断,不同的硬件设备均可以采用本实施例的方式选择与CPU兼容的软件版本,选择与CPU兼容的软件版本的通用性较高。
需要说明的是,本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的系统或装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种实现软件版本选择的方法,其特征在于,所述方法包括:
在软件包集合中选取当前软件包,所述软件包集合中的各个软件包分别由不同数量的指令集编译获得;
判断中央处理器CPU所支持的指令集是否与编译所述当前软件包所使用的指令集兼容;
如果所述CPU所支持的指令集与编译所述当前软件包所使用的指令集兼容,则运行所述当前软件包;
如果所述CPU所支持的指令集与编译所述当前软件包所使用的指令集不兼容,则将所述当前软件包从所述软件包集合中去除,并执行所述在软件包集合中确定当前软件包及后续步骤,直到运行所述当前软件包或者所述软件包集合为空。
2.根据权利要求1所述的方法,其特征在于,所述在软件包集合中选取当前软件包,包括:
在当前软件包集合中选取编译所使用的指令集数量最多的软件包作为当前软件包。
3.根据权利要求1所述的方法,其特征在于,所述软件包包括主程序以及指令兼容性判断程序,所述判断CPU所支持的指令集是否与编译所述当前软件包所使用的指令集兼容,包括:
调用所述当前软件包中的指令兼容性判断程序,由所述指令兼容性判断程序判断CPU所支持的指令集是否与编译所述当前软件包所使用的指令集兼容。
4.根据权利要求1-3任一项所述的方法,其特征在于,所述判断CPU所支持的指令集是否与编译所述当前软件包所使用的指令集兼容,包括:
当所述CPU支持获取指令集标识指令,通过所述获取指令集标识指令获取CPU所支持的指令集;
将所述CPU所支持的指令集与所述当前软件包对应的指令集对比;
如果所述当前软件包对应的指令集均为所述CPU所支持的指令集,则确定所述CPU所支持的指令集与编译所述当前软件包所使用的指令集兼容;
如果所述当前软件包对应的指令集不均为所述CPU所支持的指令集,则确定所述CPU所支持的指令集与编译所述当前软件包所使用的指令集不兼容。
5.根据权利要求1-3任一项所述的方法,其特征在于,所述判断CPU所支持的指令集是否与编译所述当前软件包所使用的指令集兼容,包括:
当所述CPU不支持获取指令集标识指令,执行所述当前软件包中的测试程序段,所述测试程序段为使用所述当前软件包的指令集编译后的汇编语言程序段;
如果所述测试程序段均能正确执行,则确定所述CPU所支持的指令集与编译所述当前软件包所使用的指令集兼容;
如果所述测试程序段无法正确执行,则确定所述CPU所支持的指令集与编译所述当前软件包所使用的指令集不兼容。
6.根据权利要求3所述的方法,其特征在于,所述软件包的编译过程包括:编译所述主程序,将编译所述主程序使用的指令集记录到配置文件中;根据所述配置文件生成指令位图;将所述指令位图以全局变量的形式替换到所述指令兼容性判断程序中;使用与编译所述主程序一致的指令集编译所述指令兼容性判断程序;将编译后的主程序与指令兼容性判断程序打包生成软件包。
7.一种实现软件版本选择的装置,其特征在于,所述装置包括:
选取单元,用于在软件包集合中选取当前软件包,所述软件包集合中的各个软件包分别由不同数量的指令集编译获得;
判断单元,用于判断中央处理器CPU所支持的指令集是否与编译所述当前软件包所使用的指令集兼容;
运行单元,用于如果所述判断单元的判断结果为所述CPU所支持的指令集与编译所述当前软件包所使用的指令集兼容,则运行所述当前软件包;
去除单元,用于如果所述判断单元的判断结果为如果所述CPU所支持的指令集与编译所述当前软件包所使用的指令集不兼容,则将所述当前软件包从所述软件包集合中去除,并返回选取单元在软件包集合中确定当前软件包,直到所述运行单元运行所述当前软件包或者所述软件包集合为空。
8.根据权利要求6所述的装置,其特征在于,所述选取单元具体用于:
在当前软件包集合中选取编译所使用的指令集数量最多的软件包作为当前软件包。
9.一种计算机可读存储介质,其特征在于,所述机算机可读存储介质中存储有指令,当所述指令在终端设备上运行时,使得所述终端设备执行权利要求1-6任一项所述的实现软件版本选择的方法。
10.一种计算机程序产品,其特征在于,所述计算机程序产品在终端设备上运行时,使得所述终端设备执行权利要求1-6任一项所述的实现软件版本选择的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710791338.7A CN109426528A (zh) | 2017-09-05 | 2017-09-05 | 实现软件版本选择的方法、装置及存储介质、程序产品 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710791338.7A CN109426528A (zh) | 2017-09-05 | 2017-09-05 | 实现软件版本选择的方法、装置及存储介质、程序产品 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109426528A true CN109426528A (zh) | 2019-03-05 |
Family
ID=65514076
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710791338.7A Pending CN109426528A (zh) | 2017-09-05 | 2017-09-05 | 实现软件版本选择的方法、装置及存储介质、程序产品 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109426528A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112486570A (zh) * | 2020-11-06 | 2021-03-12 | 麒麟软件有限公司 | 一种不同类型CPU的Glibc兼容方法 |
CN114051046A (zh) * | 2021-11-16 | 2022-02-15 | 北京百度网讯科技有限公司 | 云数据下发方法、相关装置及计算机程序产品 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101488093A (zh) * | 2009-03-11 | 2009-07-22 | 华为技术有限公司 | 一种嵌入式计算机系统及其硬件配置方法 |
US20110083127A1 (en) * | 2009-10-07 | 2011-04-07 | Sony Corporation | System and method for effectively providing software to client devices in an electronic network |
CN102520948A (zh) * | 2011-12-09 | 2012-06-27 | 福建联迪商用设备有限公司 | 应用程序维护更新方法和装置 |
CN103500107A (zh) * | 2013-09-29 | 2014-01-08 | 中国船舶重工集团公司第七0九研究所 | 一种cpu的硬件优化方法 |
US20140089806A1 (en) * | 2012-09-25 | 2014-03-27 | John C. Weast | Techniques for enhanced content seek |
CN104021012A (zh) * | 2014-05-16 | 2014-09-03 | 可牛网络技术(北京)有限公司 | 应用程序的下载方法、执行异常的分析方法和装置 |
CN105354071A (zh) * | 2015-12-15 | 2016-02-24 | 武汉长光科技有限公司 | 一种嵌入式软件兼容硬件的方法 |
US20160259741A1 (en) * | 2015-03-06 | 2016-09-08 | Microchip Technology Incorporated | Microcontroller Or Microprocessor With Dual Mode Interrupt |
CN106406819A (zh) * | 2016-09-30 | 2017-02-15 | 广州华多网络科技有限公司 | 一种cpu的指令集兼容方法及其终端 |
-
2017
- 2017-09-05 CN CN201710791338.7A patent/CN109426528A/zh active Pending
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101488093A (zh) * | 2009-03-11 | 2009-07-22 | 华为技术有限公司 | 一种嵌入式计算机系统及其硬件配置方法 |
US20110083127A1 (en) * | 2009-10-07 | 2011-04-07 | Sony Corporation | System and method for effectively providing software to client devices in an electronic network |
CN102520948A (zh) * | 2011-12-09 | 2012-06-27 | 福建联迪商用设备有限公司 | 应用程序维护更新方法和装置 |
US20140089806A1 (en) * | 2012-09-25 | 2014-03-27 | John C. Weast | Techniques for enhanced content seek |
CN103500107A (zh) * | 2013-09-29 | 2014-01-08 | 中国船舶重工集团公司第七0九研究所 | 一种cpu的硬件优化方法 |
CN104021012A (zh) * | 2014-05-16 | 2014-09-03 | 可牛网络技术(北京)有限公司 | 应用程序的下载方法、执行异常的分析方法和装置 |
US20160259741A1 (en) * | 2015-03-06 | 2016-09-08 | Microchip Technology Incorporated | Microcontroller Or Microprocessor With Dual Mode Interrupt |
CN105354071A (zh) * | 2015-12-15 | 2016-02-24 | 武汉长光科技有限公司 | 一种嵌入式软件兼容硬件的方法 |
CN106406819A (zh) * | 2016-09-30 | 2017-02-15 | 广州华多网络科技有限公司 | 一种cpu的指令集兼容方法及其终端 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112486570A (zh) * | 2020-11-06 | 2021-03-12 | 麒麟软件有限公司 | 一种不同类型CPU的Glibc兼容方法 |
CN112486570B (zh) * | 2020-11-06 | 2023-06-02 | 麒麟软件有限公司 | 一种不同类型CPU的Glibc兼容方法 |
CN114051046A (zh) * | 2021-11-16 | 2022-02-15 | 北京百度网讯科技有限公司 | 云数据下发方法、相关装置及计算机程序产品 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6078744A (en) | Method and apparatus for improving compiler performance during subsequent compilations of a source program | |
CN106227671B (zh) | 程序运行性能分析方法及装置 | |
US6922827B2 (en) | Iterative software development environment with prioritized build rules | |
CN1838088B (zh) | 探测具有限制性调用约定代码的方法 | |
CN109491662A (zh) | 代码打包方法、计算机装置及计算机可读存储介质、代码打包系统 | |
JP2016519385A (ja) | ドライバをロードする方法及び組み込みデバイス | |
US8863100B2 (en) | Application services source refactoring | |
US20100180266A1 (en) | Multi Level Virtual Function Tables | |
US20110154299A1 (en) | Apparatus and method for executing instrumentation code | |
US20080077908A1 (en) | Method and apparatus for application building using build styles | |
CN109739508B (zh) | 源代码编译方法、装置、系统及存储介质 | |
US20190179622A1 (en) | Performing a compiler optimization pass as a transaction | |
US20140075245A1 (en) | Apparatus and method for detecting location of source code error in mixed-mode program | |
CN109426528A (zh) | 实现软件版本选择的方法、装置及存储介质、程序产品 | |
CN115629971A (zh) | 一种应用的开发系统和开发方法 | |
CN112882718A (zh) | 编译处理方法、装置、设备及存储介质 | |
CN103677778A (zh) | 一种CAP文件Classref常量的解析方法 | |
CN108694049B (zh) | 一种更新软件的方法和设备 | |
JP2000010790A (ja) | グロ―バル衝突判定用のユニタリデ―タ構造体のシステム、方法及びコンピュ―タプログラム製品 | |
Correya et al. | Essentia. js: A JavaScript library for music and audio analysis on the web | |
CN110795104A (zh) | 一种用于TensorFlow自定义操作生成的方法 | |
CN108874395B (zh) | 一种组件化流处理过程中的硬编译方法及装置 | |
JP6500626B2 (ja) | 計算機、コンパイラプログラム、リンクプログラムおよびコンパイル方法 | |
US11221844B2 (en) | Automated application partitioning system | |
CN106293861A (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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190305 |
|
RJ01 | Rejection of invention patent application after publication |