补丁生成方法、装置、电子设备及计算机程序产品制造方法及图纸

技术编号:19542605 阅读:15 留言:0更新日期:2018-11-24 20:25
本发明专利技术实施例中提供了一种补丁生成方法,所述方法包括:接收补丁源代码文件,其中,所述补丁源代码文件是针对原始源代码文件进行修改后生成的源代码文件,所述补丁源代码文件中包含具有单一入口的一个或多个修改后的函数;将所述补丁源代码文件进行编译生成补丁汇编代码文件;对所述补丁汇编代码文件进行编译生成单个补丁通道的补丁目标代码文件。本发明专利技术实施例还提供了一种补丁生成装置、电子设备及计算机程序产品。本发明专利技术可自动补丁生成,弥补了传统手工生成补丁的缺陷。

Patch generation methods, devices, electronic devices and computer program products

In the embodiment of the present invention, a patch generation method is provided, which includes receiving patch source code file, in which the patch source code file is a source code file generated after modification of the original source code file, and the patch source code file contains one or more modifications with a single entry. The function of the patch assembly code file is compiled to generate the patch assembly code file, and the patch assembly code file is compiled to generate the patch target code file of a single patch channel. The embodiment of the invention also provides a patch generation device, an electronic device and a computer program product. The invention can automatically generate patches, which makes up for the defects of the traditional manual patch generation.

【技术实现步骤摘要】
补丁生成方法、装置、电子设备及计算机程序产品
本专利技术涉及计算机技术,具体地,涉及一种补丁生成方法、装置、电子设备及计算机程序产品。
技术介绍
小规模的嵌入式解决方案,通常以ARMCortex-M系列处理器为主。这一类产品,为了做到成本的极致,更加偏向以ROM作为代码的存储介质,而避免使用成本高30%左右的片上闪存。ROM版本的芯片产品在生产过程中必须烧录代码,后续使用过程中则无法继续更新;而片上闪存版本的芯片产品则可以多次擦写代码的内容。在以ROM作为代码存储器的系统方案中,由于ROM不可改写的天然特性,一旦代码中有Bug,哪怕是个很小的错误,都会给整个系统带来不可挽回的后果,甚至无法使用。为了避免因重新定制ROM所导致的巨额成本,补丁(PATCH)模块利用ARMCortex-M系列处理器的FPB(转换及断电单元:FlashPATCHandBreakpoint)单元所提供的代码重映射功能和Thumb-2指令集中灵活多样的分支指令,实现了所谓的为ROM打补丁的功能。但目前ARMCortexM系列CPU中由ARM公司标配的补丁通道数为6。该补丁生成机制的初衷是解决烧写在ROM中的代码中的偶发bug问题。对于功能较复杂的嵌入式处理器,由于设计周期短,芯片在流片前的测试不一定够充分,芯片进入客户的系统产品开发阶段后,往往发现6个补丁通道远不够用。同时,目前补丁生成是完全手动完成的。传统手动补丁生成的完成流程可参见图1所示。整个补丁流程的起点是ROM镜像,经由原始C代码通过标准的工具中的编译器产生。编译器可选用ARM公司的Keil工具链中的ARMCC或者开源的GCC。ROM镜像包含嵌入式应用中的完整机器代码,和原始的汇编代码是一一对应的。ROM镜像烧录芯片之后不能再对ROM本身进行任何更改,只能使用ARM提供的FPB机制利用额外的片上SRAM更改少许代码。在具体实际应用时,发现完全以手动的方式生成补丁的过程中,每一个补丁的生成,涉及到手工编写C代码、编写补丁入口汇编头、及其修改跳转标签和全局变量ROM地址等,工作量相较于通常的C代码编程增加了很多倍。同时,手动制作补丁的过程不仅得让软件工程师维护C代码同时,还要维护汇编代码、和及其码,无形中增加诸多的时间成本。由此可见,手动生成补丁的方式在提升了芯片的可维护性和可拓展性的同时,亦带来的工作效率的低下、可移植性较差问题。
技术实现思路
有鉴于此,本专利技术实施例期望提供一种补丁生成方法、装置、电子设备及计算机程序产品。为达到上述目的,本专利技术实施例的技术方案是这样实现的:本专利技术实施例第一方面提供了一种补丁生成方法,所述方法包括:接收补丁源代码文件,其中,所述补丁源代码文件是针对原始源代码文件进行修改后生成的源代码文件,所述补丁源代码文件中包含具有单一入口的一个或多个修改后的函数;将所述补丁源代码文件进行编译生成补丁汇编代码文件;对所述补丁汇编代码文件进行编译生成单个补丁通道的补丁目标代码文件。本专利技术实施例第二方面提供了一种补丁生成装置,所述装置包括处理器,所述处理器被配置有处理器可执行的操作指令,以执行如本专利技术实施例第一方面所述方法中的各个步骤。本专利技术实施例第三方面提供了一种电子设备,所述电子设备包括:显示器,存储器,一个或多个处理器;以及一个或多个模块,所述一个或多个模块被存储在所述存储器中,并被配置成由所述一个或多个处理器执行,所述一个或多个模块包括用于执行如本专利技术实施例第一方面所述方法中各个步骤的指令。本专利技术实施例第四方面提供了一种计算机程序产品,所述计算机程序产品对用于执行一种过程的指令进行编码,所述过程包括本专利技术实施例第一方面所述的方法。本专利技术的有益效果如下:本专利技术可自动生成补丁,弥补了传统手工生成补丁的缺陷。补丁源代码文件中可包含多个修改后的函数,由此将所有的修改集中在单一入口的一个或几个函数中,以减少补丁通道的个数。另外,本专利技术所提出的补丁生成方法可配合ROM版本的嵌入式芯片使用,使后者初步具备了片上闪存版本的芯片性能,以不到1%的成本增加了达到了成本在30%以上的片上闪存能起到的作用。附图说明此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:图1为传统手动补丁生成流程图;图2为本专利技术实施例1所述的补丁生成方法的流程图;图3为本专利技术实施例1所述的多个补丁目标代码文件输入补丁通道地址计算回填工具的原理图;图4为本专利技术实施例2所述的补丁生成装置的工作流程图。具体实施方式为了使本专利技术实施例中的技术方案及优点更加清楚明白,以下结合附图对本专利技术的示例性实施例进行进一步详细的说明,显然,所描述的实施例仅是本专利技术的一部分实施例,而不是所有实施例的穷举。需要说明的是,在不冲突的情况下,本专利技术中的实施例及实施例中的特征可以相互组合。实施例1如图2所示,本实施例提出了一种补丁生成方法,所述方法包括:S101,接收补丁源代码文件。具体地,所述补丁源代码文件是针对原始源代码文件进行修改后生成的源代码文件,所述补丁源代码文件中包含具有单一入口的一个或多个修改后的函数。在多个修改后的函数交换信息时,可以严格要求以参数的形式做传递,禁止定义新的只用于在这几个特定的函数中传递信息的全局变量。同时,在对原始源代码编程时,若对某一项功能的实现尚不确定,可在原始源代码中预留一定的空的占位函数(StubFunction),以便在占位函数中进行函数的增加或修改,实现功能的添加或修改。另外,在本实施例中,可将尽量多地修改集成在单一入口的一个或多个函数中,然后将具有单一入口的一个或多个函数集合在一个补丁源代码文件中,从而由于在系统打补丁时,一个补丁源代码文件会占用一个补丁通道,这样就可以减少补丁通道的个数。集成的补丁源代码文件中要调用的其他不在该文件中的函数可以以extern定义,并且尽量不使用全局变量;如果使用了全局变量,则需要执行全局变量冲突消除,具体地实施可以参见本实施例中步骤S104。S102,将所述补丁源代码文件进行编译生成补丁汇编代码文件。具体地,在进行编译之前,可由工程师或相关技术人员先在补丁源代码文件中指定分散加载文件,然后,获取原始源代码文件中所有的宏定义和类型定义,然后再根据所述宏定义、类型定义和指定分散加载文件将所述补丁源代码文件进行编译生成补丁汇编代码文件。具体地,对代码文件进行编译的过程可直接借助于标准的ARMCC或GCC工具来实现。本实施例中,分散加载文件(scatterfile,后缀为.scf)是一个文本文件,该分散加载文件可以用来指定ARM连接器在生成映像文件时如何分配RO,RW,ZI等数据的存放地址。在具体实施时,如果不指定分散加载文件,那么ARM连接器会按照默认的方式来生成映像文件。但在希望把某些数据放在指定的地址处时,就需要指定分散加载文件。例如,LPC2378芯片具有多个不连续的SRAM,通用的RAM是32KB,可是32KB不够用,当技术人员希望把某个.C中的RW数据放在USB的SRAM中时,那么就可以通过指定分散加载文件来完成这个功能。在实施本实施例所述的补丁生成方法之前,与现有技术中手动补丁生成方法相似,通过标准工具中的编译器对原始源代码文件进行编译得本文档来自技高网
...

