CN109739508B - 源代码编译方法、装置、系统及存储介质 - Google Patents
源代码编译方法、装置、系统及存储介质 Download PDFInfo
- Publication number
- CN109739508B CN109739508B CN201811625111.6A CN201811625111A CN109739508B CN 109739508 B CN109739508 B CN 109739508B CN 201811625111 A CN201811625111 A CN 201811625111A CN 109739508 B CN109739508 B CN 109739508B
- Authority
- CN
- China
- Prior art keywords
- file
- compiling
- command
- source
- platform
- 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.)
- Active
Links
Images
Abstract
本发明提供一种源代码编译方法、装置、系统及存储介质,该方法包括:从UEFI源代码中,选取MIPS平台所需代码的初始文件,所述初始文件包括多个在平台上可执行文件的源文件;将所述初始文件添加到所述MIPS平台对应的目标编译工具中,所述目标编译工具中加载有用于MIPS平台的编译参数和编译规则;通过所述目标编译工具对所述初始文件中的源文件进行编译,以使得编译得到的目标格式的文件能够在MIPS平台上执行。从而可以实现利用开源的UEFI源代码在特定的MIPS平台上进行移植,并成功编译出能够在MIPS平台运行的代码,整个编译过程符合标准UEFI的规范,具备较强的可移植性和可扩展性。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种源代码编译方法、装置、系统及存储介质。
背景技术
统一的可扩展固件接口(Unified Extensible Firmware Interface,UEFI),是一种详细描述类型接口的标准。目前,在UEFI官方源码中的编译工具不支持MIPS平台。
现有技术中,一般采用的非UEFI标准来实现,即运用一些非常规的编译方式来编译MIPS平台能够运行的代码。最终生成所需要的目标格式文件,例如格式为.efi、.fd的文件。
但是,这种编译方式,编译过程复杂,并且容易产生各种稳定性的问题。
发明内容
本发明提供一种源代码编译方法、装置、系统及存储介质,以实现利用开源的UEFI源代码在特定的MIPS平台上进行移植,并成功编译出能够在MIPS平台运行的代码,整个编译过程符合标准UEFI的规范,具备较强的可移植性和可扩展性。
第一方面,本发明实施例提供一种源代码编译方法,包括:
从UEFI源代码中,选取MIPS平台所需代码的初始文件,所述初始文件包括多个在平台上可执行文件的源文件;
将所述初始文件添加到所述MIPS平台对应的目标编译工具中,所述目标编译工具中加载有用于MIPS平台的编译参数和编译规则;
通过所述目标编译工具对所述初始文件中的源文件进行编译,以使得编译得到的目标格式的文件能够在MIPS平台上执行。
在一种可能的设计中,从UEFI源代码中,选取MIPS平台所需代码的初始文件之前,还包括:
获取初始编译工具源文件;其中,所述初始编译工具源文件为EDKII源代码中的编译部分;
接收用于MIPS平台的编译参数和编译规则;
根据所述初始编译工具源文件以及用于MIPS平台的编译参数和编译规则,得到目标编译工具源文件;
对所述目标编译工具源文件进行编译,编译出所述目标编译工具。
在一种可能的设计中,所述根据所述初始编译工具源文件以及用于MIPS平台的编译参数和编译规则,得到目标编译工具源文件,包括:
接收用于MIPS平台的编译参数和编译规则,将用于MIPS平台的编译参数保存至参数文件,将用于MIPS平台的编译规则保存至规则文件,以使得编译命令调用所述参数文件和/或所述规则文件;
在命令的可执行文件的源文件中的架构相关参数中添加MIPS的编译信息。
在一种可能的设计中,所述编译命令为第一编译命令,所述第一编译命令为用于编译的Linux命令,所述编译命令调用所述参数文件和/或所述规则文件,包括:
所述第一编译命令调用所述用于MIPS平台的参数文件和规则文件。
在一种可能的设计中,所述编译命令为第二编译命令,所述第二编译命令为用于编译的UEFI命令,所述编译命令调用所述参数文件和/或所述规则文件,包括:
所述第二编译命令调用所述用于MIPS平台的规则文件。
在一种可能的设计中,所述命令的可执行文件的源文件包括格式转换命令的可执行文件的源文件、压缩存储命令的可执行文件的源文件以及第二编译命令的可执行文件源文件。
在一种可能的设计中,通过所述目标编译工具对所述初始文件中的源文件进行编译,以使得编译得到的目标格式的文件能够在所述MIPS平台上执行,包括:
对所述用于在MIPS平台上执行的源文件进行预处理,以使得Linux操作系统可识别;
通过第一编译命令将所述预处理后的文件编译成MIPS平台下Linux操作系统可执行的文件;
将所述Linux操作系统可执行的文件进行处理以生成能够在MIPS平台下运行的UEFI可识别的符合Flash存储结构的可执行文件。
在一种可能的设计中,所述对所述用于在MIPS平台上执行的源文件进行预处理,包括:
对.dsc平台描述文件、.dec包声明文件、.fdf flash描述文件以及.inf模块信息文件进行预处理,处理后生成对应的高级语言程序文件。
在一种可能的设计中,所述通过第一编译命令将所述预处理后的文件编译成MIPS平台下Linux操作系统可执行的文件,包括:
通过所述第一编译命令编译所述预处理后的文件以生成中间目标编译文件以及用于链接程序地址的链接文件;
将多个中间目标编译文件以及对应的链接文件进行组合,以生成MIPS平台下Linux操作系统可执行的文件。
第二方面,本发明实施例提供一种源代码编译装置,包括:
选取模块,用于从UEFI源代码中,选取MIPS平台所需代码的初始文件,所述初始文件包括多个在平台上可执行文件的源文件;
添加模块,用于将所述初始文件添加到所述MIPS平台对应的目标编译工具中,所述目标编译工具中加载有用于MIPS平台的编译参数和编译规则;
编译模块,用于通过所述目标编译工具对所述初始文件中的源文件进行编译,以使得编译得到的目标格式的文件能够在MIPS平台上执行。
在一种可能的设计中,所述编译模块,还用于:
获取初始编译工具源文件;其中,所述初始编译工具源文件为EDKII源代码中的编译部分;
接收用于MIPS平台的编译参数和编译规则;
根据所述初始编译工具源文件以及用于MIPS平台的编译参数和编译规则,得到目标编译工具源文件;
对所述目标编译工具源文件进行编译,编译出所述目标编译工具。
在一种可能的设计中,所述根据所述初始编译工具源文件以及用于MIPS平台的编译参数和编译规则,得到目标编译工具源文件,包括:
接收用于MIPS平台的编译参数和编译规则,将用于MIPS平台的编译参数保存至参数文件,将用于MIPS平台的编译规则保存至规则文件,以使得编译命令调用所述参数文件和/或所述规则文件;
在命令的可执行文件的源文件中的架构相关参数中添加MIPS的编译信息。
在一种可能的设计中,所述编译命令为第一编译命令,所述第一编译命令为用于编译的Linux命令,所述编译命令调用所述参数文件和/或所述规则文件,包括:
所述第一编译命令调用所述用于MIPS平台的参数文件和规则文件。
在一种可能的设计中,所述编译命令为第二编译命令,所述第二编译命令为用于编译的UEFI命令,所述编译命令调用所述参数文件和/或所述规则文件,包括:
所述第二编译命令调用所述用于MIPS平台的规则文件。
在一种可能的设计中,所述命令的可执行文件的源文件包括格式转换命令的可执行文件的源文件、压缩存储命令的可执行文件的源文件以及第二编译命令的可执行文件源文件。
在一种可能的设计中,所述编译模块,具体用于:
对所述用于在MIPS平台上执行的源文件进行预处理,以使得Linux操作系统可识别;
通过第一编译命令将所述预处理后的文件编译成MIPS平台下Linux操作系统可执行的文件;
将所述Linux操作系统可执行的文件进行处理以生成能够在MIPS平台下运行的UEFI可识别的符合Flash存储结构的可执行文件。
在一种可能的设计中,所述对所述用于在MIPS平台上执行的源文件进行预处理,包括:
对.dsc平台描述文件、.dec包声明文件、.fdf flash描述文件以及.inf模块信息文件进行预处理,处理后生成对应的高级语言程序文件。
在一种可能的设计中,所述通过第一编译命令将所述预处理后的文件编译成MIPS平台下Linux操作系统可执行的文件,包括:
通过所述第一编译命令编译所述预处理后的文件以生成中间目标编译文件以及用于链接程序地址的链接文件;
将多个中间目标编译文件以及对应的链接文件进行组合,以生成MIPS平台下Linux操作系统可执行的文件。
第三方面,本发明实施例提供一种源代码编译系统,包括:存储器和处理器,存储器中存储有所述处理器的可执行指令;其中,所述处理器配置为经由执行所述可执行指令来执行第一方面中任一项所述的源代码编译方法。
第四方面,本发明实施例一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现第一方面中任一项所述的源代码编译方法。
本发明提供的源代码编译方法、装置、系统及存储介质,通过从UEFI源代码中,选取MIPS平台所需代码的初始文件,所述初始文件包括多个在平台上可执行文件的源文件;将所述初始文件添加到所述MIPS平台对应的目标编译工具中,所述目标编译工具中加载有用于MIPS平台的编译参数和编译规则;通过所述目标编译工具对所述初始文件中的源文件进行编译,以使得编译得到的目标格式的文件能够在MIPS平台上执行。从而可以实现利用开源的UEFI源代码在特定的MIPS平台上进行移植,并成功编译出能够在MIPS平台运行的代码,整个编译过程符合标准UEFI的规范,具备较强的可移植性和可扩展性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明的应用场景示意图;
图2为本发明实施例一提供的源代码编译方法的流程图;
图3为标编译工具的文件转换原理示意图;
图4为本发明实施例二提供的源代码编译装置的结构示意图;
图5为本发明实施例四提供的源代码编译系统的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
下面以具体地实施例对本发明的技术方案进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例不再赘述。
以下,对本申请中的部分用语进行解释说明,以便于本领域技术人员理解:
1)统一的可扩展固件接口(Unified Extensible Firmware Interface,UEFI),是一种详细描述类型接口的标准。这种接口用于操作系统自动从预启动的操作环境,加载到一种操作系统上。
2)MIPS是指MIPS公司推出的处理器芯片,其中,MIPS指令架构与X86指令架构互不兼容,MIPS指令架构由MIPS公司所创,属于RISC体系。另外,在UEFI的官网社区代码中,仅仅有X86、ARM等平台的代码,但是这些代码不能在MIPS平台上直接应用。
图1为本发明的应用场景示意图,如图1所示,包括:UEFI源代码下载端10、MIPS平台20,其中,MIPS平台20中加载有目标编译工具21。经过目标编译工具21编译的代码可以直接在MIPS平台20中运行。具体地,首先从官方UEFI源代码中,选取包含MIPS平台20所需代码的初始文件(例如.dsc平台描述文件、.dec包声明文件以及.inf模块信息文件,这些文件中的代码不能直接在MIPS平台20上运行)。然后将初始文件添加到MIPS平台20对应的目标编译工具21中;通过目标编译工具将初始文件中的代码进行编译,得到目标格式的文件(例如格式为.efi、.fd的文件)。
采用上述方法可以将开源的UEFI源代码在特定的MIPS平台上进行移植,并成功编译出能够在MIPS平台运行的代码,整个编译过程符合标准UEFI的规范,具备较强的可移植性和可扩展性。无需额外在MIPS平台上再次开发UEFI,避免了再次开发可能造成的不稳定问题,达到了节约成本和提升开发效率的目的。
下面以具体地实施例对本发明的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本发明的实施例进行描述。
图2为本发明实施例一提供的源代码编译方法的流程图,如图2所示,本实施例中的方法可以包括:
S101、从UEFI源代码中,选取MIPS平台所需代码的初始文件。
本实施例中,初始文件包括多个在平台上可执行文件的源文件,可以从UEFI源代码官网上下载UEFI源代码,然后从下载的UEFI源代码中选取包含MIPS平台所需代码的初始文件(例如.dsc平台描述文件、.dec包声明文件以及.inf模块信息文件)。
S102、将初始文件添加到MIPS平台对应的目标编译工具中,目标编译工具中加载有用于MIPS平台的编译参数和编译规则。
本实施例中,目标编译工具用于将步骤S101中的初始文件转换为目标格式的文件(例如二进制文件)。由于UEFI官方源码中的编译工具不支持编译MIPS平台,因此需要重新生成能够在MIPS平台应用的目标编译工具。
S103、通过目标编译工具对初始文件中的源文件进行编译,以使得编译得到的目标格式的文件能够在MIPS平台上执行。
本实施例中,可以通过目标编译工具直接将初始文件中的代码进行转换,得到能够在MIPS平台运行的代码文件,例如二进制文件。步骤S102中添加了命令的可执行文件的源文件,该命令的可执行文件的源文件包括格式转换命令(GenFw)的可执行文件的源文件、压缩存储命令(GenFd)的可执行文件的源文件以及第二编译命令的可执行文件源文件。
具体地,可以对所述用于在MIPS平台上执行的源文件进行预处理,以使得Linux操作系统可识别;通过第一编译命令将所述预处理后的文件编译成MIPS平台下Linux操作系统可执行的文件;将所述Linux操作系统可执行的文件进行处理以生成能够在MIPS平台下运行的UEFI可识别的符合Flash存储结构的可执行文件。通过所述第一编译命令编译所述预处理后的文件以生成中间目标编译文件(.obj格式文件)以及用于链接程序地址的链接文件(.map格式文件);然后将多个中间目标编译文件以及对应的链接文件进行组合,以生成MIPS平台下Linux操作系统可执行的文件。
本实施例中,对所述用于在MIPS平台上执行的源文件进行预处理是指:对.dsc平台描述文件、.dec包声明文件、.fdf flash描述文件以及.inf模块信息文件进行预处理,处理后生成对应的高级语言程序文件;其中,高级语言程序包括C语言程序。
本实施例,通过从UEFI源代码中,选取MIPS平台所需代码的初始文件,所述初始文件包括多个在平台上可执行文件的源文件;将所述初始文件添加到所述MIPS平台对应的目标编译工具中,所述目标编译工具中加载有用于MIPS平台的编译参数和编译规则;通过所述目标编译工具对所述初始文件中的源文件进行编译,以使得编译得到的目标格式的文件能够在MIPS平台上执行。从而可以实现利用开源的UEFI源代码在特定的MIPS平台上进行移植,并成功编译出能够在MIPS平台运行的代码,整个编译过程符合标准UEFI的规范,具备较强的可移植性和可扩展性。
本发明还提供一种源代码编译方法,该方法中,在执行步骤S101之前,还包括如下步骤:
获取初始编译工具源文件。
本实施例中,所述初始编译工具源文件为EDKII源代码中的编译部分;接收用于MIPS平台的编译参数和编译规则;根据所述初始编译工具源文件以及用于MIPS平台的编译参数和编译规则,得到目标编译工具源文件;对所述目标编译工具源文件进行编译,编译出所述目标编译工具。
具体地,接收用于MIPS平台的编译参数和编译规则,将用于MIPS平台的编译参数保存至参数文件,将用于MIPS平台的编译规则保存至规则文件,以使得编译命令调用所述参数文件和/或所述规则文件;在命令的可执行文件的源文件中的架构相关参数中添加MIPS的编译信息。其中,所述MIPS的编译信息用于配合编译参数和编译规则实现对源文件在MIPS架构下的编译。
需要说明的是,编译命令可以包括第一编译命令和第二编译命令。其中,第一编译命令为用于编译的Linux命令,通过所述第一编译命令调用所述用于MIPS平台的参数文件和规则文件。第二编译命令(例如build命令)为用于编译的UEFI命令,所述第二编译命令调用所述用于MIPS平台的规则文件。
具体地,以MIPS64平台为例(MIPS公司推出的64位处理器芯片),对源代码编译方法的实现过程进行详细说明。
首先,可以在UEFI官网下载EDKII源代码,修改EDKII源代码中,BaseTools/Conf/目录下面的build_rule.template文件(规则文件)和tools_def.template文件(参数文件)。在build_rule.template文件和tools_def.template文件中定义MIPS平台所使用的交叉编译器的编译工具所使用的编译参数和编译规则。
其中,文件[Assembly-Code-File.SEC.MIPS64EL]定义了对MIPS64平台UEFI的Sec阶段的代码编译规则。其中,Sec阶段可以编译成格式为.bin的文件。文件[Binary.SEC.MIPS64EL]中具体定义了在MIPS64平台中生成格式为.bin文件的规则。文件[Static-Library-File.COMMON.MIPS64EL]定义了在MIPS64平台中,UEFI除Sec外其他的模块的代码生成MIPS平台下Linux操作系统可执行的文件的规则。文件[Dynamic-Library-File.COMMON.MIPS64EL]定义了在MIPS64平台除Sec外其他模块代码,将格式为.dll文件转换为对应的能够在MIPS平台下运行的UEFI可识别的符合Flash存储结构的可执行文件的规则。
具体地,获取EDKII源代码中BaseTools/Conf/目录下面的build_rule.template文件(规则文件)和tools_def.template文件(参数文件)。然后根据build_rule.template文件和tools_def.template文件中的编译参数和编译规则,生成EDKII源代码中BaseTools/Source/C目录下面的C语言程序源文件。其中,C语言程序源文件包含:GenFw命令的可执行文件、GenFd命令的可执行文件。修改EDKII源代码中BaseTools/Source/Python目录下面的Python代码文件;其中,Python代码文件包含:build命令的可执行文件。
表1
表1中显示了BaseTools/Source/C目录下面需要修改的C语言程序源文件。参见表1,Elf64Convert.c文件的代码是编译工具GenFw命令的源代码文件。GenFw命令是将elf格式文件转化为efi文件用到的代码。
可选地,若在编译过程中使用的是MIPS64位小端指令,则在生成64位elf文件后,还要根据UEFI的编译原理,将elf文件转换成PE32+格式的.efi文件。这时,可以通过GenFw命令,对elf格式文件中的各种Section重新进行写入;通过运行GenFw命令,将格式为.elf的文件转换成格式为.efi的文件。本实施例中,格式为.efi的文件是根据elf标准和pe32+格式的标准,对64位的.elf文件进行转换得到的。
表2
表2中显示了BaseTools/Source/Python目录下面需要修改的Python代码文件。
具体地,图3为标编译工具的文件转换原理示意图,如图3所示,首先运行build命令,利用.dsc平台描述文件、.dec包声明文件、.fdf flash描述文件、.inf模块信息文件(.inf模块信息文件也可以是包含在dsc平台描述文件和.fdf flash描述文件中)对高级语言程序源文件(例如.c文件)以及汇编语言程序源文件(例如.s文件).s进行编译,得到MIPS平台下Linux操作系统可执行的文件(例如高级语言程序文件);然后运行make命令,根据build命令编译后的文件生成中间目标编译文件(.obj格式文件)以及用于链接程序地址的链接文件(.map格式文件);然后将多个中间目标编译文件以及对应的链接文件进行组合,以生成MIPS平台下Linux操作系统可执行的文件(.dll格式文件)。运行GenFw命令,将格式为.dll的文件转换成UEFI可运行识别的文件(.efi格式文件);运行GenFd命令,利用.efi、.dsc、.fdf文件生成固件卷(.fv格式文件)和Flash描述文件(.fd格式文件)。
需要说明的是,本实施例虽然以MIPS64平台为例进行详细说明,但是MIPS平台的架构具有一定的通用性,因此本实施例中的源代码编译方法也可以在其他MIPS平台上进行推广使用,其具体实现过程和实现原理类似,此处不再赘述。
图4为本发明实施例二提供的源代码编译装置的结构示意图,如图4所示,本实施例中的装置可以包括:
选取模块31,用于从UEFI源代码中,选取MIPS平台所需代码的初始文件,所述初始文件包括多个在平台上可执行文件的源文件;
添加模块32,用于将所述初始文件添加到所述MIPS平台对应的目标编译工具中,所述目标编译工具中加载有用于MIPS平台的编译参数和编译规则;
编译模块33,用于通过所述目标编译工具对所述初始文件中的源文件进行编译,以使得编译得到的目标格式的文件能够在MIPS平台上执行。
在一种可能的设计中,所述编译模块33,还用于:
获取初始编译工具源文件;其中,所述初始编译工具源文件为EDKII源代码中的编译部分;
接收用于MIPS平台的编译参数和编译规则;
根据所述初始编译工具源文件以及用于MIPS平台的编译参数和编译规则,得到目标编译工具源文件;
对所述目标编译工具源文件进行编译,编译出所述目标编译工具。
在一种可能的设计中,所述根据所述初始编译工具源文件以及用于MIPS平台的编译参数和编译规则,得到目标编译工具源文件,包括:
接收用于MIPS平台的编译参数和编译规则,将用于MIPS平台的编译参数保存至参数文件,将用于MIPS平台的编译规则保存至规则文件,以使得编译命令调用所述参数文件和/或所述规则文件;
在命令的可执行文件的源文件中的架构相关参数中添加MIPS的编译信息。
在一种可能的设计中,所述编译命令为第一编译命令,所述第一编译命令为用于编译的Linux命令,所述编译命令调用所述参数文件和/或所述规则文件,包括:
所述第一编译命令调用所述用于MIPS平台的参数文件和规则文件。
在一种可能的设计中,所述编译命令为第二编译命令,所述第二编译命令为用于编译的UEFI命令,所述编译命令调用所述参数文件和/或所述规则文件,包括:
所述第二编译命令调用所述用于MIPS平台的规则文件。
在一种可能的设计中,所述命令的可执行文件的源文件包括格式转换命令的可执行文件的源文件、压缩存储命令的可执行文件的源文件以及第二编译命令的可执行文件源文件。
在一种可能的设计中,所述编译模块33,具体用于:
对所述用于在MIPS平台上执行的源文件进行预处理,以使得Linux操作系统可识别;
通过第一编译命令将所述预处理后的文件编译成MIPS平台下Linux操作系统可执行的文件;
将所述Linux操作系统可执行的文件进行处理以生成能够在MIPS平台下运行的UEFI可识别的符合Flash存储结构的可执行文件。
在一种可能的设计中,所述对所述用于在MIPS平台上执行的源文件进行预处理,包括:
对.dsc平台描述文件、.dec包声明文件、.fdf flash描述文件以及.inf模块信息文件进行预处理,处理后生成对应的高级语言程序文件。
在一种可能的设计中,所述通过第一编译命令将所述预处理后的文件编译成MIPS平台下Linux操作系统可执行的文件,包括:
通过所述第一编译命令编译所述预处理后的文件以生成中间目标编译文件以及用于链接程序地址的链接文件;
将多个中间目标编译文件以及对应的链接文件进行组合,以生成MIPS平台下Linux操作系统可执行的文件。
本实施例的显示内存的分配装置,可以执行图2所示方法中的技术方案,其具体实现过程和技术原理参见图2所示方法中的相关描述,此处不再赘述。
本实施例,通过从UEFI源代码中,选取MIPS平台所需代码的初始文件,所述初始文件包括多个在平台上可执行文件的源文件;将所述初始文件添加到所述MIPS平台对应的目标编译工具中,所述目标编译工具中加载有用于MIPS平台的编译参数和编译规则;通过所述目标编译工具对所述初始文件中的源文件进行编译,以使得编译得到的目标格式的文件能够在MIPS平台上执行。从而可以实现利用开源的UEFI源代码在特定的MIPS平台上进行移植,并成功编译出能够在MIPS平台运行的代码,整个编译过程符合标准UEFI的规范,具备较强的可移植性和可扩展性。
图5为本发明实施例四提供的源代码编译系统的结构示意图,如图5所示,本实施例的源代码编译系统40可以包括:处理器41和存储器42。
存储器42,用于存储计算机程序(如实现上述源代码编译方法的应用程序、功能模块等)、计算机指令等;
上述的计算机程序、计算机指令等可以分区存储在一个或多个存储器42中。并且上述的计算机程序、计算机指令、数据等可以被处理器41调用。
处理器41,用于执行存储器42存储的计算机程序,以实现上述实施例涉及的方法中的各个步骤。
具体可以参见前面方法实施例中的相关描述。
处理器41和存储器42可以是独立结构,也可以是集成在一起的集成结构。当处理器41和存储器42是独立结构时,存储器42、处理器41可以通过总线43耦合连接。
本实施例的服务器可以执行图2所示方法中的技术方案,其具体实现过程和技术原理参见图2所示方法中的相关描述,此处不再赘述。
此外,本申请实施例还提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机执行指令,当用户设备的至少一个处理器执行该计算机执行指令时,用户设备执行上述各种可能的方法。
其中,计算机可读介质包括计算机存储介质和通信介质,其中通信介质包括便于从一个地方向另一个地方传送计算机程序的任何介质。存储介质可以是通用或专用计算机能够存取的任何可用介质。一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于ASIC中。另外,该ASIC可以位于用户设备中。当然,处理器和存储介质也可以作为分立组件存在于通信设备中。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (20)
1.一种源代码编译方法,其特征在于,包括:
从UEFI源代码中,选取MIPS平台所需代码的初始文件,所述初始文件包括多个在平台上可执行文件的源文件;
将所述初始文件添加到所述MIPS平台对应的目标编译工具中,所述目标编译工具中加载有用于MIPS平台的编译参数和编译规则,其中,目标编译工具中添加了命令的可执行文件的源文件,所述命令的可执行文件的源文件包括修改后的格式转换命令的可执行文件的源文件和修改后的压缩存储命令的可执行文件的源文件,从而实现通过运行所述格式转换命令,对elf格式文件中的各种Section重新进行写入,将 elf格式的文件转换成格式为.efi的文件,格式为.efi的文件是根据elf标准和pe32+格式的标准对64位的elf文件进行转换得到的;通过运行所述压缩存储命令,利用.efi、.dsc、.fdf文件生成固件卷和Flash描述文件;
通过所述目标编译工具对所述初始文件中的源文件进行编译,以使得编译得到的目标格式的文件能够在MIPS平台上执行。
2.根据权利要求1所述的方法,其特征在于,从UEFI源代码中,选取MIPS平台所需代码的初始文件之前,还包括:
获取初始编译工具源文件;其中,所述初始编译工具源文件为EDKII源代码中的编译部分;
接收用于MIPS平台的编译参数和编译规则;
根据所述初始编译工具源文件以及用于MIPS平台的编译参数和编译规则,得到目标编译工具源文件;
对所述目标编译工具源文件进行编译,编译出所述目标编译工具。
3.根据权利要求2所述的方法,其特征在于,所述根据所述初始编译工具源文件以及用于MIPS平台的编译参数和编译规则,得到目标编译工具源文件,包括:
接收用于MIPS平台的编译参数和编译规则,将用于MIPS平台的编译参数保存至参数文件,将用于MIPS平台的编译规则保存至规则文件,以使得编译命令调用所述参数文件和/或所述规则文件;
在所述命令的可执行文件的源文件中的架构相关参数中添加MIPS的编译信息。
4.根据权利要求3所述的方法,其特征在于,所述编译命令为第一编译命令,所述第一编译命令为用于编译的Linux命令,所述编译命令调用所述参数文件和/或所述规则文件,包括:
所述第一编译命令调用所述用于MIPS平台的参数文件和规则文件。
5.根据权利要求3所述的方法,其特征在于,所述编译命令为第二编译命令,所述第二编译命令为用于编译的UEFI命令,所述编译命令调用所述参数文件和/或所述规则文件,包括:
所述第二编译命令调用所述用于MIPS平台的规则文件。
6.根据权利要求3所述的方法,其特征在于,所述命令的可执行文件的源文件还包括第二编译命令的可执行文件源文件。
7.根据权利要求2或3所述的方法,其特征在于,通过所述目标编译工具对所述初始文件中的源文件进行编译,以使得编译得到的目标格式的文件能够在所述MIPS平台上执行,包括:
对所述用于在MIPS平台上执行的源文件进行预处理,以使得Linux操作系统可识别;
通过第一编译命令将所述预处理后的文件编译成MIPS平台下Linux操作系统可执行的文件;
将所述Linux操作系统可执行的文件进行处理以生成能够在MIPS平台下运行的UEFI可识别的符合Flash存储结构的可执行文件。
8.根据权利要求7所述的方法,其特征在于,所述对所述用于在MIPS平台上执行的源文件进行预处理,包括:
对.dsc平台描述文件、.dec包声明文件、.fdf flash描述文件以及.inf模块信息文件进行预处理,处理后生成对应的高级语言程序文件。
9.根据权利要求7所述的方法,其特征在于,所述通过第一编译命令将所述预处理后的文件编译成MIPS平台下Linux操作系统可执行的文件,包括:
通过所述第一编译命令编译所述预处理后的文件以生成中间目标编译文件以及用于链接程序地址的链接文件;
将多个中间目标编译文件以及对应的链接文件进行组合,以生成MIPS平台下Linux操作系统可执行的文件。
10.一种源代码编译装置,其特征在于,包括:
选取模块,用于从UEFI源代码中,选取MIPS平台所需代码的初始文件,所述初始文件包括多个在平台上可执行文件的源文件;
添加模块,用于将所述初始文件添加到所述MIPS平台对应的目标编译工具中,所述目标编译工具中加载有用于MIPS平台的编译参数和编译规则,其中,目标编译工具中添加了命令的可执行文件的源文件,所述命令的可执行文件的源文件包括修改后的格式转换命令的可执行文件的源文件和修改后的压缩存储命令的可执行文件的源文件,从而实现通过运行所述格式转换命令,对elf格式文件中的各种Section重新进行写入,将elf格式的文件转换成格式为.efi的文件,格式为.efi的文件是根据elf标准和pe32+格式的标准对64位的elf文件进行转换得到的;通过运行所述压缩存储命令,利用.efi、.dsc、.fdf文件生成固件卷和Flash描述文件;
编译模块,用于通过所述目标编译工具对所述初始文件中的源文件进行编译,以使得编译得到的目标格式的文件能够在MIPS平台上执行。
11.根据权利要求10所述的装置,其特征在于,所述编译模块,还用于:
获取初始编译工具源文件;其中,所述初始编译工具源文件为EDKII源代码中的编译部分;
接收用于MIPS平台的编译参数和编译规则;
根据所述初始编译工具源文件以及用于MIPS平台的编译参数和编译规则,得到目标编译工具源文件;
对所述目标编译工具源文件进行编译,编译出所述目标编译工具。
12.根据权利要求11所述的装置,其特征在于,所述根据所述初始编译工具源文件以及用于MIPS平台的编译参数和编译规则,得到目标编译工具源文件,包括:
接收用于MIPS平台的编译参数和编译规则,将用于MIPS平台的编译参数保存至参数文件,将用于MIPS平台的编译规则保存至规则文件,以使得编译命令调用所述参数文件和/或所述规则文件;
在所述命令的可执行文件的源文件中的架构相关参数中添加MIPS的编译信息。
13.根据权利要求12所述的装置,其特征在于,所述编译命令为第一编译命令,所述第一编译命令为用于编译的Linux命令,所述编译命令调用所述参数文件和/或所述规则文件,包括:
所述第一编译命令调用所述用于MIPS平台的参数文件和规则文件。
14.根据权利要求12所述的装置,其特征在于,所述编译命令为第二编译命令,所述第二编译命令为用于编译的UEFI命令,所述编译命令调用所述参数文件和/或所述规则文件,包括:
所述第二编译命令调用所述用于MIPS平台的规则文件。
15.根据权利要求12所述的装置,其特征在于,所述命令的可执行文件的源文件还包括第二编译命令的可执行文件源文件。
16.根据权利要求11或12所述的装置,其特征在于,所述编译模块,具体用于:
对所述用于在MIPS平台上执行的源文件进行预处理,以使得Linux操作系统可识别;
通过第一编译命令将所述预处理后的文件编译成MIPS平台下Linux操作系统可执行的文件;
将所述Linux操作系统可执行的文件进行处理以生成能够在MIPS平台下运行的UEFI可识别的符合Flash存储结构的可执行文件。
17.根据权利要求16所述的装置,其特征在于,所述对所述用于在MIPS平台上执行的源文件进行预处理,包括:
对.dsc平台描述文件、.dec包声明文件、.fdf flash描述文件以及.inf模块信息文件进行预处理,处理后生成对应的高级语言程序文件。
18.根据权利要求16所述的装置,其特征在于,所述通过第一编译命令将所述预处理后的文件编译成MIPS平台下Linux操作系统可执行的文件,包括:
通过所述第一编译命令编译所述预处理后的文件以生成中间目标编译文件以及用于链接程序地址的链接文件;
将多个中间目标编译文件以及对应的链接文件进行组合,以生成MIPS平台下Linux操作系统可执行的文件。
19.一种源代码编译系统,其特征在于,包括:存储器和处理器,存储器中存储有所述处理器的可执行指令;其中,所述处理器配置为经由执行所述可执行指令来执行权利要求1-9中任一项所述的源代码编译方法。
20.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现权利要求1-9中任一项所述的源代码编译方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811625111.6A CN109739508B (zh) | 2018-12-28 | 2018-12-28 | 源代码编译方法、装置、系统及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811625111.6A CN109739508B (zh) | 2018-12-28 | 2018-12-28 | 源代码编译方法、装置、系统及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109739508A CN109739508A (zh) | 2019-05-10 |
CN109739508B true CN109739508B (zh) | 2022-07-22 |
Family
ID=66361921
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811625111.6A Active CN109739508B (zh) | 2018-12-28 | 2018-12-28 | 源代码编译方法、装置、系统及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109739508B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110764773A (zh) * | 2019-09-03 | 2020-02-07 | 北京字节跳动网络技术有限公司 | 一种app生成方法、装置、介质和电子设备 |
CN110865838A (zh) * | 2019-11-15 | 2020-03-06 | 北京云迹科技有限公司 | 机器人升级方法、装置、电子设备和计算机可读存储介质 |
CN111309530B (zh) * | 2020-01-19 | 2022-10-18 | 苏州浪潮智能科技有限公司 | 一种实现mips架构运行speccpu的方法及系统 |
CN113031962B (zh) * | 2021-03-23 | 2022-04-15 | 北京百度网讯科技有限公司 | 编译方法、编译装置、电子设备、存储介质和程序产品 |
CN113504914B (zh) * | 2021-09-09 | 2021-12-07 | 北京鲸鲮信息系统技术有限公司 | 操作系统的构建编译方法及装置、电子设备、存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106250124A (zh) * | 2016-07-25 | 2016-12-21 | 百富计算机技术(深圳)有限公司 | 功能模块跨平台运行的实现方法和装置 |
CN107608677A (zh) * | 2017-09-05 | 2018-01-19 | 腾讯科技(深圳)有限公司 | 一种编译处理方法、装置及电子设备 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2355989A1 (en) * | 2001-08-27 | 2003-02-27 | Ibm Canada Limited-Ibm Canada Limitee | Compiling source code files having multiple |
-
2018
- 2018-12-28 CN CN201811625111.6A patent/CN109739508B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106250124A (zh) * | 2016-07-25 | 2016-12-21 | 百富计算机技术(深圳)有限公司 | 功能模块跨平台运行的实现方法和装置 |
CN107608677A (zh) * | 2017-09-05 | 2018-01-19 | 腾讯科技(深圳)有限公司 | 一种编译处理方法、装置及电子设备 |
Non-Patent Citations (2)
Title |
---|
MIPS架构计算机平台的支持固件研究;杜振龙;《兰州理工大学学报》;20131031;第39卷(第5期);第94-99页,图3、6 * |
杜振龙.MIPS架构计算机平台的支持固件研究.《兰州理工大学学报》.2013,第39卷(第5期), * |
Also Published As
Publication number | Publication date |
---|---|
CN109739508A (zh) | 2019-05-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109739508B (zh) | 源代码编译方法、装置、系统及存储介质 | |
US9811360B2 (en) | Dynamic determination of application server runtime classloading | |
US8555264B2 (en) | System and method for efficient compilation and invocation of function type calls | |
CN105100191A (zh) | 一种云编译实现Java应用安装的方法、装置及系统 | |
AU2892200A (en) | Automatic stub/adapter generator | |
KR20040004551A (ko) | 사전 습득된 프로그램 파일들을 생성 및 이용하기 위한방법 및 디바이스 | |
CN114816417B (zh) | 一种交叉编译方法、装置、计算设备及存储介质 | |
KR102156371B1 (ko) | 네이티브 빌드 기반의 임베디드 소프트웨어 개발 환경을 지원하기 위한 임베디드 소프트웨어 개발 도구 제공 방법 및 장치 | |
CN102262684A (zh) | 移动终端网页页面生成方法及装置 | |
US9639375B2 (en) | Generation of language bindings for libraries using data from compiler generated debug information | |
CN115291946A (zh) | 鸿蒙系统移植方法、装置、电子设备及可读介质 | |
CN111596951A (zh) | 一种工程文件的配置方法及装置 | |
US20110113409A1 (en) | Symbol capabilities support within elf | |
CN101751247A (zh) | 一种基于标准工具生成Java Card程序库目标代码的方法和设备 | |
CN114115964B (zh) | 一种用于Unity的热更新方法、装置、计算设备及计算机可读存储介质 | |
JP6001199B2 (ja) | アンドロイドアプリケーションのタイゼン導入可能パッケージ自動変換方法及びこのためのコンピュータ読み取り可能な記録媒体 | |
CN114840195A (zh) | 一种针对iOS SDK静态库的私有化方法 | |
CN114398102B (zh) | 一种应用程序包生成方法、装置、编译服务器及计算机可读存储介质 | |
CN115658140A (zh) | 一种sdk的打包方法、装置、终端以及存储介质 | |
CN114443052A (zh) | 一种il指令运行时的动态特例化方法和装置 | |
CN115048184A (zh) | 一种解释器指令的优化执行方法和装置 | |
CN113360156B (zh) | 一种ios编译方法及相关设备 | |
CN114816475A (zh) | 一种嵌入式操作系统的更新方法、装置、设备和介质 | |
US10956138B1 (en) | Automatic configuration of an execution environment | |
CN113672238B (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 | ||
CB02 | Change of applicant information |
Address after: 100095 Building 2, Longxin Industrial Park, Zhongguancun environmental protection technology demonstration park, Haidian District, Beijing Applicant after: Loongson Zhongke Technology Co.,Ltd. Address before: 100095 Building 2, Longxin Industrial Park, Zhongguancun environmental protection technology demonstration park, Haidian District, Beijing Applicant before: LOONGSON TECHNOLOGY Corp.,Ltd. |
|
CB02 | Change of applicant information | ||
GR01 | Patent grant | ||
GR01 | Patent grant |