CN114003257A - 一种升级方法及装置 - Google Patents
一种升级方法及装置 Download PDFInfo
- Publication number
- CN114003257A CN114003257A CN202111274832.9A CN202111274832A CN114003257A CN 114003257 A CN114003257 A CN 114003257A CN 202111274832 A CN202111274832 A CN 202111274832A CN 114003257 A CN114003257 A CN 114003257A
- Authority
- CN
- China
- Prior art keywords
- module
- upgrading
- upgraded
- upgrade
- interface function
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
Abstract
本申请提供一种升级方法及装置,分别利用第一模块和第二模块的升级方法,对预设结构体中的接口函数进行初始化处理,得到第一模块的第一结构体和第二模块的第二结构体,预设结构体对应升级流程,接口函数指向升级流程的一个环节,第一模块和第二模块是电子设备中功能不同的两个模块;对第一模块和第二模块中任一待升级模块,如果接收到待升级模块的升级指令,调用待升级模块对应的结构体;按照升级流程运行待升级模块对应的结构体中的接口函数,以完成对待升级模块的升级。
Description
技术领域
本申请属于固件升级技术领域,尤其涉及一种升级方法及装置。
背景技术
目前电子设备中功能不同的模块的升级流程存在差异;例如电子设备包括BIOS(Basic Input Output System,基本输入输出系统)、PSU(电源模块)、CPLD(ComplexProgrammable Logic Device,复杂可编程逻辑器件)、FPGA(Field Programmable GateArray,现场可编程逻辑门阵列)等模块,BIOS升级可通过AMI方案中的固件升级进程完成,固件升级进程基于AMI的原始代码实现,PSU、CPLD和FPGA这三个模块通过调用各自相关的APP(Application,应用程序)进行升级,因不同模块升级方式不同,导致电子设备中各个模块的升级流程存在一定差异。
发明内容
本申请提供一种升级方法及装置。
一方面,本申请提供一种升级方法,所述方法包括:
分别利用第一模块和第二模块的升级方法,对预设结构体中的接口函数进行初始化处理,得到所述第一模块的第一结构体和所述第二模块的第二结构体,所述预设结构体对应升级流程,所述接口函数指向升级流程的一个环节,所述第一模块和所述第二模块是电子设备中功能不同的两个模块;
对所述第一模块和所述第二模块中任一待升级模块,如果接收到所述待升级模块的升级指令,调用所述待升级模块对应的结构体;
按照所述升级流程运行所述待升级模块对应的结构体中的接口函数,以完成对所述待升级模块的升级。
可选的,所述第一模块和第二模块提供统一的对外接口,每个对外接口分别指向升级方法中的一个环节,以通过所述对外接口访问升级方法对所述预设结构体中的接口函数进行赋值处理。
可选的,所述方法还包括:
获取电子设备的配置文件,所述配置文件用于指示对所述第一模块和所述第二模块进行升级;
如果所述配置文件指示对第三模块升级,且所述第三模块与所述第一模块相同,复用所述第一模块的第一结构体,以作为所述第三模块的第三结构体;
如果接收到所述第三模块的升级指令,调用所述第三模块的第三结构体;
按照所述升级流程运行所述第三模块的第三结构体中的接口函数,以完成对所述第三模块的升级。
可选的,所述方法还包括:
如果管理进程接收到所述待升级模块的升级指令,调用所述管理进程生成所述待升级模块的升级管理文件,所述升级管理文件至少用于指示所述待升级模块的升级环境;
调用所述管理进程向升级进程发送所述待升级模块的升级管理文件;
调用所述升级进程解析所述待升级模块的升级管理文件,以验证所述电子设备当前的运行环境是否与所述待升级模块的升级环境匹配;
所述如果接收到所述待升级模块的升级指令,调用所述待升级模块对应的结构体包括:如果所述电子设备当前的运行环境与所述待升级模块的升级环境匹配,调用所述待升级模块对应的结构体。
可选的,所述调用所述管理进程向升级进程发送所述待升级模块的升级管理文件包括:
调用所述管理进程创建所述待升级模块的升级任务,所述升级任务中携带有所述待升级模块的升级管理文件;
调用所述管理进程将所述待升级模块的升级任务写入到升级队列中;所述升级进程可从所述升级队列中读取到所述待升级模块的升级任务,以从所述待升级模块的升级任务中提取所述待升级模块的升级管理文件。
可选的,所述方法还包括:
在升级进程中的升级线程按照所述升级流程运行所述待升级模块对应的结构体中的接口函数,利用所述升级进程中的记录线程对所述待升级模块的升级状态进行记录;
利用所述升级进程中的上报线程对所述待升级模块的升级状态进行上报。
可选的,所述升级状态包括:待升级模块的模块标识、升级结果、当前升级操作和升级进度;所述升级结果以预设升级结果中的标识表示,所述当前升级操作和所述升级进度用于指示升级是否完成以及在没有完成时所处环节。
另一方面,本申请提供一种升级装置,所述装置包括:
初始化单元,用于分别利用第一模块和第二模块的升级方法,对预设结构体中的接口函数进行初始化处理,得到所述第一模块的第一结构体和所述第二模块的第二结构体,所述预设结构体对应升级流程,所述接口函数指向升级流程的一个环节,所述第一模块和所述第二模块是电子设备中功能不同的两个模块;
调用单元,用于对所述第一模块和所述第二模块中任一待升级模块,如果接收到所述待升级模块的升级指令,调用所述待升级模块对应的结构体;
运行单元,用于按照所述升级流程运行所述待升级模块对应的结构体中的接口函数,以完成对所述待升级模块的升级。
再一方面,本申请提供一种电子设备,所述电子设备包括:第一模块、第二模块、存储器和处理器;
所述存储器,用于存储预设结构体,所述预设结构体对应升级流程,所述接口函数指向升级流程的一个环节;
所述处理器,用于分别利用第一模块和第二模块的升级方法,对预设结构体中的接口函数进行初始化处理,得到所述第一模块的第一结构体和所述第二模块的第二结构体,所述第一模块和所述第二模块是电子设备中功能不同的两个模块;对所述第一模块和所述第二模块中任一待升级模块,如果接收到所述待升级模块的升级指令,调用所述待升级模块对应的结构体;按照所述升级流程运行所述待升级模块对应的结构体中的接口函数,以完成对所述待升级模块的升级。
再一方面,本申请提供一种存储介质,存储介质中存储有计算机程序代码,所述计算机程序代码被执行时实现上述升级方法。
上述升级方法及装置,分别利用第一模块和第二模块的升级方法,对预设结构体中的接口函数进行初始化处理,得到第一模块的第一结构体和第二模块的第二结构体,预设结构体对应升级流程,接口函数指向升级流程的一个环节,第一模块和第二模块是电子设备中功能不同的两个模块;对第一模块和第二模块中任一待升级模块,如果接收到待升级模块的升级指令,调用待升级模块对应的结构体;按照升级流程运行待升级模块对应的结构体中的接口函数,以完成对待升级模块的升级。
本申请为电子设备中的第一模块和第二模块提供一个共用的预设结构体,预设结构体指向了模块的升级流程,预设结构体中的接口函数指向升级流程的一个环节,在对第一模块或第二模块进行升级之前,可以利用各模块的升级方法对预设结构体进行赋值,得到每个模块各自的结构体,每个模块各自的结构体具备了与模块的升级方法相关的取值,从而通过运行模型的结构体完成对模型的升级。并且每个模块各自的结构体是通过对预设结构体赋值得到,使得不同模块的结构体除了参数取值不同,接口函数、接口函数的排序都是相同的,接口函数对应升级流程的一个环节,在接口函数和接口函数的排序相同的情况下,不同模块的结构体的升级流程也是相同的,实现不同模块的升级流程的统一。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种升级方法的流程图;
图2是本申请实施例提供的另一种升级方法的流程图;
图3是本申请实施例提供的再一种升级方法的流程图;
图4是本申请实施例提供的一种升级装置的结构示意图;
图5是本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
请参见图1,其示出了本申请实施例提供的一种升级方法的可选流程,可以包括以下步骤:
101、分别利用第一模块和第二模块的升级方法,对预设结构体中的接口函数进行初始化处理,得到第一模块的第一结构体和第二模块的第二结构体,预设结构体对应升级流程,接口函数指向升级流程的一个环节,第一模块和第二模块是电子设备中功能不同的两个模块。
在本实施例中,预设结构体包括多个接口函数,每个接口函数指向升级流程的一个环节,不同接口函数指向环节不同,由此通过预设结构体中的多个接口函数,指向电子设备中各模块共用的一个升级流程。其中预设结构体中的多个接口函数根据升级流程的环节而定,例如升级流程至少包括获取升级版本、升级准备、固件校验、固件烧录和升级结果输出这五个环节。升级流程是针对电子设备中的待升级模板而言,如第一模块和第二模块存在升级需求时第一模块和第二模块是电子设备中的待升级模块,针对待升级模块来说,升级流程中的上述五个环节的作用如下:
获取升级版本用于获取待升级模块的最新版本标识,如获取待升级模块的最新版本号;升级准备用于准备待升级模块升级时所需的升级环境,使电子设备的升级环境与所需的升级环境相符;固件校验用于对待升级模块进行校验,以验证是否符合预设指标,如验证其可靠性等;固件烧录用于烧录最新版本的待升级模块,如在嵌入式启动中可将最新版本的待升级模块下载到嵌入式的存储设备中,在电子设备下次启动时可从存储设备中调用最新版本的待升级模块;升级结果输出用于将输出待升级模块的升级结果,如升级失败还是升级成功等,升级结果输出还能够在升级过程中输出升级状态。
预设结构体可以根据上述五个环节设置五个接口函数,得到分别对应升级版本、升级准备、固件校验、固件烧录和升级结果输出的接口函数。在一些示例中,预设结构体的形式如下:
typedef struct
其中*GetFwVersion对应获取升级版本的环节,*DoUpdatePrepare对应升级准备的环节,*DoImageValidation对应固件校验的环节,*DoImageUpdate对应固件烧录的环节,*GetImageUpdateProgress对应升级结果输出的环节。此外升级流程还可以包括升级进度输出的环节,相对应的预设结构体包括与其对应的接口函数,如int(*GetImageUpdateProgress)(void)。
预设结构体是电子设备中所有模块共用的一个结构体,但是电子设备中不同模块存在一定差异,如不同模块的升级版本不同、不同模块的功能不同,那么在升级时获取的版本以及烧录的固件(待升级模块)也会不同,因此针对电子设备中的各模块,电子设备可以利用各模块的升级方法对预设结构体中的接口函数进行初始化处理,得到各模块的结构体。
以上述第一模块和第二模块为例,电子设备可以分别利用第一模块的升级方法和第二模块的升级方法对预设结构体中的接口函数进行初始化处理,得到第一模块的第一结构体和第二模块的第二结构体。因为第一模块的第一结构体和第二模块的第二结构体是通过对预设结构体中的接口函数进行初始化得到,第一结构体和第二结构体能够分别对应各自模块的升级需求,且第一结构体和第二结构体中的接口函数相同(功能相同但取值不同)、接口函数的排序也相同,从而在满足各自模块的升级需求时使不同模块的升级流程统一。
在本实施例中,电子设备可以分别利用第一模块的升级方法和第二模块的升级方法对预设结构体中的接口函数进行初始化处理的目的是:第一模块的第一结构体对应第一模块的升级方法,第二模块的第二结构体对应第二模块的升级方法,那么在运行各模块对应的结构体时意味着运行各模块的升级方法。基于这点本实施例中初始化的一种方式是,利用升级方法对预设结构体中的接口函数进行赋值处理,例如从升级方法中获取到typedef struct中各接口函数的参数相匹配的参数值,将参数值写入到对应接口函数中,完成初始化。
此外第一模块和第二模块可以提供统一的对外接口,每个对外接口分别指向升级方法中的一个环节,在对预设结构体中的接口函数进行初始化时,电子设备可以通过对外接口访问升级方法,对预设结构体中的接口函数进行赋值处理,例如通过对外接口访问升级方法的各环节,从升级方法的各环节中获取到typedef struct中各接口函数的参数相匹配的参数值。
在一些示例中,第一模块和第二模块提供的统一的对外接口可以与升级流程的环节相对应,例如对外接口包括:准备接口(Prepare)、校验接口(Validation)、烧录接口(Update)和状态接口(Progress)。准备接口对应升级准备,校验接口对应固件校验,烧录接口对应固件烧录,状态接口对应升级结果输出,利用这些接口访问模块升级的具体实现,模块升级的具体实现是模块升级的升级方法。
例如,电子设备包括BIOS、PSU、CPLD、PSoC(可编程化系统单芯片)和FPGA等模块,对这些模块电子设备可以分别设置准备接口(Prepare)、校验接口(Validation)、烧录接口(Update)和状态接口(Progress),利用每个模块各自的对外接口访问各模块升级的具体实现。
102、对第一模块和第二模块中任一待升级模块,如果接收到待升级模块的升级指令,调用待升级模块对应的结构体。
在一些示例中,电子设备可以在配置文件中指出待升级模块,例如电子设备可以在配置文件中写入第一模块和/或第二模块的模块标识,通过模块标识指示当前进行升级的模块,即待升级模块(也可以称为固件)。如果从配置文件中解析到一个模块标识,说明接收到模块标识指向的待升级模块的升级指令。
在一些示例中,电子设备可接收到其他设备发送的待升级模块的升级指令,如接收到模块厂商的服务器发送的待升级模块的升级指令,待升级模块的升级指令可以遵循HTTP(Hyper Text Transfer Protocol,超文本传输协议)封装得到,本实施例不进行限定。
103、按照升级流程运行待升级模块对应的结构体中的接口函数,以完成对待升级模块的升级。
升级流程可以指定待升级模块升级的各环节之间的先后顺序,如升级流程指定的先后顺序是获取升级版本、升级准备、固件校验、固件烧录和升级结果输出,在获取到升级版本且升级准备和校验完成后进行固件烧录以完成对待升级模块的升级。
待升级模块对应的结构体中的接口函数是对预设结构体中接口函数初始化得到,初始化时是利用待升级模块的升级方法(也可以称为模块升级的具体实现)进行赋值得到,使得待升级模块对应的结构体相当于是待升级模块升级的具体实现,由此按照升级流程运行待升级模块对应的结构体的接口函数,相当于按照升级流程运行待升级模块升级的具体实现,从而完成了待升级模块的升级。
在本实施例中,为电子设备中的第一模块和第二模块提供一个共用的预设结构体,预设结构体指向了模块的升级流程,预设结构体中的接口函数指向升级流程的一个环节,在对第一模块或第二模块进行升级之前,可以利用各模块的升级方法对预设结构体进行赋值,得到每个模块各自的结构体,每个模块各自的结构体具备了与模块的升级方法相关的取值,从而通过运行模型的结构体完成对模型的升级。并且每个模块各自的结构体是通过对预设结构体赋值得到,使得不同模块的结构体除了参数取值不同,接口函数、接口函数的排序都是相同的,接口函数对应升级流程的一个环节,在接口函数和接口函数的排序相同的情况下,不同模块的结构体的升级流程也是相同的,实现不同模块的升级流程的统一。
请参见图2,其示出了本申请实施例提供的另一种升级方法的可选流程,可以包括以下步骤:
201、分别利用第一模块和第二模块的升级方法,对预设结构体中的接口函数进行初始化处理,得到第一模块的第一结构体和第二模块的第二结构体,预设结构体对应升级流程,接口函数指向升级流程的一个环节,第一模块和第二模块是电子设备中功能不同的两个模块。
202、获取电子设备的配置文件,配置文件用于指示对第一模块和第二模块进行升级。
电子设备可以在配置文件中写入第一模块和/或第二模块的模块标识,通过模块标识指示当前进行升级的模块,即待升级模块。如果从配置文件中解析到一个模块标识,说明接收到模块标识指向的待升级模块的升级指令。
其中,电子设备中各模块的模块标识可记录在一个枚举数组,在指示模块升级时可以从枚举数组中查找到模块的模块标识,枚举数组和模块标识的示例如下:
203、如果配置文件指示对第三模块升级,且第三模块与第一模块相同,复用第一模块的第一结构体,以作为第三模块的第三结构体。
在本实施例中,第三模块和第一模块相同,说明第三模块和第一模块是两个升级方法和接口实现相同的模块,第三模块和第一模块对应的结构体也是相同的,在已经得到第一模块的第一结构体,可以直接复用第一模块的第一结构体,省去构建第三模块的第三结构体。
204、如果接收到第三模块的升级指令,调用第三模块的第三结构体。
205、按照升级流程运行第三模块的第三结构体中的接口函数,以完成对第三模块的升级。
在本实施例中,电子设备中的第三模块和第一模块相同时,可以复用与其相同模块的结构体,即复用第一模块的第一结构体,得到第三模块的第三结构体,从而省去编写第三模块的升级方法和对外接口的环节,也省去构建第三模块的第三结构体的环节,做到结构体的最大化复用。在升级方法和接口实现相同的情况下,电子设备可通过修改配置文件的方式,在配置文件中写入待升级模块的模块标识即可,例如电子设备中包括4个PSU,用户1可对4个PSU中的2个PSU升级(如PSU1和PSU2升级),用户2可以对PSU1升级,通过配置文件方式便于用户制定待升级模块,以实现个性化升级,且修改配置文件的方式可以省去修改升级源码的过程,进一步最大化复用。
请参见图3,其示出了本申请实施例提供的再一种升级方法的可选流程,可以包括以下步骤:
301、分别利用第一模块和第二模块的升级方法,对预设结构体中的接口函数进行初始化处理,得到第一模块的第一结构体和第二模块的第二结构体,预设结构体对应升级流程,接口函数指向升级流程的一个环节,第一模块和第二模块是电子设备中功能不同的两个模块。
302、对第一模块和第二模块中任一待升级模块,如果管理进程接收到待升级模块的升级指令,调用管理进程生成待升级模块的升级管理文件,升级管理文件至少用于指示待升级模块的升级环境。
在本实施例中,升级指令用于指示待升级模块具有升级需求,升级管理文件用于指示待升级模块的升级环境,在满足升级环境时触发待升级模块进行升级,也就是说在接收到升级指令时待升级模块可以处于升级等待中,在满足升级环境时待升级模块开始进行升级。
其中,升级环境可以指示待升级模块的升级时机、升级时电子设备的状态,此外升级环境还可以指示路径和升级后模块配置情况。升级管理文件可以是JSON(JavaScriptObject Notation)格式封装的TASK文件,TASK文件中记录待升级模块的升级环境,如下示出一种升级环境的示例:
FilePath为待升级模块的升级路径,升级进程可以根据该路径加载待升级模块的内容;ProgressFile为升级进度显示文件,指定升级进度信息写入到升级进度显示文件中;UpgradeHostOff为升级时电子设备的状态,表示待升级模块的升级是否在系统关机状态下进行;UpgradeNow为升级时机,表示待升级模块的升级是否立即执行;PreserveConfig为,表示升级时是否包括当前模块的配置。
303、调用管理进程向升级进程发送待升级模块的升级管理文件。
如果管理进程和升级进程采用不同语言编写,例如管理进程采用C语言编写,升级进程采用LUA语言编写,不同语言编写出的进程之间的便捷性和友好性降低,因此增加了两个进程以通信消息来传递升级环境时的复杂度,从而使得进程间消息传递带来的繁琐。
针对这一问题,在本实施例中,管理进程和升级进程之间以文件形式进行交互,不同编程语言下文件的解析难度小于消息的解析难度,因此进程之间以文件形式交互,一方面避免进程间通信消息传递带来的繁琐过程,另一方面,管理进程按照JSON格式封装出升级管理文件,升级进程同样按照JSON格式解析升级管理文件即可。
304、调用升级进程解析待升级模块的升级管理文件,以验证电子设备当前的运行环境是否与待升级模块的升级环境匹配。
升级进程通过解析升级管理文件,得到升级管理文件中记录的与升级环境相关的环境参数,然后验证电子设备当前的运行环境是否与环境参数匹配。
以上述{
"BIOS":{
"FilePath":"/tmp/xxxx.bin",
"ProgressFile":"/tmp/xxx",
"UpgradeHostOff":"NO",
"UpgradeNow":"YES",
“PreserveConfig":"YES”
}
}为例,其指定在系统开机状态下,立即执行;如果电子设备的系统处于开机状态下,说明电子设备当前的运行环境与环境参数匹配,电子设备可立即触发待升级模块的升级。如果指定在系统开机状态下,不立即执行,若电子设备的系统处于开机状态下,电子设备可以等待一段时间触发待升级模块的升级。
305、如果电子设备当前的运行环境与待升级模块的升级环境匹配,调用待升级模块对应的结构体。
306、按照升级流程运行待升级模块对应的结构体中的接口函数,以完成对待升级模块的升级。
在本实施例中,管理进程和升级进程之间通过文件形式进行交互,省去传递消息,这样即便不同进程采用不同语言编写,通过文件形式能够避免不同进程之间传递消息带来的繁琐问题。
电子设备可能对多个待升级模块进行升级,那么管理进程向升级进程发送不同待升级模块的升级管理文件,为了降低多个升级管理文件在传递过程中的干扰,本实施例示出调用管理进程向升级进程发送待升级模块的升级管理文件的一种方式,如下:
调用管理进程创建待升级模块的升级任务,升级任务中携带有待升级模块的升级管理文件;调用管理进程将待升级模块的升级任务写入到升级队列中,升级进程可从升级队列中读取到待升级模块的升级任务,以从待升级模块的升级任务中提取待升级模块的升级管理文件。
管理进程可以为每个待升级模块创建升级任务,将待升级模块的升级管理文件携带在升级任务中,携带有升级管理文件的升级任务被写入到升级队列中,因为管理进程每次只能向升级队列中写入一个升级任务,从管理进程侧避免多升级任务之间相互干扰,进而避免多个升级管理文件之间的相互干扰。升级进程每次从升级队列中可以读取一个升级任务(如按照先进先出方式读取),这样升级进程每次只能获取到一个待升级模块的升级管理文件,避免多个升级管理文件之间的干扰。
并且升级进程每次从任务队列中获取一个升级管理文件,也说明升级进程每次会处理一个待升级模块的升级,避免多个模块同时升级造成的干扰。在这里需要说明的一点是:为了避免多个模块同时升级造成的干扰,升级进程在从任务队列中获取升级管理文件之前或执行升级之前,升级进程可判断是否有待升级模块正在升级,如果有升级进程可以等待至待升级模块完成升级。
在本实施例中,升级进程可以包括升级线程、记录线程和上报线程,升级线程用于完成待升级模块的升级,记录线程用于对待升级模块的升级状态进行记录,上报线程用于上报待升级模块的升级状态,升级线程、记录线程和上报线程可以并行执行,从而在升级过程中能够及时记录和上报升级状态。
相对应的,本实施例提供的升级方法还可以包括:在升级进程中的升级线程按照升级流程运行待升级模块对应的结构体中的接口函数,利用升级进程中的记录线程对待升级模块的升级状态进行记录;利用升级进程中的上报线程对待升级模块的升级状态进行上报,这样升级进程通过不同线程进行升级、升级状态记录和升级状态上报,防止出现因记录上报等造成的升级中断。
其中,升级状态包括:待升级模块的模块标识、升级结果、当前升级操作和升级进度;升级结果以预设升级结果中的标识表示,当前升级操作和升级进度用于指示升级是否完成以及在没有完成时所处环节。
预设升级结果的一种示例如下:
typedef enum{
LNV_EXT_FLASHER_UPGRADE_FAILURE=-1,//-1表示失败
LNV_EXT_FLASHER_UPGRADE_STARTUP_PREPARE=0,//0表示开始升级准备
LNV_EXT_FLASHER_UPGRADE_PREPARE_OK=1,//1表示准备完成LNV_EXT_FLASHER_UPGRADE_WRITE_IMG_IN_PROGRESS=2,//表示正在烧录
LNV_EXT_FLASHER_UPGRADE_WRITE_IMG_FAILURE=3,//表示烧录失败
LNV_EXT_FLASHER_UPGRADE_VALIDATION_FAILURE=4,//表示校验失败
LNV_EXT_FLASHER_UPGRADE_FW_MISMATCH_ERROR=5,//表示匹配错误
LNV_EXT_FLASHER_UPGRADE_COMPLETE_SUCCESS=6,//表示升级成功
LNV_EXT_FLASHER_UPGRADE_NOT_ALLOWED_ERROR=7,//表示出现不允许的错误
LNV_EXT_FLASHER_UPGRADE_STATUS_MAX,//表示在此之前加入其他状态码
}。
相对应的上报的升级状态可以以JSON格式封装,如升级状态为"{"type":"FPGA","result":"6","action":"done","progress":"100"}"。type对应模块标识,表示当前进行升级的待升级模块,如是FPGA、BIOS、CPLD、PSU中的一个模块;result对应升级结果,可从上述预设升级结果中选择对应的数字;action对应当前升级操作,如done表示升级完成,flashing标识正在烧录中;progress对应升级进度,以升级进程百分比来表示。
对于不同待升级模块,可通过统一的升级状态对各待升级模块的升级进行全方面了解,实现实时监控待升级模块的升级。
对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
与上述方法实施例相对应,本申请实施例提供一种升级装置,其可选结构如图4所示,可以包括:初始化单元10、调用单元20和运行单元30。
初始化单元10,用于分别利用第一模块和第二模块的升级方法,对预设结构体中的接口函数进行初始化处理,得到第一模块的第一结构体和第二模块的第二结构体,预设结构体对应升级流程,接口函数指向升级流程的一个环节,第一模块和第二模块是电子设备中功能不同的两个模块。
所述第一模块和第二模块提供统一的对外接口,每个对外接口分别指向升级方法中的一个环节,以通过所述对外接口访问升级方法对所述预设结构体中的接口函数进行赋值处理,完成对接口函数的初始化处理。对于预设结构体和初始化的说明,请参见上述实施例,此处不再赘述。
调用单元20,用于对第一模块和第二模块中任一待升级模块,如果接收到待升级模块的升级指令,调用待升级模块对应的结构体。
运行单元30,用于按照升级流程运行待升级模块对应的结构体中的接口函数,以完成对待升级模块的升级。
升级流程可以指定待升级模块升级的各环节之间的先后顺序,如升级流程指定的先后顺序是获取升级版本、升级准备、固件校验、固件烧录和升级结果输出,在获取到升级版本且升级准备和校验完成后进行固件烧录以完成对待升级模块的升级。
待升级模块对应的结构体中的接口函数是对预设结构体中接口函数初始化得到,初始化时是利用待升级模块的升级方法(也可以称为模块升级的具体实现)进行赋值得到,使得待升级模块对应的结构体相当于是待升级模块升级的具体实现,由此按照升级流程运行待升级模块对应的结构体的接口函数,相当于按照升级流程运行待升级模块升级的具体实现,从而完成了待升级模块的升级。
在本实施例中,为电子设备中的第一模块和第二模块提供一个共用的预设结构体,预设结构体指向了模块的升级流程,预设结构体中的接口函数指向升级流程的一个环节,在对第一模块或第二模块进行升级之前,可以利用各模块的升级方法对预设结构体进行赋值,得到每个模块各自的结构体,每个模块各自的结构体具备了与模块的升级方法相关的取值,从而通过运行模型的结构体完成对模型的升级。并且每个模块各自的结构体是通过对预设结构体赋值得到,使得不同模块的结构体除了参数取值不同,接口函数、接口函数的排序都是相同的,接口函数对应升级流程的一个环节,在接口函数和接口函数的排序相同的情况下,不同模块的结构体的升级流程也是相同的,实现不同模块的升级流程的统一。
在一些示例中,升级装置还可以包括获取单元和复用单元,获取单元用于获取电子设备的配置文件,配置文件用于指示对第一模块和第二模块进行升级;复用单元,用于如果配置文件指示对第三模块升级,且第三模块与第一模块相同,复用第一模块的第一结构体,以作为第三模块的第三结构体;
相对应的调用单元,用于如果接收到第三模块的升级指令,调用第三模块的第三结构体;运行单元,用于按照升级流程运行第三模块的第三结构体中的接口函数,以完成对第三模块的升级。
在一些示例中,调用单元还用于执行以下步骤:如果管理进程接收到待升级模块的升级指令,调用管理进程生成待升级模块的升级管理文件,升级管理文件至少用于指示待升级模块的升级环境;
调用管理进程向升级进程发送待升级模块的升级管理文件;
调用升级进程解析待升级模块的升级管理文件,以验证电子设备当前的运行环境是否与待升级模块的升级环境匹配;
如果电子设备当前的运行环境与待升级模块的升级环境匹配,调用待升级模块对应的结构体。
其中,调用管理进程向升级进程发送待升级模块的升级管理文件包括:调用管理进程创建待升级模块的升级任务,升级任务中携带有待升级模块的升级管理文件;调用管理进程将待升级模块的升级任务写入到升级队列中;升级进程可从升级队列中读取到待升级模块的升级任务,以从待升级模块的升级任务中提取待升级模块的升级管理文件。
在一些示例中,升级装置还可以包括状态管理单元,用于在升级进程中的升级线程按照升级流程运行待升级模块对应的结构体中的接口函数,利用升级进程中的记录线程对待升级模块的升级状态进行记录;利用升级进程中的上报线程对待升级模块的升级状态进行上报。
请参见图5,其示出了本申请实施例提供的一种电子设备的可选结构,电子设备可以包括:第一模块100、第二模块200、存储器300和处理器400。
存储器300,用于存储预设结构体,预设结构体对应升级流程,接口函数指向升级流程的一个环节。
处理器400,用于分别利用第一模块100和第二模块200的升级方法,对预设结构体中的接口函数进行初始化处理,得到第一模块100的第一结构体和第二模块200的第二结构体,第一模块100和第二模块200是电子设备中功能不同的两个模块;对第一模块100和第二模块200中任一待升级模块,如果接收到待升级模块的升级指令,调用待升级模块对应的结构体;按照升级流程运行待升级模块对应的结构体中的接口函数,以完成对待升级模块的升级。
可选的,第一模块和第二模块提供统一的对外接口,每个对外接口分别指向升级方法中的一个环节,以通过对外接口访问升级方法对预设结构体中的接口函数进行赋值处理。
在一些示例中,处理器400,用于获取电子设备的配置文件,配置文件用于指示对第一模块和第二模块进行升级;如果配置文件指示对第三模块升级,且第三模块与第一模块相同,复用第一模块的第一结构体,以作为第三模块的第三结构体;如果接收到第三模块的升级指令,调用第三模块的第三结构体;按照升级流程运行第三模块的第三结构体中的接口函数,以完成对第三模块的升级。
在一些示例中,处理器400,用于如果管理进程接收到待升级模块的升级指令,调用管理进程生成待升级模块的升级管理文件,升级管理文件至少用于指示待升级模块的升级环境;调用管理进程向升级进程发送待升级模块的升级管理文件;调用升级进程解析待升级模块的升级管理文件,以验证电子设备当前的运行环境是否与待升级模块的升级环境匹配;如果电子设备当前的运行环境与待升级模块的升级环境匹配,调用待升级模块对应的结构体。
其中,调用管理进程向升级进程发送待升级模块的升级管理文件包括:调用管理进程创建待升级模块的升级任务,升级任务中携带有待升级模块的升级管理文件;调用管理进程将待升级模块的升级任务写入到升级队列中;升级进程可从升级队列中读取到待升级模块的升级任务,以从待升级模块的升级任务中提取待升级模块的升级管理文件。
在一些示例中,处理器400,用于在升级进程中的升级线程按照升级流程运行待升级模块对应的结构体中的接口函数,利用升级进程中的记录线程对待升级模块的升级状态进行记录;利用升级进程中的上报线程对待升级模块的升级状态进行上报。
其中,升级状态包括:待升级模块的模块标识、升级结果、当前升级操作和升级进度;升级结果以预设升级结果中的标识表示,当前升级操作和升级进度用于指示升级是否完成以及在没有完成时所处环节。
本申请实施例还提供一种存储介质,存储介质中存储有计算机程序代码,计算机程序代码被执行时实现上述升级方法。
需要说明的是,本说明书中的各个实施例可以采用递进的方式描述、本说明书中各实施例中记载的特征可以相互替换或者组合,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
对所公开的实施例的上述说明,使本领域技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
以上所述仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。
Claims (10)
1.一种升级方法,所述方法包括:
分别利用第一模块和第二模块的升级方法,对预设结构体中的接口函数进行初始化处理,得到所述第一模块的第一结构体和所述第二模块的第二结构体,所述预设结构体对应升级流程,所述接口函数指向升级流程的一个环节,所述第一模块和所述第二模块是电子设备中功能不同的两个模块;
对所述第一模块和所述第二模块中任一待升级模块,如果接收到所述待升级模块的升级指令,调用所述待升级模块对应的结构体;
按照所述升级流程运行所述待升级模块对应的结构体中的接口函数,以完成对所述待升级模块的升级。
2.根据权利要求1所述的方法,所述第一模块和第二模块提供统一的对外接口,每个对外接口分别指向升级方法中的一个环节,以通过所述对外接口访问升级方法对所述预设结构体中的接口函数进行赋值处理。
3.根据权利要求1所述的方法,所述方法还包括:
获取电子设备的配置文件,所述配置文件用于指示对所述第一模块和所述第二模块进行升级;
如果所述配置文件指示对第三模块升级,且所述第三模块与所述第一模块相同,复用所述第一模块的第一结构体,以作为所述第三模块的第三结构体;
如果接收到所述第三模块的升级指令,调用所述第三模块的第三结构体;
按照所述升级流程运行所述第三模块的第三结构体中的接口函数,以完成对所述第三模块的升级。
4.根据权利要求1所述的方法,所述方法还包括:
如果管理进程接收到所述待升级模块的升级指令,调用所述管理进程生成所述待升级模块的升级管理文件,所述升级管理文件至少用于指示所述待升级模块的升级环境;
调用所述管理进程向升级进程发送所述待升级模块的升级管理文件;
调用所述升级进程解析所述待升级模块的升级管理文件,以验证所述电子设备当前的运行环境是否与所述待升级模块的升级环境匹配;
所述如果接收到所述待升级模块的升级指令,调用所述待升级模块对应的结构体包括:如果所述电子设备当前的运行环境与所述待升级模块的升级环境匹配,调用所述待升级模块对应的结构体。
5.根据权利要求4所述的方法,所述调用所述管理进程向升级进程发送所述待升级模块的升级管理文件包括:
调用所述管理进程创建所述待升级模块的升级任务,所述升级任务中携带有所述待升级模块的升级管理文件;
调用所述管理进程将所述待升级模块的升级任务写入到升级队列中;所述升级进程可从所述升级队列中读取到所述待升级模块的升级任务,以从所述待升级模块的升级任务中提取所述待升级模块的升级管理文件。
6.根据权利要求1所述的方法,所述方法还包括:
在升级进程中的升级线程按照所述升级流程运行所述待升级模块对应的结构体中的接口函数,利用所述升级进程中的记录线程对所述待升级模块的升级状态进行记录;
利用所述升级进程中的上报线程对所述待升级模块的升级状态进行上报。
7.根据权利要求6所述的方法,所述升级状态包括:待升级模块的模块标识、升级结果、当前升级操作和升级进度;所述升级结果以预设升级结果中的标识表示,所述当前升级操作和所述升级进度用于指示升级是否完成以及在没有完成时所处环节。
8.一种升级装置,所述装置包括:
初始化单元,用于分别利用第一模块和第二模块的升级方法,对预设结构体中的接口函数进行初始化处理,得到所述第一模块的第一结构体和所述第二模块的第二结构体,所述预设结构体对应升级流程,所述接口函数指向升级流程的一个环节,所述第一模块和所述第二模块是电子设备中功能不同的两个模块;
调用单元,用于对所述第一模块和所述第二模块中任一待升级模块,如果接收到所述待升级模块的升级指令,调用所述待升级模块对应的结构体;
运行单元,用于按照所述升级流程运行所述待升级模块对应的结构体中的接口函数,以完成对所述待升级模块的升级。
9.一种电子设备,所述电子设备包括:第一模块、第二模块、存储器和处理器;
所述存储器,用于存储预设结构体,所述预设结构体对应升级流程,所述接口函数指向升级流程的一个环节;
所述处理器,用于分别利用第一模块和第二模块的升级方法,对预设结构体中的接口函数进行初始化处理,得到所述第一模块的第一结构体和所述第二模块的第二结构体,所述第一模块和所述第二模块是电子设备中功能不同的两个模块;对所述第一模块和所述第二模块中任一待升级模块,如果接收到所述待升级模块的升级指令,调用所述待升级模块对应的结构体;按照所述升级流程运行所述待升级模块对应的结构体中的接口函数,以完成对所述待升级模块的升级。
10.一种存储介质,存储介质中存储有计算机程序代码,所述计算机程序代码被执行时实现如权利要求1至7中任意一项所述的升级方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111274832.9A CN114003257A (zh) | 2021-10-29 | 2021-10-29 | 一种升级方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111274832.9A CN114003257A (zh) | 2021-10-29 | 2021-10-29 | 一种升级方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114003257A true CN114003257A (zh) | 2022-02-01 |
Family
ID=79925387
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111274832.9A Pending CN114003257A (zh) | 2021-10-29 | 2021-10-29 | 一种升级方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114003257A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023098015A1 (zh) * | 2021-11-30 | 2023-06-08 | 深圳市广和通无线股份有限公司 | 芯片平台升级方法及相关装置 |
-
2021
- 2021-10-29 CN CN202111274832.9A patent/CN114003257A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023098015A1 (zh) * | 2021-11-30 | 2023-06-08 | 深圳市广和通无线股份有限公司 | 芯片平台升级方法及相关装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110532189B (zh) | 一种持续集成系统、方法及装置 | |
CN108287694B (zh) | 应用程序构建方法、系统、计算机设备和存储介质 | |
US11599348B2 (en) | Container image building using shared resources | |
US10268570B2 (en) | Methods, systems, and computer readable media for automated generation of test files and testing network equipment using same | |
CN102289378B (zh) | 自动生成应用程序的方法 | |
US8918760B2 (en) | Test script generation for application image validation | |
CN108319460B (zh) | 应用程序安装包的生成方法、装置、电子设备及存储介质 | |
CN110096424B (zh) | 测试的处理方法、装置、电子设备及存储介质 | |
CN113986226B (zh) | 一种基于qiankun和Web Component的微前端架构及其构建方法 | |
WO2020015191A1 (zh) | 业务规则的发布管理方法、电子装置及可读存储介质 | |
CN111144839B (zh) | 一种项目构建方法、持续集成系统及终端设备 | |
CN110659198A (zh) | 应用程序的测试用例执行方法、装置和软件测试系统 | |
CN112769706B (zh) | 组件化路由方法及系统 | |
CN111026634A (zh) | 一种接口自动化测试系统、方法、装置及存储介质 | |
CN112564989A (zh) | 应用部署方法和装置 | |
CN114003257A (zh) | 一种升级方法及装置 | |
CN117836770A (zh) | 生成和分发定制的嵌入式操作系统 | |
CN110704025A (zh) | 编码规范工具的生成方法和装置、存储介质、电子设备 | |
CN114895935A (zh) | 刷写车辆ecu的方法、装置、电子设备及存储介质 | |
CN114546588A (zh) | 任务的部署方法、装置、存储介质及电子装置 | |
CN110083366B (zh) | 应用运行环境的生成方法、装置、计算设备及存储介质 | |
CN111176912A (zh) | 一种继电保护装置硬件配置信息管理系统和方法 | |
CN113254040B (zh) | 前端框架更新方法、装置、设备及存储介质 | |
CN116048476A (zh) | 命令行工具执行方法、装置、介质及设备 | |
US11789712B2 (en) | Data configuration deployment framework |
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 |