CN114942794A - 嵌入式系统固件处理方法、装置、设备及存储介质 - Google Patents
嵌入式系统固件处理方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN114942794A CN114942794A CN202210695007.4A CN202210695007A CN114942794A CN 114942794 A CN114942794 A CN 114942794A CN 202210695007 A CN202210695007 A CN 202210695007A CN 114942794 A CN114942794 A CN 114942794A
- Authority
- CN
- China
- Prior art keywords
- firmware
- embedded system
- decompressed
- attribute information
- compressed
- 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.)
- Pending
Links
- 238000003672 processing method Methods 0.000 title claims abstract description 24
- 230000006870 function Effects 0.000 claims abstract description 80
- 230000006837 decompression Effects 0.000 claims abstract description 61
- 230000006835 compression Effects 0.000 claims abstract description 53
- 238000007906 compression Methods 0.000 claims abstract description 53
- 238000000034 method Methods 0.000 claims abstract description 52
- 238000012545 processing Methods 0.000 claims abstract description 31
- 238000012795 verification Methods 0.000 claims description 23
- 238000004590 computer program Methods 0.000 claims description 3
- 230000008569 process Effects 0.000 abstract description 15
- 238000005192 partition Methods 0.000 description 19
- 238000011161 development Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 4
- 230000009286 beneficial effect Effects 0.000 description 3
- 238000004422 calculation algorithm Methods 0.000 description 3
- 238000004891 communication Methods 0.000 description 3
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 230000009191 jumping Effects 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 235000019800 disodium phosphate Nutrition 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000005406 washing Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/4401—Bootstrapping
- G06F9/4406—Loading of operating system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1004—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's to protect a block of data words, e.g. CRC or checksum
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computer Security & Cryptography (AREA)
- Quality & Reliability (AREA)
- Stored Programmes (AREA)
Abstract
本申请提供嵌入式系统固件处理方法、装置、设备及存储介质,涉及计算机技术领域。该方法包括:当嵌入式系统启动时,读取存储在嵌入式系统的闪存中固件的属性信息;根据固件的属性信息,确定固件的二进制文件是否为压缩文件;若是,则基于预设的解压缩函数对固件进行解压,并加载解压后的固件。本方案主要是将预先编译生成的固件压缩后存储到闪存Flash中,使得存储在闪存Flash中的固件采用压缩格式,提高了对闪存Flash的利用率,减少了固件存储时对闪存Flash资源的过多消耗;同时在嵌入式系统启动加载固件过程中,直接调用预设的解压缩函数对压缩后固件进行动态解压缩,提高对压缩后固件的解压处理速度,从而使得嵌入式系统能够快速且安全的启动。
Description
技术领域
本申请涉及计算机技术领域,具体而言,涉及一种嵌入式系统固件处理方法、装置、设备及存储介质。
背景技术
嵌入式系统(Embedded system)是由硬件和软件协同,能独立进行运行的专用计算机系统。其中,嵌入式系统中的各种系统功能由嵌入式固件控制,嵌入式固件包含引导加载程序、内核文件和文件系统,通常存储在闪存(Flash)中。
目前,大部分嵌入式系统包含多个功能模块,为了方便对嵌入式系统中各功能模块进行开发以及升级,主要是将嵌入式系统硬件中闪存Flash划分成多个分区,其中,每个分区中存放对应模块的固件,当嵌入式系统启动时,则加载各分区内存储的固件,以启动各分区相对应的功能模块。
但是,这种采取划分多个分区方式,使得每个分区所占内存大小与其对应模块的代码量相关,随着嵌入式系统开发量增大,导致嵌入式系统中包含的功能模块的代码量也增大,随之也必然增加各分区内存储的固件大小,从而增大闪存Flash的开销,继而限制嵌入式系统运行时对存储的需求。
发明内容
本申请的目的在于,针对上述现有技术中的不足,提供一种嵌入式系统固件处理方法、装置、设备及存储介质,以便减少固件存储时对闪存Flash资源的过多消耗。
为实现上述目的,本申请实施例采用的技术方案如下:
第一方面,本申请实施例提供了一种嵌入式系统固件处理方法,所述方法包括:
当嵌入式系统启动时,读取存储在所述嵌入式系统的闪存中的固件的属性信息;
根据所述固件的属性信息,确定所述固件的二进制文件是否为压缩文件;
若是,则基于预设的解压缩函数对所述固件进行解压,并加载解压后的固件。
可选地,所述基于预设的解压缩函数对固件进行解压,并加载解压后的固件之前,还包括:
将所述解压缩函数存储至所述嵌入式系统的第一启动模块中。
可选地,所述基于预设的解压缩函数对所述固件进行解压,并加载解压后的固件,包括:
配置所述解压缩函数的参数信息,其中,所述参数信息包括:读取函数、拷贝函数;
调用所述解压缩函数中读取函数,以预设长度字节为单位读取所述固件,并对所述固件进行解压,得到所述解压后的固件;
调用所述解压缩函数中拷贝函数,将所述解压后的固件拷贝到目标内存地址,以加载所述解压后的固件。
可选地,所述将所述解压后的固件拷贝到目标内存地址,以加载所述解压后的固件,包括:
将所述解压后的固件拷贝到目标内存地址,计算所述解压后的固件的校验值;
将所述解压后的固件的校验值与所述固件的属性信息中的校验值进行比对,若比对结果一致,则加载所述解压后的固件。
可选地,所述当嵌入式系统启动时,读取存储在所述嵌入式系统的闪存中的固件的属性信息之前,还包括:
生成所述固件的二进制文件;
调用预先编写的压缩脚本代码,对所述固件的二进制文件进行压缩处理,得到压缩后的所述固件;
生成所述固件的属性信息,所述属性信息包括:所述固件的版本信息、压缩前所述固件的二进制文件大小、压缩前所述固件的校验值、压缩后的所述固件的数据、以及压缩后的所述固件的压缩标识;
将压缩后的所述固件以及所述固件的属性信息存储至所述闪存中。
可选地,所述根据所述固件的属性信息,确定所述固件的二进制文件是否为压缩文件,包括:
读取所述固件的属性信息中预设位的字节信息;
根据所述预设位的字节信息,判断所述固件的二进制文件为压缩文件。
可选地,所述根据所述固件的属性信息,确定所述固件的二进制文件是否为压缩文件,包括:
若否,则按照预先定义的数据格式读取并解析所述固件,并将解析后的固件存储至目标内存地址。
第二方面,本申请实施例还提供了一种嵌入式系统固件处理装置,所述装置包括:
读取模块,用于当嵌入式系统启动时,读取存储在所述嵌入式系统的闪存中的固件的属性信息;
确定模块,用于根据所述固件的属性信息,确定所述固件的二进制文件是否为压缩文件;
处理模块,用于若是,则基于预设的解压缩函数对所述固件进行解压,并加载解压后的固件。
可选地,所述装置还包括:
存储模块,用于将所述解压缩函数存储至所述嵌入式系统的第一启动模块中。
可选地,所述处理模块,还用于:
配置所述解压缩函数的参数信息,其中,所述参数信息包括:读取函数、拷贝函数;
调用所述解压缩函数中读取函数,以预设长度字节为单位读取所述固件,并对所述固件进行解压,得到所述解压后的固件;
调用所述解压缩函数中拷贝函数,将所述解压后的固件拷贝到目标内存地址,以加载所述解压后的固件。
可选地,所述处理模块,还用于:
将所述解压后的固件拷贝到目标内存地址,计算所述解压后的固件的校验值;
将所述解压后的固件的校验值与所述固件的属性信息中的校验值进行比对,若比对结果一致,则加载所述解压后的固件。
可选地,所述装置还包括:
生成模块,用于生成所述固件的二进制文件;
压缩模块,用于调用预先编写的压缩脚本代码,对所述固件的二进制文件进行压缩处理,得到压缩后的所述固件;
所述生成模块,还用于生成所述固件的属性信息,所述属性信息包括:所述固件的版本信息、压缩前所述固件的二进制文件大小、压缩前所述固件的校验值、压缩后的所述固件的数据、以及压缩后的所述固件的压缩标识;
所述存储模块,还用于将压缩后的所述固件以及所述固件的属性信息存储至所述闪存中。
可选地,所述确定模块,还用于:
读取所述固件的属性信息中预设位的字节信息;
根据所述预设位的字节信息,判断所述固件的二进制文件为压缩文件。
可选地,所述确定模块,还用于:
若否,则按照预先定义的数据格式读取并解析所述固件,并将解析后的固件存储至目标内存地址。
第三方面,本申请实施例还提供了一种电子设备,包括:处理器、存储介质和总线,所述存储介质存储有所述处理器可执行的机器可读指令,当处理单元设备运行时,所述处理器与所述存储介质之间通过总线通信,所述处理器执行所述机器可读指令,以执行如第一方面提供的所述方法的步骤。
第四方面,本申请实施例还提供了一种计算机可读存储介质,所述存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行如第一方面提供的所述方法的步骤。
本申请的有益效果是:
本申请实施例提供一种嵌入式系统固件处理方法、装置、设备及存储介质,该方法包括:当嵌入式系统启动时,读取存储在嵌入式系统的闪存中的固件的属性信息;根据固件的属性信息,确定固件的二进制文件是否为压缩文件;若是,则基于预设的解压缩函数对固件进行解压,并加载解压后的固件。在本方案中,主要是将预先编译生成的固件压缩后存储到闪存Flash中,使得存储在闪存Flash中的固件采用压缩格式,提高了对闪存Flash的利用率,从而极大地减少了固件存储时对闪存Flash资源的过多消耗;同时在嵌入式系统启动加载固件过程中,通过直接调用预设的解压缩函数对压缩后固件进行动态解压缩,以提高对压缩后固件的解压处理速度,从而使得嵌入式系统能够快速且安全的启动。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本申请实施例提供的一种电子设备的结构示意图;
图2为本申请实施例提供的一种嵌入式系统固件处理方法的流程示意图;
图3为本申请实施例提供的另一种嵌入式系统固件处理方法的流程示意图;
图4为本申请实施例提供的又一种嵌入式系统固件处理方法的流程示意图;
图5为本申请实施例提供的另一种嵌入式系统固件处理方法的流程示意图;
图6为本申请实施例提供的又一种嵌入式系统固件处理方法的流程示意图;
图7为本申请实施例提供的一种嵌入式系统固件处理方法的整体流程示意图;
图8为本申请实施例提供的一种嵌入式系统固件处理装置的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,应当理解,本申请中附图仅起到说明和描述的目的,并不用于限定本申请的保护范围。另外,应当理解,示意性的附图并未按实物比例绘制。本申请中使用的流程图示出了根据本申请的一些实施例实现的操作。应该理解,流程图的操作可以不按顺序实现,没有逻辑的上下文关系的步骤可以反转顺序或者同时实施。此外,本领域技术人员在本申请内容的指引下,可以向流程图添加一个或多个其他操作,也可以从流程图中移除一个或多个操作。
另外,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
需要说明的是,本申请实施例中将会用到术语“包括”,用于指出其后所声明的特征的存在,但并不排除增加其它的特征。
首先,对本申请实施例涉及的一些术语进行介绍:
嵌入式操作系统(embedded operation system,简称EOS):是一种完全嵌入受控器件内部,为特定应用而设计的专用计算机系统,主要应用于工业控制领域。
固件(firmware):指设备内部保存的写入可擦写只读存储器或电可擦可编程只读存储器中的驱动程序,通过固件,嵌入式系统才能按照标准的设备驱动实现特定机器的运行动作。
通常,嵌入式操作系统中包含多个功能模块,各功能模块的固件中包含有引导加载程序、内核文件和文件系统等驱动程序,且不同功能模块的固件分别存储在闪存Flash中不同的分区中。在嵌入式操作系统启动过程中,可以将各功能模块的固件从闪存Flash中加载至为各功能模块分配的运行内存地址空间,来启动嵌入式操作系统中包含的各功能模块。
例如,嵌入式操作系统中包含功能模块1、功能模块2,功能模块1的固件为ap.bin,功能模块2的固件为codec.bin,功能模块1的固件为ap.bin存储在闪存Flash中的分区1,功能模块2的固件为codec.bin存储在闪存Flash中的分区2。在嵌入式操作系统启动过程中,将功能模块1的固件ap.bin从闪存Flash中分区1加载至内存地址空间1,其中,内存地址空间1是为功能模块1分配的运行内存地址空间;同理,将功能模块2的固件codec.bin从闪存Flash中分区2加载至内存地址空间2,其中,内存地址空间2是为功能模块2分配的运行内存地址空间;以实现对嵌入式操作系统中功能模块1与功能模块2的启动。
其次,在对本申请所提供的技术方案展开具体说明之前,先对本申请所涉及的相关背景进行简单说明。
目前,大部分嵌入式系统包含多个功能模块,为了方便对嵌入式系统中各功能模块进行开发以及升级,主要是将嵌入式系统硬件中闪存Flash划分成多个分区,其中,每个分区中存放对应模块的固件,当嵌入式系统启动时,则加载各分区内存储的固件,以启动各分区相对应的功能模块。
但是,这种采取划分多个分区方式,使得每个分区所占内存大小与其对应模块的代码量相关,随着嵌入式系统开发量增大,导致嵌入式系统中包含的功能模块的代码量也增大,随之也必然增加各分区内存储的固件大小,从而增大闪存Flash的开销,继而限制嵌入式系统运行时对存储的需求。
为了解决上述现有技术中存在的技术问题,本申请提出一种嵌入式系统固件处理方法,主要是将预先编译生成的固件压缩后存储到闪存Flash中,在嵌入式系统启动过程中,根据固件的属性信息,判断固件的二进制文件是否为压缩文件;若是,则直接调用预设的解压缩函数对固件进行动态解压缩处理,并加载解压后的固件,直至所有需加载的固件都被加载完毕,实现嵌入式系统的快速开机。在本方案中,主要是将预先编译生成的固件压缩后存储到闪存Flash中,使得存储在闪存Flash中的固件采用压缩格式,提高了闪存Flash的利用率,从而极大地减少了固件存储时对闪存Flash资源的过多消耗;同时在嵌入式系统启动加载固件过程中,通过直接调用预设的解压缩函数对压缩后固件进行动态解压缩,以提高对压缩后固件的解压处理速度,从而使得嵌入式系统能够快速且安全的启动。
将通过如下实施例对本申请提供的嵌入式系统固件处理方法的执行主体的结构进行简单说明。
图1为本申请实施例提供的一种电子设备的结构示意图;该电子设备如可以为设置有嵌入式系统的电子产品(例如,智能音箱、路由器、密码锁、冰箱、空调和洗衣机等),以用于实现本申请提供的嵌入式系统固件处理方法。
如图1所示,电子设备包括存储器101、处理器102。其中存储器101、处理器102相互之间直接或间接地电性连接,以实现数据的传输或交互。例如,这些元件相互之间可通过一条或多条通讯总线或信号线实现电性连接。
存储器101中存储有以软件或固件(firmware)的形式存储于存储器101中的软件功能模块,处理器102通过运行存储在存储器101内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现本申请实施例中的嵌入式系统固件处理方法。
其中,存储器101可以是,但不限于,随机存取存储器(Random Access Memory,RAM)、只读存储器(Read Only Memory,ROM)、可编程只读存储器(Programmable Read-OnlyMemory,PROM)、可擦除只读存储器(Erasable Programmable Read-Only Memory,EPROM)等。其中,存储器101用于存储程序,处理器102在接收到执行指令后,执行所述程序。
处理器102可能是一种集成电路芯片,具有信号的处理能力。上述的处理器102可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(NetworkProcessor,NP)等。
可以理解,图1所示的结构仅为示意,电子设备还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。图1中所示的各组件可以采用硬件、软件或其组合实现。
如下将通过多个具体的实施例对本申请所提供的嵌入式系统固件处理方法步骤的实现原理和对应产生的有益效果进行说明。
图2为本申请实施例提供的一种嵌入式系统固件处理方法的流程示意图;可选地,该方法的执行主体可以是所示图1的电子设备中的处理器。
应当理解,在其它实施例中嵌入式系统固件处理方法其中部分步骤的顺序可以根据实际需要相互交换,或者其中的部分步骤也可以省略或删除。如图1所示,该方法包括:
S201、当嵌入式系统启动时,读取存储在嵌入式系统的闪存中的固件的属性信息。
其中,固件的属性信息也可以称为固件的头部信息,即header信息。例如,固件的属性信息中可以包括:版本信息、压缩前固件的二进制文件大小、压缩前固件的校验值、压缩后的固件的压缩标识等。其中,版本信息占7个字节,压缩前固件的二进制文件大小占4个字节,压缩前固件的校验值占4个字节,压缩后的固件的压缩标识占2个字节。
值得注意的是,在嵌入式系统的闪存Flash中存储某个模块的固件时,需要将固件的属性信息、以及压缩后的固件(或固件的二进制文件)一同存储至闪存Flash中。
在本实施例中,在嵌入式系统启动或运行过程中,当需要加载某个模块的固件时,则从嵌入式系统的闪存Flash中的读取该模块的固件的属性信息,例如,可以先默认读取固件的属性信息中17个字节,以便于根据读取到的字节信息,快速地判断出该固件的二进制文件是否为压缩文件。
S202、根据固件的属性信息,确定固件的二进制文件是否为压缩文件。
应理解,固件的二进制文件可以压缩文件的形式存储至闪存Flash中,也可直接以编译生成的二进制文件存储至闪存Flash中。
例如,采用标准压缩格式的固件的属性信息中包含0x1f8b标识,利用这个标识可以区分固件的二进制文件是压缩的还是非压缩的。
在本实施例中,为了提高对固件加载的准确性和效率,需要先根据固件的属性信息,确定固件的二进制文件是否为压缩文件,以确定是否需要对固件执行动态解压处理。
S203、若是,则基于预设的解压缩函数对固件进行解压,并加载解压后的固件。
示例性地,例如,预设的解压缩函数可以为uzlib。
在本实施例中,若固件的二进制文件为压缩文件,则可以通过调用解压缩函数uzlib,来对压缩后的固件进行解压处理,得到解压后的固件,然后对解压后的固件加载,直至所有需加载的固件都被加载完毕,实现嵌入式系统的快速开机。
综上所述,本申请实施例提供一种嵌入式系统固件处理方法,该方法包括:当嵌入式系统启动时,读取存储在嵌入式系统的闪存中的固件的属性信息;根据固件的属性信息,确定固件的二进制文件是否为压缩文件;若是,则基于预设的解压缩函数对固件进行解压,并加载解压后的固件。在本方案中,主要是将预先编译生成的固件压缩后存储到闪存Flash中,使得存储在闪存Flash中的固件采用压缩格式,提高了对闪存Flash的利用率,从而极大地减少了固件存储时对闪存Flash资源的过多消耗;同时在嵌入式系统启动加载固件过程中,通过直接调用预设的解压缩函数对压缩后固件进行动态解压缩,以提高对压缩后固件的解压处理速度,从而使得嵌入式系统能够快速且安全的启动。
可选地,在上述步骤S203中基于预设的解压缩函数对固件进行解压,并加载解压后的固件之前,还包括:
将解压缩函数存储至嵌入式系统的第一启动模块中。
示例性地,嵌入式系统的第一启动模块也称为firstboot模块。
在本实施例中,例如,为了提高对固件的解压效率,提出在嵌入式系统启动之前,可以先从资源共享平台github上下载解压缩函数uzlib,然后,再将解压缩函数uzlib存储至嵌入式系统的第一启动模块中,以便于在需要对固件进行解压处理时,直接从第一启动模块中调用预先存储的解压缩函数。
将通过如下实施例,具体讲解上述步骤S203中如何基于预设的解压缩函数对固件进行解压,并加载解压后的固件。
可选地,参考图3所示,上述步骤S203包括:
S301、配置解压缩函数的参数信息。
其中,解压缩函数的参数信息包括:读取函数、拷贝函数。此外,解压缩函数的参数信息还可以包括:待解压数据所占内存大小、解压后固件的校验值。
例如,采用冗余校验码算法(Cyclic Redundancy Check 32,简称CRC32)计算得到解压后固件的校验值CRC32。
需要说明的是,可以根据“待解压数据所占内存大小”这一参数,确定对固件进行解压缩的过程何时结束;以及,可以根据解压缩后固件的校验值CRC32,对解压缩后固件进行校验,以便于及时发现解压缩后的数据与压缩前的数据不一致的情况。
示例性地,例如,读取函数记作flash_read_callback(),拷贝函数记作post_process_callback(),待解压数据所占内存大小记作img_size。
在本实施例中,在对每一个模块的压缩后固件的加载过程中,均需要执行一次配置解压缩函数的参数信息的操作。
S302、调用解压缩函数中读取函数,以预设长度字节为单位读取固件,并对固件进行解压,得到解压后的固件。
示例性地,例如,预设长度字节可以为区块Block(512字节),即以512字节为单位从闪存Flash中读取固件。
在本实施例中,调用解压缩函数中读取函数flash_read_callback(),以512字节为单位从闪存Flash中读取依次固件中包含的数据,并对读取到的单位字节长度的数据进行解压处理,直至读取并解压完固件中包含的所有的数据,并将解压后的固件存储至临时缓存区buffer。
S303、调用解压缩函数中拷贝函数,将解压后的固件拷贝到目标内存地址,以加载解压后的固件。
其中,目标内存地址为设计嵌入式系统之初,为每个功能模块分配的运行内存地址空间。其中,目标内存地址也可以为存储在固件的属性信息中,可以根据固件的属性信息,确定解压后的固件待拷贝的目标内存地址。
在本实施例中,调用解压缩函数中拷贝函数post_process_callback()将临时缓存区buffer存储的解压后的固件拷贝到固件所属模块的运行内存地址空间,以实现对解压后的固件的加载需求。
将通过如下实施例,具体讲解上述步骤S303中如何将解压后的固件拷贝到目标内存地址,以加载解压后的固件。
可选地,参考图4所示,上述步骤S303包括:
S401、将解压后的固件拷贝到目标内存地址,计算解压后的固件的校验值。
S402、将解压后的固件的校验值与固件的属性信息中的校验值进行比对,若比对结果一致,则加载解压后的固件。
应理解,为了检查解压后的固件是否与压缩前的固件一致,因此,在将解压后的固件拷贝到目标内存地址后,还需要计算解压后的固件的校验值。
其中,固件的属性信息中的校验值为压缩前的固件的校验值。
需要说的是,在本实施例中,解压后的固件的校验值与固件的属性信息中的校验值是采用相同校验算法计算得到的。
在一种可实现的方式中,例如,为了便于准确地检查解压后的固件与压缩前的固件是否一致,可以采用相同的校验算法,分别计算得到解压后的校验值、压缩前固件的校验值,并将解压后的固件的校验值与压缩前固件的校验值进行比对,若两者比对结果一致,则可以确定解压后的固件与压缩前的固件一致,并加载解压后的固件。
在本实施例中,为了提高检查效率,主要是将解压后的固件的校验值与固件的属性信息中的校验值进行比对,若两者比对结果一致,则可以确定解压后的固件与压缩前的固件一致,并加载解压后的固件。
将通过如下实施例,具体讲解如何得到压缩后的固件。
可选地,参考图5所示,在上述步骤S201之前,该方法还包括:
S501、生成固件的二进制文件。
通常,在嵌入式系统的编译过程中,需要生成每个模块的固件的二进制文件,其中,固件的二进制文件中包括引导加载程序、内核文件和文件系统等。
S502、调用预先编写的压缩脚本代码,对固件的二进制文件进行压缩处理,得到压缩后的固件。
S503、生成固件的属性信息。
其中,固件的属性信息包括:版本信息、压缩前固件的二进制文件大小、压缩前固件的校验值、压缩后的固件的数据、以及压缩后的固件的压缩标识。
在本实例中,为了提高对固件的加载效率,还需要生成固件的属性信息,以便于将固件的属性信息添加至压缩后的固件的头部。
S504、将压缩后的固件以及固件的属性信息存储至闪存中。
在本实施例中,主要是调用预先编写的压缩脚本代码,来运行gizp命令直接对固件的二进制文件binary进行压缩处理,得到压缩后的固件,同时并为压缩后的固件的头部添加固件的属性信息,然后,再将压缩后的固件以及固件的属性信息存储至闪存中,用于嵌入式系统加载过程中的参考。
将通过如下实施例,具体讲解上述步骤S202中如何根据固件的属性信息,确定固件的二进制文件是否为压缩文件。
可选地,参考图6所示,上述步骤S202包括:
S601、读取固件的属性信息中预设位的字节信息。
S602、根据预设位的字节信息,判断固件的二进制文件是否为压缩文件。
例如,固件的属性信息共占20个字节,其中,第16位的字节信息和第17位的字节信息用于存储固件的压缩标识,可以根据第16位的字节信息和第17位的字节信息判断固件是压缩还是非压缩。
在本实施例中,例如,读取到第16位的字节信息为header[0015]=0x1f,读取到第17位的字节信息为header[0016]=0x8b。一般,标准gzip格式头部信息有0x1f8b标识,则可以根据读取到的header[0015]=0x1f与header[0016]=0x8b,可以判断固件的二进制文件为压缩文件,即在对固件加载过程中,还需要对压缩后的固件进行解压缩处理。
可选地,上述步骤S202中根据固件的属性信息,确定固件的二进制文件是否为压缩文件,包括:
若否,则按照预先定义的数据格式读取并解析固件,并将解析后的固件存储至目标内存地址。
示例性地,预先定义的数据格式可以为可执行文件格式(Executable andLinking Format,简称ELF)格式。其中,ELF格式是一种用于二进制文件、可执行文件、目标代码、共享库和核心转储格式文件的文件格式。
在本实施例中,若固件的二进制文件为非压缩文件,则可以采用按照ELF格式读取固件并解析,将固件中包含的数据一次性读取出来放到目标内存地址空间。
将通过如下实施例具体讲解本申请提供的嵌入式系统固件处理方法的整体步骤过程。
图7为本申请实施例提供的一种嵌入式系统固件处理方法的整体流程示意图;如图7所示,可选地,该方法包括:
S701、当嵌入式系统启动时,读取存储在嵌入式系统的闪存中的固件的属性信息。
S702、根据固件的属性信息中预设位的字节信息,判断固件的二进制文件是否为压缩文件,若是,则跳转至步骤S703;若是,则跳转至步骤S706;
S703、配置解压缩函数的参数信息。
S704、调用解压缩函数中读取函数,以预设长度字节为单位读取固件,并对固件进行解压,得到解压后的固件;以及,调用解压缩函数中拷贝函数,将解压后的固件拷贝到目标内存地址,计算解压后的固件的校验值。
S705、将解压后的固件的校验值与固件的属性信息中的校验值进行比对,若比对结果一致,则加载解压后的固件。
S706、按照ELF格式读取固件并解析,将固件中包含的数据一次性读取出来放到目标内存地址空间。
可选地,本申请实施例提供的嵌入式系统固件处理方法的整体实现步骤以及产生的有益效果已在前面具体实施例中进行了详细说明,此处不再一一赘述。
基于同一发明构思,本申请实施例中还提供了与嵌入式系统固件处理方法对应的嵌入式系统固件处理装置,由于本申请实施例中的装置解决问题的原理与本申请实施例上述嵌入式系统固件处理方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
可选地,如图8所示,本申请实施例还提供了一种嵌入式系统固件处理装置,该装置包括:
读取模块801,用于当嵌入式系统启动时,读取存储在嵌入式系统的闪存中的固件的属性信息;
确定模块802,用于根据固件的属性信息,确定固件的二进制文件是否为压缩文件;
处理模块803,用于若是,则基于预设的解压缩函数对固件进行解压,并加载解压后的固件。
可选地,该装置还包括:
存储模块,用于将解压缩函数存储至嵌入式系统的第一启动模块中。
可选地,处理模块803,还用于:
配置解压缩函数的参数信息,其中,参数信息包括:读取函数、拷贝函数;
调用解压缩函数中读取函数,以预设长度字节为单位读取固件,并对固件进行解压,得到解压后的固件;
调用解压缩函数中拷贝函数,将解压后的固件拷贝到目标内存地址,以加载解压后的固件。
可选地,处理模块803,还用于:
将解压后的固件拷贝到目标内存地址,计算解压后的固件的校验值;
将解压后的固件的校验值与固件的属性信息中的校验值进行比对,若比对结果一致,则加载解压后的固件。
可选地,该装置还包括:
生成模块,用于生成固件的二进制文件;
压缩模块,用于调用预先编写的压缩脚本代码,对固件的二进制文件进行压缩处理,得到压缩后的固件;
生成模块,还用于生成固件的属性信息,属性信息包括:固件的版本信息、压缩前固件的二进制文件大小、压缩前固件的校验值、压缩后的固件的数据、以及压缩后的固件的压缩标识;
存储模块,还用于将压缩后的固件以及固件的属性信息存储至闪存中。
可选地,确定模块802,还用于:
读取固件的属性信息中预设位的字节信息;
根据预设位的字节信息,判断固件的二进制文件为压缩文件。
可选地,确定模块802,还用于:
若否,则按照预先定义的数据格式读取并解析固件,并将解析后的固件存储至目标内存地址。
上述装置用于执行前述实施例提供的方法,其实现原理和技术效果类似,在此不再赘述。
以上这些模块可以是被配置成实施以上方法的一个或多个集成电路,例如:一个或多个特定集成电路(Application Specific Integrated Circuit,简称ASIC),或,一个或多个微处理器(digital singnal processor,简称DSP),或,一个或者多个现场可编程门阵列(Field Programmable Gate Array,简称FPGA)等。再如,当以上某个模块通过处理元件调度程序代码的形式实现时,该处理元件可以是通用处理器,例如中央处理器(CentralProcessing Unit,简称CPU)或其它可以调用程序代码的处理器。再如,这些模块可以集成在一起,以片上系统(system-on-a-chip,简称SOC)的形式实现。
可选地,本申请还提供一种程序产品,例如计算机可读存储介质,包括程序,该程序在被处理器执行时用于执行上述方法实施例。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(英文:processor)执行本申请各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(英文:Read-Only Memory,简称:ROM)、随机存取存储器(英文:Random Access Memory,简称:RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
Claims (10)
1.一种嵌入式系统固件处理方法,其特征在于,所述方法包括:
当嵌入式系统启动时,读取存储在所述嵌入式系统的闪存中的固件的属性信息;
根据所述固件的属性信息,确定所述固件的二进制文件是否为压缩文件;
若是,则基于预设的解压缩函数对所述固件进行解压,并加载解压后的固件。
2.根据权利要求1所述的方法,其特征在于,所述基于预设的解压缩函数对固件进行解压,并加载解压后的固件之前,还包括:
将所述解压缩函数存储至所述嵌入式系统的第一启动模块中。
3.根据权利要求2所述的方法,其特征在于,所述基于预设的解压缩函数对所述固件进行解压,并加载解压后的固件,包括:
配置所述解压缩函数的参数信息,其中,所述参数信息包括:读取函数、拷贝函数;
调用所述解压缩函数中读取函数,以预设长度字节为单位读取所述固件,并对所述固件进行解压,得到所述解压后的固件;
调用所述解压缩函数中拷贝函数,将所述解压后的固件拷贝到目标内存地址,以加载所述解压后的固件。
4.根据权利要求3所述的方法,其特征在于,所述将所述解压后的固件拷贝到目标内存地址,以加载所述解压后的固件,包括:
将所述解压后的固件拷贝到目标内存地址,计算所述解压后的固件的校验值;
将所述解压后的固件的校验值与所述固件的属性信息中的校验值进行比对,若比对结果一致,则加载所述解压后的固件。
5.根据权利要求1所述的方法,其特征在于,所述当嵌入式系统启动时,读取存储在所述嵌入式系统的闪存中的固件的属性信息之前,还包括:
生成所述固件的二进制文件;
调用预先编写的压缩脚本代码,对所述固件的二进制文件进行压缩处理,得到压缩后的所述固件;
生成所述固件的属性信息,所述属性信息包括:所述固件的版本信息、压缩前所述固件的二进制文件大小、压缩前所述固件的校验值、压缩后的所述固件的数据、以及压缩后的所述固件的压缩标识;
将压缩后的所述固件以及所述固件的属性信息存储至所述闪存中。
6.根据权利要求5所述的方法,其特征在于,所述根据所述固件的属性信息,确定所述固件的二进制文件是否为压缩文件,包括:
读取所述固件的属性信息中预设位的字节信息;
根据所述预设位的字节信息,判断所述固件的二进制文件为压缩文件。
7.根据权利要求1-6任一项所述的方法,其特征在于,所述根据所述固件的属性信息,确定所述固件的二进制文件是否为压缩文件,包括:
若否,则按照预先定义的数据格式读取并解析所述固件,并将解析后的固件存储至目标内存地址。
8.一种嵌入式系统固件处理装置,其特征在于,所述装置包括:
读取模块,用于当嵌入式系统启动时,读取存储在所述嵌入式系统的闪存中的固件的属性信息;
确定模块,用于根据所述固件的属性信息,确定所述固件的二进制文件是否为压缩文件;
处理模块,用于若是,则基于预设的解压缩函数对所述固件进行解压,并加载解压后的固件。
9.一种电子设备,其特征在于,包括:处理器、存储介质和总线,所述存储介质存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器与所述存储介质之间通过总线通信,所述处理器执行所述机器可读指令,以执行如权利要求1-7任一项提供的所述方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行如权利要求1-7任一项提供的所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210695007.4A CN114942794A (zh) | 2022-06-20 | 2022-06-20 | 嵌入式系统固件处理方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210695007.4A CN114942794A (zh) | 2022-06-20 | 2022-06-20 | 嵌入式系统固件处理方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114942794A true CN114942794A (zh) | 2022-08-26 |
Family
ID=82910364
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210695007.4A Pending CN114942794A (zh) | 2022-06-20 | 2022-06-20 | 嵌入式系统固件处理方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114942794A (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040030877A1 (en) * | 2002-08-06 | 2004-02-12 | Aleksandr Frid | Using system BIOS to update embedded controller firmware |
CN109388618A (zh) * | 2018-10-15 | 2019-02-26 | 深圳市太山科技有限公司 | 嵌入式系统文件压缩、解压及加密、解密的方法及装置 |
CN109471642A (zh) * | 2018-11-15 | 2019-03-15 | 北京行易道科技有限公司 | 固件生成存储方法及装置、固件启动方法及装置 |
CN111880846A (zh) * | 2020-06-04 | 2020-11-03 | 普联国际有限公司 | 嵌入式系统快速启动方法、装置及设备 |
CN113225397A (zh) * | 2021-05-06 | 2021-08-06 | 深圳沃迪声科技股份有限公司 | 嵌入式设备的固件升级方法、装置、终端及存储介质 |
-
2022
- 2022-06-20 CN CN202210695007.4A patent/CN114942794A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040030877A1 (en) * | 2002-08-06 | 2004-02-12 | Aleksandr Frid | Using system BIOS to update embedded controller firmware |
CN109388618A (zh) * | 2018-10-15 | 2019-02-26 | 深圳市太山科技有限公司 | 嵌入式系统文件压缩、解压及加密、解密的方法及装置 |
CN109471642A (zh) * | 2018-11-15 | 2019-03-15 | 北京行易道科技有限公司 | 固件生成存储方法及装置、固件启动方法及装置 |
CN111880846A (zh) * | 2020-06-04 | 2020-11-03 | 普联国际有限公司 | 嵌入式系统快速启动方法、装置及设备 |
CN113225397A (zh) * | 2021-05-06 | 2021-08-06 | 深圳沃迪声科技股份有限公司 | 嵌入式设备的固件升级方法、装置、终端及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109582653B (zh) | 文件的压缩、解压缩方法及设备 | |
EP3518100B1 (en) | Quick loading method for kernel image file, and apparatus | |
KR101467515B1 (ko) | 스냅샷 이미지를 이용한 부팅 장치 및 방법 | |
EP1749266B1 (en) | System and method to conditionally shrink an executable module | |
KR20080023191A (ko) | 퓨전메모리 장치 및 방법 | |
JP2007535241A5 (zh) | ||
CN111857840A (zh) | 基本输入输出系统bios启动方法及装置 | |
CN113504918A (zh) | 设备树配置优化方法、装置、计算机设备和存储介质 | |
CN114780128A (zh) | 嵌入式设备固件更新方法、嵌入式设备及开发端设备 | |
CN112732321A (zh) | 一种固件修改方法、装置、计算机可读存储介质和设备 | |
CN109298891B (zh) | 系统启动方法和装置、系统编译方法和装置 | |
CN114253619A (zh) | SSD多级Boot的方法、装置、计算机设备及存储介质 | |
US10970206B2 (en) | Flash data compression decompression method and apparatus | |
CN113396391B (zh) | 应用程序启动的方法、装置、电子设备及存储介质 | |
CN117313166A (zh) | 一种数据填充方法、装置、计算机设备及存储介质 | |
CN114942794A (zh) | 嵌入式系统固件处理方法、装置、设备及存储介质 | |
CN116560621A (zh) | 基板管理控制器芯片适配方法、系统、设备和介质 | |
CN113626092A (zh) | 嵌入式系统启动方法与soc芯片 | |
CN105701162B (zh) | 一种智能终端的用户数据分区的管理方法及智能终端 | |
CN113641643A (zh) | 文件写入方法及装置 | |
CN113703855B (zh) | 随机偏移值的储存方法和装置 | |
JP2018185615A (ja) | 電子機器、方法、及びプログラム | |
CN114579198B (zh) | 内存芯片的启动方法、装置、计算机设备及存储介质 | |
CN118331640A (zh) | 一种指令压缩方法、装置及电子设备 | |
CN114003309A (zh) | 一种基于微处理器的软件模块加载方法及装置 |
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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20220826 |