固件快速ROM化方法及装置与流程

文档序号:28858471发布日期:2022-02-11 22:56阅读:333来源:国知局
固件快速rom化方法及装置
技术领域
:1.本发明涉及固件代码rom化的
技术领域
:,特别涉及一种固件快速rom化方法及装置。
背景技术
::2.智能终端和无线产品芯片中的固件(firmware)代码运行需要ram(randomaccessmemory),但是芯片里的ram成本较高,可以通过把代码固化到rom(read-onlymemory)里,达到节省芯片成本的目的。这种降低芯片成本的方法需要解决如何修改rom区域代码的问题。芯片代码rom化需要大量修改源代码,且对rom区域代码可修改性不足。技术实现要素:3.本发明旨在至少解决现有技术中存在的技术问题之一。为此,本发明提出一种固件快速rom化方法,不需要大量修改源代码,能够提高rom区域代码的可修改性。4.本发明还提出一种具有上述固件快速rom化方法的固件快速rom化装置。5.本发明还提出一种具有上述固件快速rom化方法的计算机可读存储介质。6.根据本发明的第一方面实施例的固件快速rom化方法,包括以下步骤:基于宏重命名函数以及变量名称,并将宏进行变量化;将待rom化的函数及变量的指针对table指针数据结构的实例进行初始化赋值,所述table指针数据结构中包括指向变量的指针及指向函数的指针;通过宏定义将所述待rom化的函数及变量的引用替换为对table指针的引用。7.根据本发明实施例的固件快速rom化方法,至少具有如下有益效果:通过宏定义对源代码的函数和变量的声明和定义进行修改,方便快速rom化代码的方法,实现了对变量打补丁,只需要少量修改即可实现对被宏定义区分的代码的可修改性支持,增大了代码rom化兼容性,从而降低芯片设计制造成本。8.根据本发明的一些实施例,table指针存放于ram区。9.根据本发明的一些实施例,针对函数打补丁时,系统启动时首先执行在ram中存放目标函数的补丁函数,修改table结构的所述目标函数的指针以指向所述补丁函数。10.根据本发明的一些实施例,针对变量打补丁时,若目标变量未固化至rom区域仅在系统启动时在rom区域初始化,则在系统启动后进行对所述目标变量重新赋值。11.根据本发明的一些实施例,针对变量打补丁时,若目标变量未在系统启动时初始化,则在在系统启动后进行对所述目标变量进行初始化后再重新赋值。12.根据本发明的一些实施例,rom区域的代码在引用函数或变量时,通过table指针跳转至对应的区域执行相应的命令。13.根据本发明的第二方面实施例的固件快速rom化装置,包括:存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现根据本发明的第一方面实施例的方法。14.根据本发明的第三方面实施例的计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现根据本发明的第一方面实施例的方法。15.根据本发明实施例的计算机可读存储介质,至少具有与本发明的第一方面实施例的方法同样的有益效果。16.本发明的附加方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。附图说明17.本发明的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:18.图1为本发明实施例的方法的流程示意图;19.图2为本发明实施例的方法中的代码rom化整体结构示意图;20.图3为本发明实施例的方法的代码rom化原理示意图;21.图4为本发明实施例的方法的代码rom化流程图;22.图5为本发明实施例的方法中进行打补丁的示意图;23.图6为本发明实施例的装置的模块示意框图。24.附图标记:25.存储器100、处理器200。具体实施方式26.下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能理解为对本发明的限制。27.在本发明的描述中,若干的含义是一个或者多个,多个的含义是两个及两个以上,大于、小于、超过等理解为不包括本数,以上、以下、以内等理解为包括本数。如果有描述到第一、第二只是用于区分技术特征为目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量或者隐含指明所指示的技术特征的先后关系。在本发明的描述中,步骤标号仅是为了描述的方便或者引述的方便所作出的标识,各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。28.参照图1,本发明的实施例的方法包括:基于宏重命名函数以及变量名称,并将宏进行变量化;将待rom化的函数及变量的指针对table指针数据结构的实例进行初始化赋值,该table指针数据结构中包括指向变量的指针及指向函数的指针;通过宏定义将该待rom化的函数及变量的引用替换为对table指针的引用。本发明通过宏定义对源代码的函数和变量的声明和定义进行修改,方便快速rom化代码的方法,实现了对变量打补丁,只需要少量修改即可实现对被宏定义区分的代码的可修改性支持,增大了代码rom化兼容性,从而降低芯片设计制造成本。29.本发明的实施例中,通过在源代码基础上增加一个table指针数据结构,将所有函数、变量对该结构进行初始化赋值;增加一个relocation宏把所有对table函数、变量的直接引用转换为对table指针的引用,在源代码基础上通过rename宏定义对table里的函数、变量进行快速重命名,避免编译问题;同时将宏定义变量化,以达到可以对宏定义代码在rom化后进行修改的目的。30.如图2所示的结构框图中,cpu可以访问rom区域代码,也可以访问ram区域的代码/数据。rom区域代码为固化的代码,只能读,不能改写;ram区域可以读写其中的代码和数据。rom化方案就是将ram代码/变量固化后放入rom区域,当需要修改rom区域中的代码/变量时,可在ram区域中进行打补丁操作。31.图3为本发明的实施例的rom化原理示意图。在rom区域代码和ram区域代码中间增加一个函数/变量表(table),通过这个table,rom区域代码在引用函数/变量符号时,通过table跳转到对应区域执行。ram区域的代码也可以直接引用rom区域的函数/变量符号,而不通过table,加快执行效率。rom区域可以直接引用rom区域符号,ram区域可以直接引用ram区域符号,而不通过table,加快执行效率。32.本发明的实施例中的代码rom流程如图4所示,图4左边是代码rom流程的操作说明,图4右边演示了一个简单的对函数/变量/宏定义代码的rom化实现例子。33.具体流程说明如下:34.①通过rename宏重命名函数/变量的名称35.②为实现对被宏包括起来的代码的可修改支持,将这些宏变量化36.③增加table指针数据结构37.④把需要rom化的函数/变量的指针对该结构实例进行初始化赋值38.⑤为减少对源代码的修改量,通过宏定义把table函数/变量的直接引用替换为对table指针的引用39.本发明的打补丁原理如图5所示,rom区域代码执行fun2函数时通过放置于ram区域的table指针进行跳转,没有修改时会跳转到rom区域的fun2函数地址开始执行;当需要修改fun2函数时,在ram区域实现fun2_patch函数用于替换fun2函数,然后修改table指针结构的fun2函数指针以指向fun2_patch函数的地址。以上修改操作流程需要在系统启动后首先执行,这样当要执行fun2函数时就能直接跳转到fun2_patch函数。40.同理,对于固化到rom区域的变量的打补丁原理和操作与函数的一致。对于非固化到rom区域的变量,但是在rom区域初始化的变量,其在rom区域确定了它本身的地址及大小,所以对它的地址指向的数据进行重新赋值就可以起到打补丁的效果;所以打补丁操作流程为在系统启动后重新赋值,如果该变量在系统启动时没有初始化,则需在其初始化后再重新赋值,如图5所示的date变量。41.本发明的实施例的装置,参照图6,包括:存储器100、处理器200及存储在存储器100上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现根据本发明的第一方面实施例的方法。42.尽管本文描述了具体实施方案,但是本领域中的普通技术人员将认识到,许多其它修改或另选的实施方案同样处于本公开的范围内。例如,结合特定设备或组件描述的功能和/或处理能力中的任一项可以由任何其它设备或部件来执行。另外,虽然已根据本公开的实施方案描述了各种例示性具体实施和架构,但是本领域中的普通技术人员将认识到,对本文所述的例示性具体实施和架构的许多其它修改也处于本公开的范围内。43.上文参考根据示例性实施方案所述的系统、方法、系统和/或计算机程序产品的框图和流程图描述了本公开的某些方面。应当理解,框图和流程图中的一个或多个块以及框图和流程图中的块的组合可分别通过执行计算机可执行程序指令来实现。同样,根据一些实施方案,框图和流程图中的一些块可能无需按示出的顺序执行,或者可以无需全部执行。另外,超出框图和流程图中的块所示的那些部件和/或操作以外的附加部件和/或操作可存在于某些实施方案中。44.因此,框图和流程图中的块支持用于执行指定功能的装置的组合、用于执行指定功能的元件或步骤的组合以及用于执行指定功能的程序指令装置。还应当理解,框图和流程图中的每个块以及框图和流程图中的块的组合可以由执行特定功能、元件或步骤的专用硬件计算机系统或者专用硬件和计算机指令的组合来实现。45.本文所述的程序模块、应用程序等可包括一个或多个软件组件,包括例如软件对象、方法、数据结构等。每个此类软件组件可包括计算机可执行指令,所述计算机可执行指令响应于执行而使本文所述的功能的至少一部分(例如,本文所述的例示性方法的一种或多种操作)被执行。46.软件组件可以用各种编程语言中的任一种来编码。一种例示性编程语言可以为低级编程语言,诸如与特定硬件体系结构和/或操作系统平台相关联的汇编语言。包括汇编语言指令的软件组件可能需要在由硬件架构和/或平台执行之前由汇编程序转换为可执行的机器代码。另一种示例性编程语言可以为更高级的编程语言,其可以跨多种架构移植。包括更高级编程语言的软件组件在执行之前可能需要由解释器或编译器转换为中间表示。编程语言的其它示例包括但不限于宏语言、外壳或命令语言、作业控制语言、脚本语言、数据库查询或搜索语言、或报告编写语言。在一个或多个示例性实施方案中,包含上述编程语言示例中的一者的指令的软件组件可直接由操作系统或其它软件组件执行,而无需首先转换成另一种形式。47.软件组件可存储为文件或其它数据存储构造。具有相似类型或相关功能的软件组件可一起存储在诸如特定的目录、文件夹或库中。软件组件可为静态的(例如,预设的或固定的)或动态的(例如,在执行时创建或修改的)。48.上面结合附图对本发明实施例作了详细说明,但是本发明不限于上述实施例,在所属
技术领域
:普通技术人员所具备的知识范围内,还可以在不脱离本发明宗旨的前提下作出各种变化。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1