CN107943485B - 一种补丁编译平台及补丁编译方法 - Google Patents

一种补丁编译平台及补丁编译方法 Download PDF

Info

Publication number
CN107943485B
CN107943485B CN201711311923.9A CN201711311923A CN107943485B CN 107943485 B CN107943485 B CN 107943485B CN 201711311923 A CN201711311923 A CN 201711311923A CN 107943485 B CN107943485 B CN 107943485B
Authority
CN
China
Prior art keywords
compiler
kernel
sdk
layer
cross
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
Application number
CN201711311923.9A
Other languages
English (en)
Other versions
CN107943485A (zh
Inventor
张建新
刘天
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Qihoo Technology Co Ltd
Original Assignee
Beijing Qihoo Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Qihoo Technology Co Ltd filed Critical Beijing Qihoo Technology Co Ltd
Priority to CN201711311923.9A priority Critical patent/CN107943485B/zh
Publication of CN107943485A publication Critical patent/CN107943485A/zh
Application granted granted Critical
Publication of CN107943485B publication Critical patent/CN107943485B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Abstract

本发明实施例提供一种补丁编译平台,包括:基础镜像层单元,用于提供编译所需的命令和工具;交叉编译器层单元,用于提供交叉编译环境;内核SDK层单元,用于获得内核的SDK文件;调用交叉编译器层单元,基于SDK文件,判断交叉编译器层单元中是否存在内核所使用的目标编译器;如果交叉编译器层单元中不存在目标编译器,调用基础镜像层单元,通过开源应用容器引擎Docker,在交叉编译器层单元上建立目标编译器对应的第一交叉编译器镜像;通过Docker将SDK文件和第一交叉编译器镜像结合,在内核SDK层单元上生成用于编译内核的补丁代码的内核SDK镜像。本发明实施例还提供一种补丁编译方法。

Description

一种补丁编译平台及补丁编译方法
技术领域
本发明涉及计算机领域,尤其涉及一种补丁编译平台及补丁编译方法。
背景技术
随着信息化的发展以及计算机技术和互联网技术的普及,人们可以享受到计算机带来的便利。内核是操作系统的核心,负责管理系统的进程、内存、设备驱动程序、文件和网路系统等,决定着系统的性能和稳定性。为了保证内核的安全性和可用性,在内核出现缺陷时,往往需要给该内核添加内核补丁。
在实际应用中,在编译内核补丁时需要使用与目标内核相同的头文件、配置文件、交叉编译器、编译环境。那么,如果用户需要给多台机器中的多个不同内核编译出对应的不同的内核补丁包时,由于每一台机器上的内核是通过不同的编译器编译的,这样,在用户通过一台计算机给这些机器编写内核补丁时,针对每一个机器中的内核需要使用一种编译器,而每一种编译器会对应一种编译平台,这样,用户就需要使用很多的编译平台才能编译不同的内核补丁代码。可见,现有技术中无法实现合理地扩展和管理内核补丁的编译环境,操作十分不便。
发明内容
有鉴于此,本发明实施例提供一种补丁编译平台及补丁编译方法,主要目的在于通过Docker进行分层管理,能够实现合理地扩展和管理内核补丁的编译环境。
为达到上述目的,本发明实施例主要提供如下技术方案:
第一方面,本发明实施例提供一种补丁编译平台,所述补丁编译平台包括:基础镜像层单元、交叉编译器层单元以及内核软件开发工具包SDK层单元,其中,所述基础镜像层单元,用于提供编译所需的命令和工具;所述交叉编译器层单元,用于提供交叉编译环境;所述内核SDK层单元,用于获得内核的SDK文件;调用交叉编译器层单元,基于所述SDK文件,判断所述交叉编译器层单元中是否存在所述内核所使用的目标编译器;如果所述交叉编译器层单元中不存在所述目标编译器,调用基础镜像层单元,通过开源应用容器引擎Docker,在所述交叉编译器层单元上建立所述目标编译器对应的第一交叉编译器镜像;通过Docker,将所述SDK文件和所述第一交叉编译器镜像结合,在所述内核SDK层单元上生成内核SDK镜像,其中,所述内核SDK镜像用于编译所述内核的补丁代码。
第二方面,本发明实施例提供一种补丁编译方法,应用于内核软件开发工具包SDK层,所述方法包括:获得内核的SDK文件;调用交叉编译器层,基于所述SDK文件,判断所述交叉编译器层中是否存在所述内核所使用的目标编译器,其中,所述交叉编译器层用于提供交叉编译环境;如果所述交叉编译器层中不存在所述目标编译器,调用基础镜像层,通过开源应用容器引擎Docker,在所述交叉编译器层上建立所述目标编译器对应的第一交叉编译器镜像,其中,所述基础镜像层用于提供编译所需的命令和工具;通过Docker,将所述SDK文件和所述第一交叉编译器镜像结合,在所述内核SDK层上生成内核SDK镜像,其中,所述内核SDK镜像用于编译所述内核的补丁代码。
第三方面,本发明实施例提供一种存储介质,所述存储介质包括存储的程序,其中,在所述程序运行时控制所述存储介质所在设备执行上述生成内核SDK镜像的方法。
第四方面,本发明实施例提供一种处理器,所述处理器用于运行程序,其中,所述程序运行时执行上述生成内核SDK镜像的方法。
本发明实施例提供的一种补丁编译平台及补丁编译方法,在内核SDK(SoftwareDevelopment Kit,软件开发工具包)层获得内核的SDK文件后,内核SDK层就会调用交叉编译器层,基于该SDK文件,判断交叉编译器层中是否存在该内核所使用的目标编译器,然后,如果交叉编译器层中不存在目标编译器,就会调用基础镜像层,通过开源应用容器引擎Docker,在交叉编译器层上建立目标编译器对应的第一交叉编译器镜像,其中,基础镜像层用于提供编译所需的命令和工具,最后,通过Docker,将SDK文件和第一交叉编译器镜像结合,在内核SDK层上生成内核SDK镜像,其中,内核SDK镜像用于编译内核的补丁代码。这样,由于是通过Docker进行分层管理,能够针对每一个内核,通过基础镜像层给交叉编译器层中扩展所需的编译器,并在内核SDK层上生成用于编译内核补丁代码的内核SDK镜像,从而,通过一个内核SDK层就能够向用户提供不同的编译环境,实现了合理地扩展和管理内核补丁的编译环境。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了本发明实施例一中的补丁编译平台的架构示意图;
图2示出了本发明实施例一中的补丁编译方法的流程示意图;
图3示出了本发明实施例二中的补丁编译平台的结构示意图;
图4示出了本发明实施例三中的补丁编译设备的结构示意图。
具体实施方式
下面将参照附图更详细地描述本发明的示例性实施例。虽然附图中显示了本发明的示例性实施例,然而应当理解,可以以各种形式实现本发明而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本发明,并且能够将本发明的范围完整的传达给本领域的技术人员。
实施例一
本发明实施例提供一种补丁编译方法,该补丁编译方法可以应用于补丁编译平台,该补丁编译平台是借助Docker的特性来搭建的,可以对内核补丁编译环境进行分层管理。图1为本发明实施例一中的补丁编译平台的架构示意图,参见图1所示,在逻辑上该补丁编译平台主要包括:基础镜像层101、交叉编译器层102和内核SDK层103这三层,其中,基础镜像层101,用于提供基本的编译需要的命令;交叉编译器层102是通过Docker由基础镜像和交叉编译器结合构建的,用于给内核补丁代码提供交叉编译环境,如编译、编辑、反编译等工具;内核SDK层103,是通过Docker由交叉编译器镜像结合内核对应的头文件、配置文件等所构建,用于提供内核完整编译环境。在实际应用中,通过这三层结构,能够方便地管理和扩展内核补丁的编译环境。
具体地,内核SDK层就是补丁编译平台中的最后一层,在实际应用中,用户使用补丁编译平台来编译内核补丁时所用到的一层就是内核SDK层,它是一个基础层,最终给用户用的都是内核SDK层。由于内核SDK层的父级镜像是交叉编译器层,交叉编译器层的父级镜像是基础镜像层,因此,在内核SDK层中既包含了交叉编译器层又包含了基础镜像层。内核SDK层会开放给用户,通过该内核SDK层,用户就可以对内核补丁代码进行编译。也就是说,整个内核补丁编译平台是在内核SDK层上运行的。
在实际应用中,在通过补丁编译平台来扩展和管理内核补丁的编译环境时,基础镜像层是不需要修改的,而且交叉编译器层中的交叉编译器镜像是独立使用的,因此,交叉编译器层能够极大地降低数据冗余。举例来说,如果没有交叉编译器层,仅有基础镜像层和内核SDK层,假设有第一内核和第二内核,第二内核需要arm4.9的编译器,但是,第一内核之前已经向基础镜像层中增加了一个arm4.9的编译器,但第二内核其实是不需要arm4.9的编译器的,这个时候又会给基础镜像中的arm4.9的编译器就多余的。这样,冗余会越来越大。工具越多之后,会相继引发别的问题。比如,如果arm4.9的编译器和arm4.9的编译器这两个都提供RD工具,如果第三内核要用RD工具,就会出现不清楚使用哪一个的问题。
在实际应用中,Docker是一个开源的基于轻量级虚拟化技术的应用容器引擎,它通过分层镜像标准化和内核虚拟化技术,使得开发人员可以以统一的方式跨平台发布应用,并且以几乎没有额外开销的情况下提供资源隔离的应用运行环境。让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,不依赖于任何语言、框架或包装系统。其中,Docker的特性主要包括以下几个方面:(1)文件系统隔离:每个进程容器运行在一个完全独立的根文件系统里。(2)资源隔离:系统资源,像CPU和内存等可以分配到不同的容器中,使用cgroup。(3)网络隔离:每个进程容器运行在自己的网络空间,虚拟接口和IP地址。(4)日志记录:Docker将会收集和记录每个进程容器的标准流(stdout/stderr/stdin),用于实时检索或批量检索。(5)变更管理:容器文件系统的变更可以提交到新的映像中,并可重复使用以创建更多的容器。无需使用模板或手动配置。(6)交互式shell:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次性交互shell。
下面结合上述补丁编译平台的架构来介绍本发明实施例中所提供的补丁编译方法。
图2为本发明实施例一中的补丁编译方法的流程示意图,参见图2所示,该补丁编译方法包括:
S201:获得内核的SDK文件;
具体地,在需要对内核进行内核补丁的编译时,内核SDK层就可以获得该内核对应的SDK文件,以便内核SDK层根据该SDK文件确定出该内核所使用的编译器。
S202:调用交叉编译器层,基于SDK文件,判断交叉编译器层中是否存在内核所使用的目标编译器;
其中,交叉编译器层用于提供交叉编译环境,可被内核SDK层所调用。
具体地,在内核SDK层获得了内核的SDK文件后,内核SDK层就可以调用交叉编译器层,然后根据该SDK文件,判断出交叉编译器层中是否存在该内核所使用的目标编译器,如果交叉编译器层中不存在目标编译器,就需要在这个交叉编译器层上建立一个该目标编译器对应的交叉编译器,此时,就可以执行S203至S204;如果交叉编译器层中存在目标编译器,此时,就可以执行S205。
在实际应用中,交叉编译是针对不同的编译环境而言的。示例性地,以ARM/ARM64处理器为例,这些处理器的版本还分为arm4.8、arm4.9、arm5.0等等。假设之前的内核的都是用的arm4.8的编译器,但是现在有一个内核需要arm4.9的编译器,这样,就需要一个arm4.9的交叉编译器。
在具体实施过程中,上述S202可以包括:解析SDK文件,确定目标编译器;将目标编译器与交叉编译器层中预先建立的第二交叉编译器镜像进行匹配;如果将目标编译器与第二交叉编译器镜像匹配成功,确定交叉编译器层中存在目标编译器;否则,确定交叉编译器层中不存在目标编译器。
在实际应用中,由于不同内核厂商的内核是不一样的,内核SDK层预先是不知道内核需要什么编译器的,因此,内核SDK层需要对所获得的内核对应的内核SDK文件进行解析,从该内核SDK文件中解析出该内核所使用的目标编译器。接下来,在内核SDK层确定出内核所需的目标编译器后,就可以在交叉编译器层中预先建立的第二交叉编译器镜像中,查找与该目标编译器相匹配的第二交叉编译器镜像,如果查找到相匹配的第二交叉编译器,可以确定该交叉编译器层中有该目标编译器,如果并未查找到相匹配的第二交叉编译器,就可以确定该交叉编译器层中没有该目标编译器,此时,需要在改交叉编译器层中建立该内核所需的交叉编译器。
在具体实施过程中,上述解析SDK文件,确定目标编译器的步骤可以包括:解析SDK文件,获得对应的内核代码;确定内核代码中所使用的编程语言;将编程语言所对应的编译器确定为目标编译器。
在实际应用中,在编译内核时,需要对内核代码进行解析,因此,为了能够解析内核代码,就需要编写内核代码时所使用的编程语言所对应的编译环境。因此,为了确定内核所使用的目标编译器,在获得了该内核对应的SDK文件后,就可以通过解析该SDK文件的方式来获取该内核对应的内核代码,从而,就可以该内核代码中所使用的编程语言所对应的编译器就是所需要的目标编译器。
示例性地,在编译内核的时候,如果内核代码是用Python语言写的,就需要一个Python编译器;如果内核代码是用需要一些解析器,这些解析器,就是需要Perl语言写的,就需要对应的Perl编译器。
S203:调用基础镜像层,通过开源应用容器引擎Docker,在交叉编译器层上建立目标编译器对应的第一交叉编译器镜像;
其中,基础镜像层用于提供编译所需的命令和工具。
在实际应用中,对于基础镜像层而言,因为整个编译内核,会用到一些ios、Python、Ruby等工具,而这些工具是可以直接使用现有的来做拿现有的去做Docker镜像。这个基础镜像层中会包含内核所依赖的一些命令和工具,而不需要跟编译平台不相关的工具。
在具体实施过程中,上述S203可以包括:从基础镜像层中获取目标编译器对应的基础镜像;通过Docker,将基础镜像以增量的方式添加到交叉编译器层中,获得第一交叉编译器镜像。
具体地,由于基础镜像层中包含有内核所依赖的命令和工具,在交叉编译层中没有内核所需的目标编译器时,内核SDK层就可以调用该基础镜像层,然后通过Docker在该交叉编译层上建立该目标内核编译器所对应的第一交叉编译器的Docker镜像,这样,就实现了扩展交叉编译环境。
在实际应用中,由于交叉编译器是通过Docker以增量的方式添到交叉编译层中的,不会产生数据冗余。而且使用Docker镜像的优势在于镜像的每一次修改都可做作为一个完整独立数据使用,也就是说,每一个交叉编译器镜像均是独立的,不会出现该交叉编译器中包含有不需要的基础工具。
此外,在将第一交叉编译器镜像添加到交叉编译器层后,如果后边还有其它的内核也是使用该目标编译器的,就可以在该交叉编译器上能够找到目标编译器所对应的第一交叉编译器镜像,此时,就不需要重新去做该目标编译器对应的交叉编译器了。
S204:通过Docker,将SDK文件和第一交叉编译器镜像结合,在内核SDK层上生成内核SDK镜像;
其中,内核SDK镜像用于编译内核的补丁代码。
具体地,在内核SDK层获得了第一交叉编译器镜像后,就可以通过Docker将内核的SDK文件与该第一交叉编译器镜像相结合,在内核SDK层上生成对应的内核SDK镜像,以便用户通过该内核SDK镜像可以编译内核补丁。
S205:通过Docker,将SDK文件和目标编译器在交叉编译器层中对应的交叉编译器镜像结合,在内核SDK层上生成内核SDK镜像。
在具体实施过程中,当目标编译器与交叉编译器层中的第二交叉编译器相匹配时,上述S205可以包括:如果交叉编译器层中存在目标编译器,通过Docker,将SDK文件和第二交叉编译器镜像结合,在内核SDK层上生成内核SDK镜像。
在本发明其它实施例中,在上述S204和上述S205之后,上述补丁编译方法还可以包括:获得内核的补丁代码;通过运行内核SDK镜像,对内核的补丁代码进行编译,生成内核对应的内核补丁包。
具体地,在内核SDK层中生成了内核对应的内核SDK镜像后,当用户想要给该内核编译内核补丁包时,内核SDK层就会获得该内核的补丁代码,然后,内核SDK层就会运行改内核所对应的内核SDK镜像,来编译该内核的补丁代码,从而,就会获得该内核对应的内核补丁包。
由上述内容可知,本发明实施例所提供的补丁编译方法,在获得内核的SDK文件后,就会调用交叉编译器层,基于该SDK文件,判断交叉编译器层中是否存在该内核所使用的目标编译器,然后,如果交叉编译器层中不存在目标编译器,就会调用基础镜像层,通过开源应用容器引擎Docker,在交叉编译器层上建立目标编译器对应的第一交叉编译器镜像,其中,基础镜像层用于提供编译所需的命令和工具,最后,通过Docker,将SDK文件和第一交叉编译器镜像结合,在内核SDK层上生成内核SDK镜像,其中,内核SDK镜像用于编译内核的补丁代码。这样,由于是通过Docker进行分层管理,能够针对每一个内核,通过基础镜像层给交叉编译器层中扩展所需的编译器,并在内核SDK层上生成用于编译内核补丁代码的内核SDK镜像,从而,通过一个内核SDK层就能够向用户提供不同的编译环境,实现了合理地扩展和管理内核补丁的编译环境。
实施例二
基于同一发明构思,作为对上述方法的实现,本发明实施例提供了一种补丁编译平台,该补丁编译平台实施例与前述方法实施例对应,为便于阅读,本装置实施例不再对前述方法实施例中的细节内容进行逐一赘述,但应当明确,本实施例中的补丁编译平台能够对应实现前述方法实施例中的全部内容。
图3为本发明实施例二中的补丁编译平台的结构示意图,参见图3所示,该补丁编译平台30包括:基础镜像层单元301、交叉编译器层单元302以及内核SDK层单元303,其中,基础镜像层单元301,用于提供编译所需的命令和工具;交叉编译器层单元302,用于提供交叉编译环境;内核SDK层单元303,用于获得内核的SDK文件;调用交叉编译器层单元,基于SDK文件,判断交叉编译器层单元中是否存在内核所使用的目标编译器;如果交叉编译器层单元中不存在目标编译器,调用基础镜像层单元,通过Docker,在交叉编译器层单元上建立目标编译器对应的第一交叉编译器镜像;通过Docker,将SDK文件和第一交叉编译器镜像结合,在内核SDK层单元上生成内核SDK镜像,其中,内核SDK镜像用于编译内核的补丁代码。
在本发明实施例中,内核SDK层单元,用于解析SDK文件,确定目标编译器;将目标编译器与交叉编译器层单元中预先建立的第二交叉编译器镜像进行匹配;如果将目标编译器与第二交叉编译器镜像匹配成功,确定交叉编译器层单元中存在目标编译器;否则,确定交叉编译器层单元中不存在目标编译器。
在本发明实施例中,内核SDK层单元,用于解析SDK文件,获得对应的内核代码;确定内核代码中所使用的编程语言;将编程语言所对应的编译器确定为目标编译器。
在本发明实施例中,内核SDK层单元,用于如果交叉编译器层单元中存在目标编译器,通过Docker,将SDK文件和第二交叉编译器镜像结合,在内核SDK层单元上生成内核SDK镜像。
在本发明实施例中,内核SDK层单元,用于从基础镜像层单元中获取目标编译器对应的基础镜像;通过Docker,将基础镜像以增量的方式添加到交叉编译器层单元中,获得第一交叉编译器镜像。
在本发明实施例中,内核SDK层单元,用于获得内核的补丁代码;通过运行内核SDK镜像,对内核的补丁代码进行编译,生成内核对应的内核补丁包。
上述补丁编译平台包括处理器和存储器,上述基础镜像层单元、交叉编译器层单元以及内核SDK层单元等均作为程序单元存储在存储器中,由处理器执行存储在存储器中的上述程序单元来实现相应的功能。
上述处理器可由中央处理器(Central Processing Unit,CPU)、微处理器(MicroProcessor Unit,MPU)、数字信号处理器(Digital Signal Processor,DSP)、或现场可编程门阵列(Field Programmable Gate Array,FPGA)等实现。
存储器可能包括计算机可读介质中的非永久性存储器,随机存储器(RandomAccess Memory,RAM)和/或非易失性内存等形式,如只读存储器(Read Only Memory,ROM)或闪存(Flash RAM),存储器包括至少一个存储芯片。
基于同一发明构思,本发明实施例提供一种存储介质,其上存储有程序,该程序被处理器执行时实现上述补丁编译方法。
基于同一发明构思,本发明实施例提供一种处理器,处理器用于运行程序,其中,程序运行时执行上述补丁编译方法。
在实际应用中,该补丁编译平台可应用于终端中。终端可以以各种形式来实施。例如,本发明中描述的终端可以包括诸如手机、平板电脑、笔记本电脑、掌上电脑、个人数字助理(Personal Digital Assistant,PDA)、便捷式媒体播放器(Portable Media Player,PMP)、导航装置、移动终端,以及诸如数字TV、台式计算机、服务器等固定终端。
实施例三
基于同一发明构思,本发明实施例提供一种补丁编译设备。图4为本发明实施例三中的补丁编译设备的结构示意图,参见图4所示,该补丁编译设备40包括:存储器401、处理器402以及存储在存储器401上并可在处理器402上运行的计算机程序403,处理器执行程序403时实现以下步骤:获得内核的SDK文件;调用交叉编译器层,基于SDK文件,判断交叉编译器层中是否存在内核所使用的目标编译器,其中,交叉编译器层用于提供交叉编译环境;如果交叉编译器层中不存在目标编译器,调用基础镜像层,通过开源应用容器引擎Docker,在交叉编译器层上建立目标编译器对应的第一交叉编译器镜像,其中,基础镜像层用于提供编译所需的命令和工具;通过Docker,将SDK文件和第一交叉编译器镜像结合,在内核SDK层上生成内核SDK镜像,其中,内核SDK镜像用于编译内核的补丁代码。
在本发明实施例中,上述处理器执行程序时还可实现以下步骤:解析SDK文件,确定目标编译器;将目标编译器与交叉编译器层中预先建立的第二交叉编译器镜像进行匹配;如果将目标编译器与第二交叉编译器镜像匹配成功,确定交叉编译器层中存在目标编译器;否则,确定交叉编译器层中不存在目标编译器。
在本发明实施例中,上述处理器执行程序时还可实现以下步骤:解析SDK文件,获得对应的内核代码;确定内核代码中所使用的编程语言;将编程语言所对应的编译器确定为目标编译器。
在本发明实施例中,上述处理器执行程序时还可实现以下步骤:如果交叉编译器层中存在目标编译器,通过Docker,将SDK文件和第二交叉编译器镜像结合,在内核SDK层上生成内核SDK镜像。
在本发明实施例中,上述处理器执行程序时还可实现以下步骤:从基础镜像层中获取目标编译器对应的基础镜像;通过Docker,将基础镜像以增量的方式添加到交叉编译器层中,获得第一交叉编译器镜像。
在本发明实施例中,上述处理器执行程序时还可实现以下步骤:获得内核的补丁代码;通过运行内核SDK镜像,对内核的补丁代码进行编译,生成内核对应的内核补丁包。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、只读光盘(Compact Disc Read-Only Memory,CD-ROM)、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
存储器可能包括计算机可读介质中的非永久性存储器,RAM和/或非易失性内存等形式,如ROM或Flash RAM。存储器是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机可读存储介质可以是ROM、可编程只读存储器(Programmable Read-Only Memory,PROM)、可擦除可编程只读存储器(Erasable Programmable Read-Only Memory,EPROM)、电可擦除可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,EEPROM)、磁性随机存取存储器(Ferromagnetic Random Access Memory,FRAM)、快闪存储器(Flash Memory)、磁表面存储器、光盘、或只读光盘(Compact Disc Read-Only Memory,CD-ROM)等存储器;也可以是快闪记忆体或其他内存技术、CD-ROM、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息;还可以是包括上述存储器之一或任意组合的各种电子设备,如移动电话、计算机、平板设备、个人数字助理等。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
以上仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

