文件压缩方法、升级方法、装置、电子设备及存储介质与流程

文档序号:29910351发布日期:2022-05-06 01:12阅读:148来源:国知局
文件压缩方法、升级方法、装置、电子设备及存储介质与流程

1.本技术涉及数据处理技术领域,具体而言,涉及一种文件压缩方法、升级方法、装置、电子设备及存储介质。


背景技术:

2.risc-v指令集(一种基于精简指令集risc原则的开源指令集架构)适用于现代计算设备(如仓库规模云计算机、高端移动电话和微小嵌入式系统),具有众多支持的软件,在基于risc-v指令集对多种设备的固件(firmware)进行升级时,例如iot(internet of things,物联网)、多种嵌入式设备等,由于其中的软件更新速度较快,需要对多种设备中的固件进行定期地更新。
3.现有技术中,在对risc-v指令集对应的固件进行升级时,通常采用ota的方式进行升级,更新的固件中通常包括了完整的可执行二进制文件,在进行更新时,由于这部分文件与更新的二进制文件需要占用同样大小的存储空间。目前虽然能够对risc-v指令集对应的固件进行压缩以减小文件的体积,但是由于压缩比较小,导致压缩效果较差,升级时的文件较大,升级所需的存储空间较大,设备中的存储成本较高。


技术实现要素:

