一种修复ROM的方法、装置以及存储介质与流程

文档序号:26493512发布日期:2021-09-03 20:53阅读:144来源:国知局
一种修复rom的方法、装置以及存储介质
技术领域
:1.本发明涉及存储器修复领域,具体涉及一种修复rom的方法、装置以及存储介质。
背景技术
::2.只读存储器(read-onlymemory,简称rom),是soc(systemonchip片上系统)内部的只读memory,用于存储代码或数据。当旧rom中发现的较多bug,为避免因修复bug消耗过多ram空间时,通常会重新生成一版新rom;又由于为该soc开发的sdk(softwaredevelopkits)在工作时需要调用rom中的函数接口,所以前述重新生成的新rom还需要满足sdk能在其上的正常运行。3.对于前述问题,目前存在的主要解决方案如下:为旧rom中每个可能存在风险的函数,定义一个函数指针,形成一个函数指针数组——functiontable。4.当其他模块通过上述函数指针以及模块接口调用这些风险函数时,例如当两个函数function1、function2调用函数a时,实际工作中并不是直接调用函数a,而是先从functiontable中取出函数a的地址,再跳至函数a中运行。5.当需要对rom中的风险函数进行修复时,首先实现一个新函数,再将风险函数指针指向新函数入口处,例如rom函数a存在风险,首先实现一个新函数a1,将functiontable中函数a的地址改为新函数a1的地址,如此,调用函数a即变为调用函数a1;由此解决了使用风险函数时产生的风险问题。6.但是,上述方法存在如下缺点:1、需要为每个风险函数定义一个函数指针。在函数数量很大的情况下,占用的rom空间很大,造成资源浪费。2、调用函数的方式发生了变化,对于每个风险函数,增加了调用者机器代码开销。技术实现要素:7.本发明的目的在于,至少提供了一种修复rom的方法、装置以及存储介质。本发明至少具备以下技术效果:不仅可以保证修复后的rom能够兼容当前程序固件,几乎不增加soc系统的消耗,并且同时提高rom空间的资源利用率。8.故本发明提出以下技术方案以解决上述技术问题:9.本发明的第一方面10.本发明的第一方面提供了一种修复rom的方法,包括以下步骤:11.获取旧版rom中风险函数的待修复机器码;12.定义修复所述待修复机器码的文本文件;13.根据所述文本文件编译所有新函数,生成目标文件;14.合并各文件生成新版rom二进制文件并导出新版rom日志文件以完成修复,其中所述各文件包括所述文本文件、所述目标文件和旧版rom文件;15.其中,所述文本文件包括新函数的新地址、新机器码以及替换指令。16.在一些实施例中,所述的方法中,所述完成修复包括:17.当所述待修复机器码的数量在预设范围内时,根据所述替换指令使所述新机器码覆盖所述待修复的机器码。18.在一些实施例中,所述的方法中,所述完成修复还包括:19.若所述新机器码的数量少于所述待修复机器码,根据所述替换指令使所述新函数覆盖所述风险函数的空间,并计算新版rom中的剩余空间;20.其中,所述文本文件中的所述新函数和所述旧版rom中的原函数同名设置。21.在一些实施例中,所述的方法中,所述完成修复还包括:22.若所述新机器码的数量多于所述待修复机器码,根据所述替换指令以使在所述新版rom的未使用空间中存放所述新函数,并在所述风险函数的原函数入口插入调用指令、计算所述新版rom的剩余空间;23.其中,所述文本文件中还包括定义新版rom的未使用空间的信息,所述新函数和所述旧版rom中的所述风险函数同名设置。24.在一些实施例中,所述的方法,还包括步骤:25.根据多次迭代计算实现所述新版rom的空间复用。26.本发明的第二方面27.本发明的第二方面提供了一种修复rom的装置,包括相互连接的:28.获取单元,用于获取旧版rom中风险函数的待修复机器码;29.定义单元,用于定义修复所述待修复机器码的文本文件;30.编译单元,用于根据所述文本文件编译所有新函数,生成目标文件;31.修复单元,用于合并各文件生成新版rom二进制文件并导出新版rom日志文件以完成修复,其中所述文件包括所述文本文件、所述目标文件和旧版rom文件;32.其中,所述文本文件包括新函数的新地址、新机器码以及替换指令。33.在一些实施例中,所述修复单元执行所述完成修复工作包括:34.当所述待修复机器码的数量在预设范围内时,根据所述替换指令使所述新的机器码覆盖所述待修复的机器码。35.在一些实施例中,所述修复单元执行所述完成修复工作还包括:36.若所述新机器码的数量少于所述待修复机器码的数量,根据所述替换指令使所述新函数覆盖所述风险函数的空间,并计算新版rom中的剩余空间;37.其中,所述文本文件中的所述新函数和所述旧版rom中的风险函数同名设置。38.在一些实施例中,所述修复单元执行所述完成修复工作还包括:39.若所述新机器码的数量多于所述待修复机器码的数量,根据所述替换指令在所述新版rom的未使用空间中存放所述新函数,并在所述风险函数的原函数入口插入调用指令、计算所述新版rom的剩余空间;40.其中,所述文本文件中还包括定义新版rom的未使用空间的信息,所述新函数和所述旧版rom中的风险函数同名设置。41.在一些实施例中,所述的修复rom的装置,还包括:42.空间复用单元,用于根据多次迭代计算实现所述新版rom的空间复用。43.本发明的第三方面44.本发明的第三方面提供了一种存储介质,所述存储介质存储有计算机可执行指令,所述计算机可执行指令用于使所述计算机执行第一方面所述的方法。45.本发明的实施例至少具备以下有益效果:46.不仅可以保证修复后的rom能够兼容当前程序固件,而且几乎不增加soc系统的消耗,并且可以提高rom空间的资源利用率。附图说明47.图1为本发明的一些实施例中所述方法的示意图;48.图2为本发明的一些实施例的示意图;49.图3为本发明的一些实施例的示意图;50.图4为本发明的一些实施例的示意图;51.图5为本发明的一些实施例的示意图;52.图6为本发明的一些实施例的示意图;53.图7为本发明的一些实施例的示意图;54.图8为本发明的一些实施例中所述装置的示意图。具体实施方式55.以下结合附图对本发明的具体实施方式进行进一步的说明。56.本发明的第一方面57.第一实施例58.如图1-2所示,第一实施例提供了一种修复rom的方法,包括以下步骤:59.s101、获取旧版rom中风险函数的待修复机器码。60.rom中通常会产生一些风险函数,需要对其进行修复。待修复机器码指的就是在修复工作中,这些风险函数中的需要修改的机器码。61.s102、定义修复所述待修复机器码的文本文件,其中,所述文本文件包括新函数的新地址、新机器码以及替换指令。62.本步骤可以通过如下方式实现:63.创建文本文件,然后在该文本文件中构建用于修复前述风险函数的新函数信息,新函数信息主要包括新函数的新地址、新机器码以及替换指令,64.其中,每个风险函数对应一个相应的新函数,新函数根据新地址与风险函数建立对应关系;新机器码是用来替换待修复机器码的;替换指令是用来将风险函数替换为新函数的,以完成修复工作。65.s103、根据所述文本文件编译所有新函数,生成目标文件。66.在步骤s102中定义新函数信息后,进一步通过该新函数信息为rom中所有的风险函数编译新函数,生成目标文件。67.s104、合并各文件生成新版rom二进制文件并导出新版rom日志文件以完成修复,其中所述各文件包括所述文本文件、所述目标文件和旧版rom文件。68.本步骤中,将上述的所述文本文件、所述目标文件和旧版rom文件合并在一起,根据文本文件中的新函数信息将旧版rom中的风险函数替换为目标文件中的新函数。然后生成新版rom二进制文件并导出新版rom日志文件,完成修复工作。69.需要说明的是,图2中,romelf指的是旧版rom文件、rom_fix.elf指的是目标文件,rom-new.bin指的是新版rom二进制文件,rom-new.log指的是新版rom日志文件。70.如图3所示,进一步地,本步骤可以通过脚本工具自动合并所述各文件。引入脚本工具来完成旧版rom和新版修改点的合并工作,能够减小开发新版rom的工作量。71.相对于现有技术而言,本实施例不需要定义与风险函数对应的函数指针数组,节省了rom空间。72.继续参见图4所示,在步骤s104中,所述完成修复包括:73.201、判断所述待修复机器码的数量是否在预设范围内。74.202、当所述待修复机器码的数量在预设范围内时,根据所述替换指令使所述新机器码覆盖所述待修复的机器码。具体参见图5所示。75.本实施例中,将旧版rom300a中的风险函数与新版rom300中的新函数进行比对,如果待修复机器码的数量在预设范围内,则直接将针对待修改机器码修改即可,也就是在待修复机器码的原地址处使所述新机器码覆盖所述待修复机器码。其中,预设范围可用于限定数量较小的待修复机器码,预设范围根据本领域技术人员的实际需要进行设定。76.本方案能够最大化地减小用于修复工作的代码开销量。77.203、继续判断所述新机器码的数量是否少于所述待修复机器码的数量。78.204、若所述新机器码的数量少于所述待修复机器码的数量,根据所述替换指令使所述新函数覆盖所述风险函数的空间,并计算新版rom300中的剩余空间;79.其中,所述文本文件中的所述新函数和所述旧版rom300a中的原函数同名设置。具体参见图6所示。80.在这种修复模式中,说明待修复机器码的数量比较多,如果按照202中的修复方法对每个待修复机器码进行逐个替换的话,比较麻烦。所以直接使所述新函数覆盖所述风险函数的空间即可。同时计算新版rom300中的剩余空间,剩余空间用于复用给其他函数。提高了存储资源的利用率。81.205、若所述新机器码的数量多于所述待修复机器码的数量,根据所述替换指令在所述新版rom300的未使用空间中存放所述新函数,并在所述风险函数的原函数入口插入调用指令、计算所述新版rom300的剩余空间;82.其中,所述文本文件中还包括定义新版rom300的未使用空间的信息,所述新函数和所述旧版rom300a中的所述风险函数同名设置。具体参见图7所示。83.在这种修复模式中,说明待修复机器码的数量比较多,无法在风险函数的原空间中直接将该风险函数进行整体替换,所以在所述新版rom300的未使用空间中存放与风险函数对应的新函数,并在所述风险函数的原函数入口插入调用指令。提高了存储资源的利用率。84.进一步地,本实施例还根据多次迭代计算实现所述新版rom300的空间复用。85.进一步地,本实施例中新版rom300的未使用空间为多段不连续空间。提升了rom空间的资源利用率。在某些变形实施例中,新版rom300的未使用空间为连续空间。86.本发明的第二方面87.如图8所示,在第一方面的基础上,第二实施例提供了一种修复rom的装置400,所述装置的运行原理与第一实施例的方法相同,可参见上文,此处不再赘述。88.所述装置400包括相互连接的:89.401获取单元,用于获取旧版rom中风险函数的待修复机器码;90.402定义单元,用于定义修复所述待修复机器码的文本文件;91.403编译单元,用于根据所述文本文件编译所有新函数,生成目标文件;92.404修复单元,用于合并各文件生成新版rom二进制文件并导出新版rom日志文件以完成修复,其中所述文件包括所述文本文件、所述目标文件和旧版rom文件;93.其中,所述文本文件包括新函数的新地址、新机器码以及替换指令。94.进一步地,所述修复单元404执行所述完成修复工作包括:95.当所述待修复机器码的数量在预设范围内时,根据所述替换指令使所述新机器码覆盖所述待修复机器码。96.进一步地,所述修复单元404执行所述完成修复工作,还包括:97.若所述新机器码的数量少于所述待修复机器码,根据所述替换指令使所述新函数覆盖所述风险函数的空间,并计算新版rom中的剩余空间;98.其中,所述文本文件中的所述新函数和所述旧版rom中的风险函数同名设置。99.进一步地,所述修复单元404执行所述完成修复工作,还包括:100.若所述新机器码的数量多于所述待修复机器码,根据所述替换指令在所述新版rom的未使用空间中存放所述新函数,并在所述风险函数的原函数入口插入调用指令、计算所述新版rom的剩余空间;101.其中,所述文本文件中还包括定义新版rom的未使用空间的信息,所述新函数和所述旧版rom中的风险函数同名设置。102.进一步地,所述的修复rom的装置400,还包括:103.空间复用单元405,用于根据多次迭代计算实现所述新版rom的空间复用。104.本发明的第三方面105.第三实施例106.第三实施例提供了一种存储介质,所述存储介质存储有计算机可执行指令,所述计算机可执行指令用于使所述计算机执行第一实施例中所述的方法。107.以上具体实施方式对本发明进行了详细的说明,但这些并非构成对本发明的限制。本发明的保护范围并不以上述实施方式为限,但凡本领域普通技术人员根据本发明所揭示内容所作的等效修饰或变化,皆应纳入权利要求书中记载的保护范围内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1