【技术保护点】
1.一种补丁生成方法,其特征在于,所述方法包括:接收补丁源代码文件,其中,所述补丁源代码文件是针对原始源代码文件进行修改后生成的源代码文件,所述补丁源代码文件中包含具有单一入口的一个或多个修改后的函数;将所述补丁源代码文件进行编译生成补丁汇编代码文件;对所述补丁汇编代码文件进行编译生成单个补丁通道的补丁目标代码文件。

【技术特征摘要】
1.一种补丁生成方法,其特征在于,所述方法包括:接收补丁源代码文件,其中,所述补丁源代码文件是针对原始源代码文件进行修改后生成的源代码文件,所述补丁源代码文件中包含具有单一入口的一个或多个修改后的函数;将所述补丁源代码文件进行编译生成补丁汇编代码文件;对所述补丁汇编代码文件进行编译生成单个补丁通道的补丁目标代码文件。2.根据权利要求1所述的方法,其特征在于,将所述补丁源代码文件进行编译生成补丁汇编代码文件的过程包括:获取原始源代码文件中所有的宏定义和类型定义;根据所述宏定义、类型定义和指定分散加载文件将所述补丁源代码文件进行编译生成补丁汇编代码文件。3.根据权利要求2所述的方法,其特征在于,将所述补丁源代码文件进行编译生成补丁汇编代码文件之前,所述方法还包括:爬取原始源代码文件中宏定义和类型定义,对爬取的宏定义和类型定义进行去重处理后,生成类型定义文件;所述获取原始源代码文件中所有的宏定义和类型定义的过程包括:从所述类型定义文件中获取原始源代码文件中所有的宏定义和类型定义。4.根据权利要求2所述的方法,其特征在于,在根据所述宏定义、类型定义和指定分散加载文件将所述补丁源代码文件进行编译生成补丁汇编代码文件之后,所述方法还包括对生成的补丁汇编代码文件进行汇编整理,所述汇编整理包括加入补丁头文件、添加对齐标记和/或加入跳转标签;所述补丁头文件用于指示补丁目标代码文件的入口地址和出口地址;所述对齐标记用于将补丁源代码文件中一个或多个修改后的函数的入口地址统一为单一入口;所述跳转标签用于指示修改后的函数之...

【专利技术属性】
技术研发人员:张亦农邹世彬张超
申请(专利权)人:南京中感微电子有限公司
类型:发明
国别省市:江苏,32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1