4.有鉴于此,本技术实施例的目的在于提供一种文件压缩方法、升级方法、装置、电子设备及存储介质,以改善现有技术中存在的设备中存储成本较高的问题。
5.为了解决上述问题,第一方面,本技术提供了一种文件压缩方法,应用于压缩终端,所述方法包括:
6.对升级文件进行转换处理,得到目标代码段和目标数据段;
7.对所述目标代码段进行指令替换,得到目标指令数据;
8.对所述目标指令数据和所述目标数据段进行压缩,得到目标文件。
9.在上述实现方式中,通过对固件进行升级时的升级文件进行转换处理,能够得到目标代码段和目标数据段,由于目标代码段中的数据较规整,规律性较强,而目标数据段中的数据较无序,规律性较弱,且目标代码段的体积远大与目标数据段,因此通过对目标代码段和目标数据段进行分别处理,对目标代码段进行指令替换,将目标代码段中代码长度较长的指令替换为功能相同且代码长度较短的目标指令数据,再将目标指令数据与目标数据段进行压缩处理,能够得到体积较小的目标文件,有效地提高了升级文件进行压缩时的压缩比和压缩效果,从而节省升级时目标文件占用的存储空间,节约存储成本。
10.可选地,所述对所述目标代码段进行指令替换,得到目标指令数据,包括:
11.对所述目标代码段中的初始指令进行格式变换,得到指令格式满足预设格式的规范指令;
12.识别所述规范指令中多个连续的、具有关联性的指令,并将其识别为所述目标代码段中的连续指令;
13.基于指令模板字典对多个所述连续指令进行替换,以生成所述目标指令数据。
14.在上述实现方式中,由于进行压缩前,目标代码段中的多个初始指令的指令格式并不相同,导致在解压时可能无法对多种指令格式不同的指令进行正常地解压和运行,因此可以在对指令进行替换前对多个指令格式不同的初始指令进行指令格式地变换,能够得到变换后多个指令格式满足预设格式的多个规范指令,通过对格式进行变换,使解压后的文件能够正常解压和运行。并对规范指令进行识别,以识别到的多个连续的、具有关联性的规范指令作为目标代码段中的连续指令,通过指令模板字典对代码长度较长的连续指令进行指令替换,能够有效地减小目标代码段的体积大小,从而减小升级时文件的大小。
15.可选地,所述基于指令模板字典对多个所述连续指令进行替换,以生成所述目标指令数据,包括:
16.确定所述目标代码段对应的所述指令模板字典,其中,所述指令模板字典中包括多个代码长度满足预设长度的虚拟指令;
17.根据所述指令模板字典中的多个所述虚拟指令,将多个对应的所述连续指令替换为多个目标虚拟指令,以生成所述目标指令数据。
18.在上述实现方式中,在对目标代码段中的指令进行替换时,通过确定目标代码段对应的指令模板字典,能够根据指令模板字典中的多个代码长度满足预设长度的虚拟指令,即用一个目标虚拟指令对匹配的包含有多个指令的连续指令进行替换,生成体积比目标代码段小的目标指令数据,目标指令数据中包括多个替换后的目标虚拟指令和多个未被替换的连续指令。通过将连续指令替换为目标虚拟指令,能够减小升级时文件的大小,以减小存储空间。
19.可选地,所述确定所述目标代码段对应的所述指令模板字典,包括:
20.基于所述目标代码段确定多个指令模板;
21.根据每个所述指令模板对所述目标代码段进行遍历,得到多个所述连续指令对应的指令序列;
22.基于多个所述指令序列和对应的多个所述指令模板,确定多个存储空间值;
23.根据预设的存储空间阈值对多个所述存储空间值对应的所述指令模板进行筛选,得到多个目标指令模板,以多个所述目标指令模板作为所述指令模板字典。
24.在上述实现方式中,可以通过算法确定目标代码段对应的指令模板字典。基于输入的目标代码段确定多个指令模板,在指令模板的基础上对目标代码段进行遍历,统计得到多个能够与指令模板匹配的连续指令对应的多个指令序列。通过指令序列与指令模板的大小,能够计算得到存储空间值,存储空间值为使用指令模板对连续指令进行替换时能够节约的存储空间的大小。在多个指令模板遍历完成后,再根据预设的存储空间阈值对多个计算得到的存储空间值对应的指令模板进行筛选,得到升级时能够节约存储空间的多个目标指令模板,以多个目标指令模板作为目标代码段对应的指令模板字典,以对目标代码段进行对应地替换。
25.可选地,所述根据所述指令模板字典中的多个所述虚拟指令,将多个对应的所述连续指令替换为多个目标虚拟指令,以生成所述目标指令数据,包括:
26.对多个所述连续指令进行分析处理,以在所述指令模板字典中的多个所述虚拟指令中确定多个所述连续指令匹配的多个所述目标虚拟指令;
27.基于多个所述虚拟指令对多个匹配的所述连续指令进行替换,得到替换后的所述目标指令数据。
28.在上述实现方式中,由于目标代码段中的连续指令可以为多种不同类型的指令,指令模板字典中也具有多种不同种类的虚拟指令,因此可以通过对目标代码段中的多个连续指令进行分析处理并与指令模板字典中的多个虚拟指令进行匹配,分析的结果与虚拟指令匹配时,则该连续指令能够被替换,以相应的虚拟指令作为该连续指令对应的目标虚拟指令对连续指令进行替换。能够针对不同种类的连续指令,以对应的虚拟指令进行替换,从而能够对目标代码段中的多种连续指令进行对应地替换。
29.可选地,所述对升级文件进行转换处理,得到目标代码段和目标数据段,包括:
30.获取对固件进行升级时对应的升级文件;
31.基于目标工具链,对所述升级文件进行编译,得到所述目标代码段和目标数据段。
32.在上述实现方式中,升级文件可以为与固件对应的用于更新的二进制文件,在对升级文件进行开发并获取后,通过目标工具链能够对升级文件中的二进制数据进行编译或链接处理,可以确定其中数据较规整,规律性较强的目标代码段和数据较无序,规律性较弱的目标数据段,以对二进制数据规整程度和规律性不同的目标代码段和目标数据段进行分别处理,提高文件的压缩效率和压缩效果。
33.第二方面,本技术还提供了一种文件压缩装置,所述装置包括:
34.转换模块,用于对升级文件进行转换处理,得到目标代码段和目标数据段;
35.指令替换模块,用于对所述目标代码段进行指令替换,得到目标指令数据;
36.压缩模块,用于对所述目标指令数据和所述目标数据段进行压缩,得到目标文件。
37.第三方面,本技术提供了一种文件升级方法,应用于解压终端,所述方法包括:
38.接收目标文件,所述目标文件为使用上述任意一项所述的文件压缩方法压缩得到的文件;
39.对所述目标文件进行解压,得到目标指令数据和目标数据段;
40.对所述目标指令数据进行指令还原,得到目标代码段和所述目标数据段组成的升级文件;
41.基于所述升级文件对固件进行升级。
42.在上述实现方式中,在解压终端对固件进行升级时,可以接受压缩终端中发送的压缩得到的目标文件,并对目标文件进行解压,得到目标指令数据和目标数据段,并对目标指令数据进行指令还原操作,得到还原后的目标代码段,以目标代码段和目标数据段作为升级时的升级文件,在升级文件的基础上对固件进行升级。根据目标文件进行升级时,能够获取对应的升级文件,无需在解压终端中设置特定的硬件对目标文件进行解压,有效地提高了升级时的效率,节约存储成本。
43.第四方面,本技术还提供了一种文件升级装置,所述装置包括:
44.接收模块,用于接收目标文件,所述目标文件为使用任意一项所述的文件压缩方法压缩得到的文件;
45.解压模块,用于对所述目标文件进行解压,得到目标指令数据和目标数据段;
46.指令还原模块,用于对所述目标指令数据进行指令还原,得到目标代码段和所述目标数据段组成的升级文件;
47.升级模块,用于基于所述升级文件对固件进行升级。
48.第五方面,本技术还提供了一种电子设备,所述电子设备包括存储器和处理器,所述存储器中存储有程序指令,所述处理器读取并运行所述程序指令时,执行上述文件压缩方法和文件升级方法中任一实现方式中的步骤。
49.第六方面,本技术还提供了一种计算机可读取存储介质,所述可读取存储介质中存储有计算机程序指令,所述计算机程序指令被一处理器读取并运行时,执行上述文件压缩方法和文件升级方法中任一实现方式中的步骤。
50.综上所述,本技术提供了一种文件压缩方法、升级方法、装置、电子设备及存储介质,通过对升级时文件的指令进行替换和还原,有效地提高对升级文件进行压缩的压缩比和压缩效果,减小了设备中进行升级时文件占用的存储空间,从而节约存储成本。
附图说明
51.为了更清楚地说明本技术实施例的技术方案,下面将对本技术实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本技术的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
52.图1为本技术实施例提供的一种电子设备的方框示意图;
53.图2为本技术实施例提供的一种文件压缩方法的流程示意图;
54.图3为本技术实施例提供的一种步骤s300的详细流程示意图;
55.图4a-图4b为本技术实施例提供的一种指令格式变换示意图;
56.图5为本技术实施例提供的一种步骤s330的详细流程示意图;
57.图6为本技术实施例提供的一种步骤s331的详细流程示意图;
58.图7为本技术实施例提供的一种步骤s332的详细流程示意图;
59.图8a1-图8a2为本技术实施例提供的第一种目标虚拟指令的格式示意图;
60.图8b为本技术实施例提供的第二种目标虚拟指令的格式示意图;
61.图8c为本技术实施例提供的第三种目标虚拟指令的格式示意图;
62.图8d为本技术实施例提供的第四种目标虚拟指令的格式示意图;
63.图8e为本技术实施例提供的第五种目标虚拟指令的格式示意图;
64.图9为本技术实施例提供的一种步骤s200的详细流程示意图;
65.图10为本技术实施例提供的一种文件升级方法的流程示意图;
66.图11为本技术实施例提供的一种文件压缩装置的模块结构示意图;
67.图12为本技术实施例提供的一种文件升级装置的模块结构示意图。
68.图标:100-电子设备;111-存储器;112-存储控制器;113-处理器;114-外设接口;115-输入输出单元;116-显示单元;600-文件压缩装置;610-转换模块;620-指令替换模块;630-压缩模块;700-文件升级装置;710-接收模块;720-解压模块;730-指令还原模块;740-升级模块;f3-第三功能码;f7-第七功能码。
具体实施方式
69.下面将结合本技术实施例中附图,对本技术实施例中的技术方案进行清楚、完整
memory,简称eeprom)等。其中,存储器111用于存储程序,所述处理器113在接收到执行指令后,执行所述程序,本技术实施例任一实施例揭示的过程定义的电子设备100所执行的方法可以应用于处理器113中,或者由处理器113实现。
77.上述的处理器113可能是一种集成电路芯片,具有信号的处理能力。上述的处理器113可以是通用处理器,包括中央处理器(central processing unit,简称cpu)、网络处理器(network processor,简称np)等;还可以是数字信号处理器(digital signal processor,简称dsp)、专用集成电路(application specific integrated circuit,简称asic)、现场可编程门阵列(fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本技术实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
78.上述的外设接口114将各种输入/输出装置耦合至处理器113以及存储器111。在一些实施例中,外设接口114,处理器113以及存储控制器112可以在单个芯片中实现。在其他一些实例中,他们可以分别由独立的芯片实现。
79.上述的输入输出单元115用于提供给用户输入数据。所述输入输出单元115可以是,但不限于,鼠标和键盘等。
80.上述的显示单元116在电子设备100与用户之间提供一个交互界面(例如用户操作界面)或用于显示图像数据给用户参考。在本实施例中,所述显示单元可以是液晶显示器或触控显示器。若为触控显示器,其可为支持单点和多点触控操作的电容式触控屏或电阻式触控屏等。支持单点和多点触控操作是指触控显示器能感应到来自该触控显示器上一个或多个位置处同时产生的触控操作,并将该感应到的触控操作交由处理器进行计算和处理。在本技术实施例中,显示单元116可以显示文件压缩或解压时的状态等。
81.本实施例中的电子设备可以用于执行本技术实施例提供的各个文件压缩方法和文件升级方法中的各个步骤。下面通过几个实施例详细描述文件压缩方法和文件升级方法的实现过程。
82.请参阅图2,图2为本技术实施例提供的一种文件压缩方法的流程示意图,该方法可以包括步骤s200-s400。
83.步骤s200,对升级文件进行转换处理,得到目标代码段和目标数据段。
84.其中,升级文件为设备中进行固件升级时,与设备中原有文件对应的文件,可以为经过软件开发和调试后更新的二进制文件,包括升级时使用的源代码。由于升级文件中包括多种不同类型的数据,通过对升级文件中的源代码进行转换处理,能够将升级文件转换并且分类,得到数据较规整,规律性较强的目标代码段和数据较无序,规律性较弱的目标数据段,以对不同的类型的目标代码段和目标数据段进行分别处理。
85.步骤s300,对所述目标代码段进行指令替换,得到目标指令数据。
86.其中,在生成目标代码段时,由于risc-v指令集中的指令为精简指令,经过转换后的多个指令按照顺序排列时,连续的几个指令之间会具有一定的关联性,可以将多个连续的具有关联性的指令作为连续指令。由于目标代码段中的连续指令中包含多个指令,因此连续指令的代码长度(code size)较长,在目标代码段中占用的存储空间较大。通过以代码长度较短的一个虚拟指令替换包含多个指令、代码长度较长的连续指令,得到替换后的整体代码长度比目标代码段短的目标指令数据,能够减小目标代码段占用的存储空间。
87.步骤s400,对所述目标指令数据和所述目标数据段进行压缩,得到目标文件。
88.其中,在对目标代码段中的指令替换完成后,将替换得到的目标指令数据和目标数据段一起进行压缩处理,能够得到压缩后体积较小,占用存储空间较小的目标文件。
89.可选地,压缩时可以采用标准压缩的方式进行压缩,即使用无损压缩算法对目标指令数据和目标数据段进行压缩,以使压缩后的目标文件能够进行解压,可以还原到压缩前的目标指令数据和目标数据段,数据经过压缩后信息不受损失。示例地,无损压缩算法可以包括lz77编码、lzss编码、lzma编码等多种无损压缩算法。
90.在图2所示的实施例中,能够对升级文件中的不同类型的目标代码段和目标数据段分别进行处理,有效地提高了对升级文件进行压缩时的压缩比和压缩效果,从而节省升级时目标文件占用的存储空间,节约存储成本。
91.可选地,请参阅图3,图3为本技术实施例提供的一种步骤s300的详细流程示意图,步骤s300中还可以包括步骤s310-s330。
92.步骤s310,对所述目标代码段中的初始指令进行格式变换,得到指令格式满足预设格式的规范指令。
93.其中,由于目标代码段中的多个初始指令的指令格式可能不相同,而格式不同可能会导致设备在对文件进行解压时,无法对多种指令格式不同的指令进行正常地解压和运行,因此可以对目标代码段中的多个初始指令进行格式变换,将指令格式不同的多个规范指令变换为满足预设格式的规范指令,使文件能够正常解压和运行。其中,预设格式可以为指定的指令格式,例如最低比特位为操作码,其次比特位为功能码等。对指令的格式进行变换后能使指令的格式更加规整,能够以低比特位来替换当前指令代表的具体操作,还可以在对指令进行替换时,能够较快地找到指令中未被使用的操作码。
94.示例地,请参阅图4a-图4b,图4a-图4b为本技术实施例提供的一种指令格式变换示意图,其中,图4a为一种32bit的初始指令的指令格式,图4b为对图4a中的一种32bit的初始指令进行格式变换后的规范指令的指令格式。其中,初始指令中多种基本指令格式,即r-type、i-type、s-type、b-type、u-type和j-type,每一种基本指令格式中具有操作码(opcode)、功能码(funct3:表示3位的功能码,funct7:表示7位的功能码)、寄存器(rs1和rs2)和立即数(imm代表不同长度的立即数)等多种数据,多种数据分别位于不同的比特位上,在图4a所示的实施例中,第三功能码f3处于与寄存器或立即数相隔的较高的比特位中,第七功能码f7处于最高的比特位中,在格式变换时可以对第三功能码f3和第七功能码f7的位置进行调整,并对其他数据进行对应地调整,以使第三功能码f3和第七功能码f7能够处于较低的比特位,得到多个指令格式符合预设格式的规范指令。
95.步骤s320,识别所述规范指令中多个连续的、具有关联性的指令,并将其识别为所述目标代码段中的连续指令。
96.其中,经过编译、链接后的规范指令按顺序排列,连续的几个规范指令之间会有一定的关联性,通过对规范指令进行识别,能够以多个连续的、具有关联性的规范指令作为目标代码段中的连续指令,以在替换时能够以一个指令对多个规范指令进行替换。
97.步骤s330,基于指令模板字典对多个所述连续指令进行替换,以生成所述目标指令数据。
98.其中,可以根据指令模板字典对目标代码段中的多个连续指令进行替换,能将连
续指令替换为匹配的虚拟指令,从而有效地减小目标代码段的体积大小。
99.在图3所示的实施例中,通过对目标代码段中的指令进行格式变换和指令替换,能够有效地减小目标代码段的体积大小,得到体积较小的目标指令数据。
100.可选地,请参阅图5,图5为本技术实施例提供的一种步骤s330的详细流程示意图,步骤s330中还可以包括步骤s331-s332。
101.步骤s331,确定所述目标代码段对应的所述指令模板字典。
102.其中,指令模板字典中包括多个代码长度满足预设长度的虚拟指令,虚拟指令不受硬件、体系结构性能和指令代码长度的限制,可以灵活地由算法进行定义和生成,可以对高频指令序列采用较短的编码格式生成虚拟指令。通过算法能够确定出用于对目标代码段中的连续指令进行替换的指令模板字典,可以根据目标代码段中指令的具体情况生成对应的指令模板字典进行替换,满足多种应用场景,适用于多种固件的升级情况。
103.步骤s332,根据所述指令模板字典中的多个所述虚拟指令,将多个对应的所述连续指令替换为多个目标虚拟指令,以生成所述目标指令数据。
104.其中,在对目标代码段中的连续指令进行指令替换时,将多个连续指令替换为对应的多个目标虚拟指令,目标指令数据中包括替换后的目标虚拟指令,还包括多个未被替换的连续指令。从而通过指令替换对目标代码段中的连续指令进行压缩,得到代码长度较短的目标指令数据。
105.在图5所示的实施例中,能够由多个替换后的目标虚拟指令组成的体积比目标代码段小的目标指令数据,从而减小升级时文件的大小,以减小存储空间。
106.可选地,请参阅图6,图6为本技术实施例提供的一种步骤s331的详细流程示意图,步骤s331中还可以包括步骤s3311-s3314。
107.步骤s3311,基于所述目标代码段确定多个指令模板。
108.其中,将目标代码段输入算法中进行计算,根据输入的目标代码段在指令模板数据库中进行查找,确定出与目标代码段对应的多个指令模板。
109.可选地,进行指令替换时可以调用与升级的固件对应的指令模板数据库,也可以根据固件的升级文件建立对应的指令模板数据库。指令模板数据库中可以包括多种类型的连续指令对应的模板,能够根据连续指令的类型对指令模板数据库进行实时地更新,对指令模板数据库中的模板进行增加或删减,以保持指令模板数据库的实时性和有效性。
110.步骤s3312,根据每个所述指令模板对所述目标代码段进行遍历,得到多个所述连续指令对应的指令序列。
111.其中,根据确定的每个指令模板对目标代码段进行遍历,能够得到目标代码段中与多个指令模板匹配的多个连续指令对应的多个指令序列,将统计得到的指令序列的次数记为n(n》0且为整数),以多个指令序列对应的连续指令作为目标代码段中需要进行指令替换的指令。
112.步骤s3313,基于多个所述指令序列和对应的多个所述指令模板,确定多个存储空间值。
113.其中,将任意一个指令模板的字节大小记为t,将与指令模板对应的连续指令的字节大小记为s,结合指令模板的字节大小,以及对应的指令序列次数和连续指令的字节大小,能够计算得到使用指令模板对连续指令进行替换时能够节约的存储空间的大小,即为
存储空间值,存储空间值r=n(s-t)字节。
114.可选地,计算出每一个指令模板替换对应的连续指令时能够节约的存储空间的大小,得到多个存储空间值,可以将多个存储空间值存入与指令模板数据库中与每个指令模板对应的entry(键值对对象)中,以对多个存储空间值进行对应地存储。
115.步骤s3314,根据预设的存储空间阈值对多个所述存储空间值对应的所述指令模板进行筛选,得到多个目标指令模板,以多个所述目标指令模板作为所述指令模板字典。
116.其中,在计算得到所有能够与目标代码段进行匹配的指令模板对应的存储空间值后,可以根据指令模板数据库中存储的多个存储空间值对多个指令模板进行排序,排序顺序可以为按照存储空间值由大到小的顺序或者由小到大的顺序,在此排序基础上根据预设的存储空间阈值对多个指令模板进行筛选,存储空间阈值可以为提升指令的压缩比和压缩效果时,节约的最小的存储空间的大小,筛选出存储空间值大于存储空间阈值的多个指令模板,以作为满足压缩条件的多个目标指令模板,存储空间值小于存储空间阈值的多个指令模板为不满足压缩条件的非目标指令模板,由多个目标指令模板组成进行指令替换时的指令模板字典,每个目标指令模板都为一种对应的虚拟指令。
117.可选地,还可以先确定一个指令模板的存储空间值后,再确定第二个指令模板,并确定第二个指令模板的存储空间值,重复指令模板和对应的存储空间值的步骤,直到指令模板数据库中的所有指令模板被遍历。
118.在图6所示的实施例中,能够得到升级时节约的存储空间较大的多个目标指令模板,以多个目标指令模板作为目标代码段对应的指令模板字典,以对目标代码段进行对应地替换。
119.可选地,请参阅图7,图7为本技术实施例提供的一种步骤s332的详细流程示意图,步骤s332中还可以包括步骤s3321-s3322。
120.步骤s3321,对多个所述连续指令进行分析处理,以在所述指令模板字典中的多个所述虚拟指令中确定多个所述连续指令匹配的多个所述目标虚拟指令。
121.其中,由于目标代码段中的连续指令可以为多种不同类型的指令,指令模板字典中也具有多种不同种类的虚拟指令,因此可以通过对目标代码段中的多个连续指令进行分析处理并与指令模板字典中的多个虚拟指令进行匹配,分析处理可以为对连续指令进行语义分析,对连续指令进行扫描,将其与指令模板字典中的多个虚拟指令中的操作进行匹配,在匹配到一致的虚拟指令时,则以该虚拟指令作为该连续指令对应的目标虚拟指令,在未匹配到一致的虚拟指令时,则该连续指令无法被替换。
122.步骤s3322,基于多个所述虚拟指令对多个匹配的所述连续指令进行替换,得到替换后的所述目标指令数据。
123.其中,在确定的目标虚拟指令的基础上,能够对与每个目标虚拟指令匹配的多个连续指令进行替换,得到替换后的目标虚拟指令和多个未被替换的连续指令组成的目标指令数据。
124.可选地,替换时可以包括以下多种情况:
125.在匹配得到的目标虚拟指令包括push(入栈)指令和pop(出栈)指令时,示例地,请参阅图8a1-图8a2,图8a1-图8a2为本技术实施例提供的第一种目标虚拟指令的格式示意图,图8a1为目标虚拟指令入栈时的指令格式,图8a2为目标虚拟指令出栈时的指令格式。其
中,目标虚拟指令的操作码占7bits,而除去ra寄存器外具有另外5个寄存器,5个寄存器各占5bits,由于编译器,例如gcc(gnu compiler collection,gnu编译器套件)在生成连续指令时,入栈和出栈时代码中ra寄存器的位置相对固定的,因此在替换时,虚拟指令中的ra寄存器可以忽略,另外的5个寄存器与risc-v指令集中的32个通用寄存器中的寄存器对应,可以通过虚拟指令中5个寄存器中的5bits对连续指令进行替换。
126.在匹配得到的目标虚拟指令与函数调用相关时,例如,通过c语言的函数指针调用某个函数,通过编译器产生3个指令作为连续指令,连续指令中包括10个字节,因此可以用3个字节的pcall(调用)虚拟指令作为目标虚拟指令对连续指令进行替换。示例地,请参阅图8b,图8b为本技术实施例提供的第二种目标虚拟指令的格式示意图,目标虚拟指令的操作码(pcall)占用7bits,index(返回表或区域中的值或值的引用)指向指令模板字典中被调用函数的实际地址,从而能够以较小的pcall指令进行替换,且能够被多个函数调用,将被调用的函数的实际地址放在指令模板字典中,能够重复被其他调用指令的使用过程,以进一步地节约存储空间。可选地,由于升级文件中risc-v指令集的特点,可以对相对范围大于1mib的直接函数调用,得到的目标代码段中会产生2个4字节指令作为连续指令,共8个字节,可以通过1个3字节pcall虚拟指令替换,具体格式类似图8b中示出的格式,不再进行说明。
127.在匹配得到的目标虚拟指令包括linkage(连接、联动)的变量时,例如全局变量、静态变量等,示例地,目标代码段中具有linkage变量时,可以生成2个4字节指令作为连续指令,共8个字节来进行访问,将全局变量g_value加载到寄存器a5中。请参阅图8c,图8c为本技术实施例提供的第三种目标虚拟指令的格式示意图,匹配的目标虚拟指令中的操作码为5bits,寄存器num可以指定为risc-v指令集中32通用寄存器中的一个,由于index函数中14bits指向指令模板字典中全局变量的地址,因此也类似与调用函数时的替换方式,可以用1个3字节的虚拟指令对连续指令进行替换,在指向的全局变量被多次频繁使用时,还可以将全局变量添加到指令模板字典中,以作为新的指令模板。
128.在匹配得到的目标虚拟指令包括高级语言中的数组访问时,例如c语言的数组访问,编译器通常是通过寄存器乘以访问的数组元素的大小,加上另外一个寄存器得到的访问的数组元素的地址,可以得到2个连续的6字节的指令作为连续指令。示例地,请参阅图8d,图8d为本技术实施例提供的第四种目标虚拟指令的格式示意图,采用的目标虚拟指令的操作码为5bits,寄存器base和寄存器num中的5bits与risc-v指令集中32个通用寄存器中的寄存器相对应,以目标虚拟指令中立即数的大小9bits来表示访问时的数组元素的大小,以对连续指令进行替换。
129.在匹配得到的目标虚拟指令包括位移和算术指令时,在目标代码段中,通过某个寄存器先做位移运算,然后再和另外一个寄存器做算术运算,得到2个6字节的连续指令,示例地,请参阅图8e,图8e为本技术实施例提供的第五种目标虚拟指令的格式示意图,可以采用3个字节,操作码为4bits,具有4个寄存器且每个寄存器具有5bits,位移量为5bits的目标虚拟指令对连续指令进行替换。
130.在匹配得到的目标虚拟指令包括连续的几个load(将内存中的数据装载到寄存器中)或者store(将寄存器中的数据存入内存)指令时,由于risc-v指令集中由于没有类似arm体系结构中的多加载和多存储指令,对于高级语言中的结构体访问,目标代码段中会产
生连续的多个加载load和存储store指令作为连续指令,在对此类连续指令进行替换时,与对push和pop指令进行替换的方式相似,可以通过1个多加载虚拟指令,对多个load指令和store指令进行替换。
131.值得说明的是,在对目标代码段进行指令替换时,包括但不限于以上几种替换情况,在目标代码段存在一些连续指令反复出现时,还可以通过算法进行匹配查找,以进行替换,对于其他替换情况不再进行详述。
132.在图7所示的实施例中,能够对不同类型、不同情况下的连续指令分别采用对应的指令函数中的替换方式进行替换,从而能够对目标代码段中的多种指令进行对应地替换,增大了指令替换时的替换范围,提高了指令替换时的有效性和效率。
133.可选地,请参阅图9,图9为本技术实施例提供的一种步骤s200的详细流程示意图,步骤s200中还可以包括步骤s210-s220。
134.步骤s210,获取对固件进行升级时对应的升级文件。
135.其中,在固件需要升级时,通过对软件开发稳定到一定阶段时确定的用于更新的源代码的二进制可执行文件进行获取,能够得到用于对固件进行升级的升级文件。
136.步骤s220,基于目标工具链,对所述升级文件进行编译,得到所述目标代码段和目标数据段。
137.其中,通过工具链对升级文件进行编译或链接处理,在对升级文件进行开发调试的同时,还可以确定其中包括的数据较规整,规律性较强的目标代码段和数据较无序,规律性较弱的目标数据段,以对二进制数据规整程度和规律性不同的目标代码段和目标数据段进行分别处理,提高文件的压缩效率和压缩效果。
138.可选地,工具链可以为gun工具链,能够同时对java、c++等多种语言进行编译和链接。
139.在图9所示的实施例中,能通过编译和链接得到二进制可执行文件中的目标代码段和目标数据段,以对两种数据进行分别处理。
140.可选地,请参阅图10,图10为本技术实施例提供的一种文件升级方法的流程示意图,该方法可以包括步骤s500-s530。
141.步骤s500,接收目标文件。
142.其中,目标文件为使用文件压缩方法压缩得到的文件,对文件进行压缩的压缩终端和对文件进行升级的解压终端通信连接,以使解压终端能够实时地接收压缩终端中发送的压缩后的目标文件。
143.步骤s510,对所述目标文件进行解压,得到目标指令数据和目标数据段。
144.其中,由于对目标文件进行压缩时的压缩方式为采用无损压缩算法的无损压缩方式,因此解压终端对目标文件进行解压时,能够解压得到压缩前的目标指令数据和目标数据段,有效地减小了文件占用的存储空间。
145.步骤s520,对所述目标指令数据进行指令还原,得到目标代码段和所述目标数据段组成的升级文件。
146.其中,由于目标指令数据中具有多个虚拟指令,因此需要对目标指令数据进行指令还原处理,以将多个虚拟指令还原为对应的规范指令,得到还原后的目标代码段,以目标代码段和目标数据段作为升级时的升级文件。
147.步骤s530,基于所述升级文件对固件进行升级。
148.其中,将还原得到的升级文件作为二进制可执行文件,对固件执行升级操作。
149.在图10所示的实施例中,通过对目标文件进行解压和指令还原处理,能够获取对应的升级文件,无需在解压终端中设置特定的硬件对目标文件进行解压,有效地提高了升级时的效率,节约存储成本。
150.请参阅图11,图11为本技术实施例提供的一种文件压缩装置的模块结构示意图,文件压缩装置600中可以包括:
151.转换模块610,用于对升级文件进行转换处理,得到目标代码段和目标数据段;
152.指令替换模块620,用于对所述目标代码段进行指令替换,得到目标指令数据;
153.压缩模块630,用于对所述目标指令数据和所述目标数据段进行压缩,得到目标文件。
154.在一可选的实施方式中,指令替换模块620中还可以包括格式变换子模块、识别子模块和指令替换子模块;
155.格式变换子模块,用于对所述目标代码段中的初始指令进行格式变换,得到指令格式满足预设格式的规范指令;
156.识别子模块,用于识别所述规范指令中多个连续的、具有关联性的指令,并将其识别为所述目标代码段中的连续指令;
157.指令替换子模块,用于基于指令模板字典对多个所述连续指令进行替换,以生成所述目标指令数据。
158.在一可选的实施方式中,指令替换子模块中还可以包括字典确定单元和替换单元;
159.字典确定单元,用于确定所述目标代码段对应的所述指令模板字典,其中,所述指令模板字典中包括多个代码长度满足预设长度的虚拟指令;
160.替换单元,用于根据所述指令模板字典中的多个所述虚拟指令,将多个对应的所述连续指令替换为多个目标虚拟指令,以生成所述目标指令数据。
161.在一可选的实施方式中,字典确定单元中还可以包括模板确定子单元、遍历子单元、确值子单元和筛选子单元;
162.模板确定子单元,用于基于所述目标代码段确定多个指令模板;
163.遍历子单元,用于根据每个所述指令模板对所述目标代码段进行遍历,得到多个所述连续指令对应的指令序列;
164.确值子单元,用于基于多个所述指令序列和对应的多个所述指令模板,确定多个存储空间值;
165.筛选子单元,用于根据预设的存储空间阈值对多个所述存储空间值对应的所述指令模板进行筛选,得到多个目标指令模板,以多个所述目标指令模板作为所述指令模板字典。
166.在一可选的实施方式中,替换单元中还可以包括分析子单元和替换子单元;
167.分析子单元,用于对多个所述连续指令进行分析处理,以在所述指令模板字典中的多个所述虚拟指令中确定多个所述连续指令匹配的多个所述目标虚拟指令;
168.替换子单元,用于基于多个所述虚拟指令对多个匹配的所述连续指令进行替换,
得到替换后的所述目标指令数据。
169.在一可选的实施方式中,转换模块610中还可以包括获取子模块和编译子模块;
170.获取子模块,用于获取对固件进行升级时对应的升级文件;
171.编译子模块,用于基于目标工具链,对所述升级文件进行编译,得到所述目标代码段和目标数据段。
172.由于本技术实施例中的文件压缩装置600解决问题的原理与前述的文件压缩方法的实施例相似,因此本实施例中的文件压缩装置600的实施可以参见上述文件压缩方法的实施例中的描述,重复之处不再赘述。
173.请参阅图12,图12为本技术实施例提供的一种文件升级装置的模块结构示意图,文件升级装置700中可以包括:
174.接收模块710,用于接收目标文件,所述目标文件为使用文件压缩方法压缩得到的文件;
175.解压模块720,用于对所述目标文件进行解压,得到目标指令数据和目标数据段;
176.指令还原模块730,用于对所述目标指令数据进行指令还原,得到目标代码段和所述目标数据段组成的升级文件;
177.升级模块740,用于基于所述升级文件对固件进行升级。
178.由于本技术实施例中的文件升级装置700解决问题的原理与前述的文件升级方法的实施例相似,因此本实施例中的文件升级装置700的实施可以参见上述文件升级方法的实施例中的描述,重复之处不再赘述。
179.本技术实施例还提供了一种计算机可读取存储介质,所述可读取存储介质中存储有计算机程序指令,所述计算机程序指令被一处理器读取并运行时,执行本实施例提供的文件压缩方法和文件升级方法中任一项所述方法中的步骤。
180.综上所述,本技术实施例提供了一种文件压缩方法、升级方法、装置、电子设备及存储介质,通过对升级时文件的指令进行替换和还原,有效地提高对升级文件进行压缩的压缩比和压缩效果,减小了设备中进行升级时文件占用的存储空间,节约存储成本。
181.在本技术所提供的几个实施例中,应该理解到,所揭露的设备,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的框图显示了根据本技术的多个实施例的设备的可能实现的体系架构、功能和操作。在这点上,框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图中的每个方框、以及框图的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
182.另外,在本技术各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
183.所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。因此本实施例还提供了一种可读取存储介质中存储有计算机程序指令,所述计算机程序指令被一处理器读取并运行时,执行区块数据存储方
法中任一项所述方法中的步骤。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本技术各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
184.以上所述仅为本技术的实施例而已,并不用于限制本技术的保护范围,对于本领域的技术人员来说,本技术可以有各种更改和变化。凡在本技术的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本技术的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
185.以上所述,仅为本技术的具体实施方式,但本技术的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本技术揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本技术的保护范围之内。
186.需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1