Claims (14)

1.一种补丁编译平台,其特征在于,所述补丁编译平台包括:基础镜像层单元、交叉编译器层单元以及内核软件开发工具包SDK层单元,其中,
所述基础镜像层单元,用于提供编译所需的命令和工具;
所述交叉编译器层单元,用于提供交叉编译环境;
所述内核SDK层单元,用于获得内核的SDK文件;调用交叉编译器层单元,基于所述SDK文件,判断所述交叉编译器层单元中是否存在所述内核所使用的目标编译器;如果所述交叉编译器层单元中不存在所述目标编译器,调用基础镜像层单元,通过开源应用容器引擎Docker,在所述交叉编译器层单元上建立所述目标编译器对应的第一交叉编译器镜像;通过Docker,将所述SDK文件和所述第一交叉编译器镜像结合,在所述内核SDK层单元上生成内核SDK镜像,其中,所述内核SDK镜像用于编译所述内核的补丁代码。
2.根据权利要求1所述的平台,其特征在于,所述内核SDK层单元,用于解析所述SDK文件,确定所述目标编译器;将所述目标编译器与所述交叉编译器层单元中预先建立的第二交叉编译器镜像进行匹配;如果将所述目标编译器与所述第二交叉编译器镜像匹配成功,确定所述交叉编译器层单元中存在所述目标编译器;否则,确定所述交叉编译器层单元中不存在所述目标编译器。
3.根据权利要求2所述的平台,其特征在于,所述内核SDK层单元,用于解析所述SDK文件,获得对应的内核代码;确定所述内核代码中所使用的编程语言;将所述编程语言所对应的编译器确定为所述目标编译器。
4.根据权利要求2所述的平台,其特征在于,所述内核SDK层单元,用于如果所述交叉编译器层单元中存在所述目标编译器,通过Docker,将所述SDK文件和第二交叉编译器镜像结合,在所述内核SDK层单元上生成所述内核SDK镜像。
5.根据权利要求1所述的平台,其特征在于,所述内核SDK层单元,用于从所述基础镜像层单元中获取所述目标编译器对应的基础镜像;通过Docker,将所述基础镜像以增量的方式添加到所述交叉编译器层单元中,获得所述第一交叉编译器镜像。
6.根据权利要求1所述的平台,其特征在于,所述内核SDK层单元,用于获得所述内核的补丁代码;通过运行所述内核SDK镜像,对所述内核的补丁代码进行编译,生成所述内核对应的内核补丁包。
7.一种补丁编译方法,其特征在于,应用于内核软件开发工具包SDK层,所述方法包括:
获得内核的SDK文件;
调用交叉编译器层,基于所述SDK文件,判断所述交叉编译器层中是否存在所述内核所使用的目标编译器,其中,所述交叉编译器层用于提供交叉编译环境;
如果所述交叉编译器层中不存在所述目标编译器,调用基础镜像层,通过开源应用容器引擎Docker,在所述交叉编译器层上建立所述目标编译器对应的第一交叉编译器镜像,其中,所述基础镜像层用于提供编译所需的命令和工具;
通过Docker,将所述SDK文件和所述第一交叉编译器镜像结合,在所述内核SDK层上生成内核SDK镜像,其中,所述内核SDK镜像用于编译所述内核的补丁代码。
8.根据权利要求7所述的方法,其特征在于,所述基于所述SDK文件,判断所述交叉编译器层中是否存在所述内核所使用的目标编译器,包括:
解析所述SDK文件,确定所述目标编译器;
将所述目标编译器与所述交叉编译器层中预先建立的第二交叉编译器镜像进行匹配;
如果将所述目标编译器与所述第二交叉编译器镜像匹配成功,确定所述交叉编译器层中存在所述目标编译器;否则,确定所述交叉编译器层中不存在所述目标编译器。
9.根据权利要求8所述的方法,其特征在于,所述解析所述SDK文件,确定所述目标编译器,包括:
解析所述SDK文件,获得对应的内核代码;
确定所述内核代码中所使用的编程语言;
将所述编程语言所对应的编译器确定为所述目标编译器。
10.根据权利要求8所述的方法,其特征在于,在所述判断所述交叉编译器层中是否存在所述内核所使用的目标编译器之后,所述方法还包括:
如果所述交叉编译器层中存在所述目标编译器,通过Docker,将所述SDK文件和第二交叉编译器镜像结合,在所述内核SDK层上生成所述内核SDK镜像。
11.根据权利要求7所述的方法,其特征在于,所述调用基础镜像层,在所述交叉编译器层上建立所述目标编译器对应的第一交叉编译器镜像,包括:
从所述基础镜像层中获取所述目标编译器对应的基础镜像;
通过Docker,将所述基础镜像以增量的方式添加到所述交叉编译器层中,获得所述第一交叉编译器镜像。
12.根据权利要求7所述的方法,其特征在于,在所述通过Docker,将所述SDK文件和所述第一交叉编译器镜像结合,在所述内核SDK层上生成内核SDK镜像之后,所述方法还包括:
获得所述内核的补丁代码;
通过运行所述内核SDK镜像,对所述内核的补丁代码进行编译,生成所述内核对应的内核补丁包。
13.一种存储介质,其特征在于,所述存储介质包括存储的程序,其中,在所述程序运行时控制所述存储介质所在设备执行如权利要求7至12任一项所述的补丁编译方法。
14.一种处理器,其特征在于,所述处理器用于运行程序,其中,所述程序运行时执行如权利要求7至12任一项所述的补丁编译方法。
CN201711311923.9A 2017-12-11 2017-12-11 一种补丁编译平台及补丁编译方法 Active CN107943485B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201711311923.9A CN107943485B (zh) 2017-12-11 2017-12-11 一种补丁编译平台及补丁编译方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201711311923.9A CN107943485B (zh) 2017-12-11 2017-12-11 一种补丁编译平台及补丁编译方法

Publications (2)

Publication Number Publication Date
CN107943485A CN107943485A (zh) 2018-04-20
CN107943485B true CN107943485B (zh) 2021-07-20

Family

ID=61945555

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201711311923.9A Active CN107943485B (zh) 2017-12-11 2017-12-11 一种补丁编译平台及补丁编译方法

Country Status (1)

Country Link
CN (1) CN107943485B (zh)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108984179B (zh) * 2018-06-28 2022-08-02 奇安信科技集团股份有限公司 一种Linux下编译处理方法及装置
CN109086038B (zh) * 2018-07-10 2022-05-31 千寻位置网络有限公司 基于Spark的大数据开发方法及装置、终端
CN109491661B (zh) * 2018-10-24 2022-06-24 武汉思普崚技术有限公司 通用交叉编译方法及设备
US11042366B2 (en) * 2019-05-14 2021-06-22 International Business Machines Corporation Managing software programs
US11385923B2 (en) * 2019-07-16 2022-07-12 International Business Machines Corporation Container-based virtualization system extending kernel functionality using kernel modules compiled by a compiling container and loaded by an application container
CN111309451B (zh) * 2020-03-24 2023-07-14 广西梯度科技股份有限公司 一种实现Docker镜像交叉编译的方法
CN111552508B (zh) * 2020-04-29 2023-03-14 杭州数梦工场科技有限公司 应用程序版本构建方法、装置、电子设备
CN116860324B (zh) * 2023-09-01 2023-12-05 深圳代码兄弟技术有限公司 开发数据处理方法、开发数据处理设备以及可读存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110093836A1 (en) * 2009-07-20 2011-04-21 Galicia Joshua D Multi-environment operating system
CN106095523A (zh) * 2016-06-03 2016-11-09 北京奇虎科技有限公司 一种实现安卓编译隔离的方法和系统
CN106843991A (zh) * 2016-12-13 2017-06-13 北京元心科技有限公司 程序编译方法及系统
CN106873975A (zh) * 2016-12-30 2017-06-20 武汉默联股份有限公司 基于Docker的devops持续交付与自动化系统及方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110093836A1 (en) * 2009-07-20 2011-04-21 Galicia Joshua D Multi-environment operating system
CN106095523A (zh) * 2016-06-03 2016-11-09 北京奇虎科技有限公司 一种实现安卓编译隔离的方法和系统
CN106843991A (zh) * 2016-12-13 2017-06-13 北京元心科技有限公司 程序编译方法及系统
CN106873975A (zh) * 2016-12-30 2017-06-20 武汉默联股份有限公司 基于Docker的devops持续交付与自动化系统及方法

Also Published As

Publication number Publication date
CN107943485A (zh) 2018-04-20

Similar Documents

Publication Publication Date Title
CN107943485B (zh) 一种补丁编译平台及补丁编译方法
US10713038B2 (en) Transparent multi-architecture support in a container based cloud
WO2021098148A1 (zh) 一种软件编译方法、装置及电子设备和存储介质
US9778924B2 (en) Platform for enabling creation and use of an API for a specific solution
US10824453B2 (en) Hypervisor-based just-in-time compilation
US8434070B2 (en) Generating specifications of client-server applications for static analysis
US11074154B2 (en) Identifying a source file for use in debugging compiled code
Lampa et al. SciPipe: A workflow library for agile development of complex and dynamic bioinformatics pipelines
US10360007B2 (en) Linking optimized entry points for local-use-only function pointers
US20120102474A1 (en) Static analysis of client-server applications using framework independent specifications
US10360005B2 (en) Local function call tailoring for function pointer calls
US10346146B2 (en) Loading optimized local entry points for local-use-only function pointers
US10268465B2 (en) Executing local function call site optimization
US20180113689A1 (en) Local Function Call Site Optimization
US11200048B2 (en) Modification of codified infrastructure for orchestration in a multi-cloud environment
US20170262309A1 (en) Application execution with optimized code for use profiles
US20200410106A1 (en) Optimizing Operating System Vulnerability Analysis
US11080050B2 (en) Class data loading acceleration
US11163603B1 (en) Managing asynchronous operations in cloud computing environments
US11269596B2 (en) Automated microservice creation based on user interaction
WO2019157891A1 (zh) 应用安装方法、应用安装包的生成方法
US11928519B2 (en) Modernization of an application for related image generation
US20230229400A1 (en) Enhanced exception handling for debugging
CN115543486B (zh) 面向无服务器计算的冷启动延迟优化方法、装置和设备
US11775655B2 (en) Risk assessment of a container build

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
GR01 Patent grant
GR01 Patent grant