CN113918199A - 底层固件程序的更新方法、存储介质以及电子设备 - Google Patents
底层固件程序的更新方法、存储介质以及电子设备 Download PDFInfo
- Publication number
- CN113918199A CN113918199A CN202010664704.4A CN202010664704A CN113918199A CN 113918199 A CN113918199 A CN 113918199A CN 202010664704 A CN202010664704 A CN 202010664704A CN 113918199 A CN113918199 A CN 113918199A
- Authority
- CN
- China
- Prior art keywords
- interface
- firmware program
- program
- updated
- updating
- 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
- G06F8/654—Updates using techniques specially adapted for alterable solid state memories, e.g. for EEPROM or flash memories
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本申请涉及计算机嵌入式软件技术领域,具体涉及一种底层固件程序的更新方法、存储介质以及电子设备,解决了相关技术中底层固件程序的更新方法操作繁琐,对操作人员专业技能要求较高,且更新效率低下,更新方式不可靠的问题。该方法包括:接收更新请求,获取待更新的底层固件程序的目标码;对待更新的底层固件程序进行缓存;判断***引导启动方式,并基于***引导启动方式判断是否需要进行接口的切换;需要,则将***接口切换为第一接口;调用第一接口函数更新待更新的底层固件程序,并对更新后的底层固件程序进行校验;将第一接口切换回***接口;不需要,则调用***接口对应的接口函数更新存储的底层固件程序,对更新后的底层固件程序进行校验。
Description
技术领域
本申请涉及计算机嵌入式软件技术领域,特别地涉及一种底层固件程序的更新方法、存储介质以及电子设备。
背景技术
在工业控制嵌入式领域,现场维护时通常需要对底层固件程序(比如操作***,甚至是引导程序)进行软件更新。而传统的软件更新包括使用仿真器通过JTAG(Joint TestAction Group,联合测试工作组)接口将程序烧写到存储器中。但这种方式操作繁琐,对作业人员的专业技能有较高要求,并且现场作业时通常需要插拔单板来连接JTAG接口,极其不方便,影响程序更新效率。
还包括拆卸芯片使用烧录器烧写,但这种需要拆卸硬件的方式也非常不可靠。所以通过软件来实现在线更新底层固件程序(引导程序、操作***)成为开发人员以及维护人员日益关注的技术点。
而通过软件实现底层固件程序在线更新,在***引导启动方式的接口和***启动后正常访问外设的接口不相同,且两种接口不可同时访问时,传统软件更新方式会导致***崩溃。
因此,相关技术中的底层固件程序的更新方法操作繁琐,对操作人员专业技能要求较高,且更新效率低下,更新方式不可靠,存在因接口访问冲突导致***崩溃。
发明内容
针对上述问题,本申请提供一种底层固件程序的更新方法、存储介质以及电子设备,解决了相关技术中底层固件程序的更新方法操作繁琐,对操作人员专业技能要求较高,且更新效率低下,更新方式不可靠,存在因接口访问冲突导致***崩溃的技术问题。
第一方面,本申请提供了一种底层固件程序的更新方法,所述方法包括:
接收更新请求,获取待更新的底层固件程序的目标码;
对所述待更新的底层固件程序进行缓存;
判断***引导启动方式,并基于所述***引导启动方式判断是否需要进行接口的切换;
若需要进行接口切换,则将***接口切换为第一接口;
调用所述第一接口函数更新所述待更新的底层固件程序,并对更新后的所述底层固件程序进行校验;
将所述第一接口切换回所述***接口;
若不需要进行接口切换,则调用所述***接口对应的接口函数更新存储的所述底层固件程序,并对更新后的所述底层固件程序进行校验。
根据本申请的实施例,可选的,上述底层固件程序的更新方法中,还包括:
在进行接口切换之前获取互斥信号量;
对所述底层固件程序更新、且校验完成后释放所述互斥信号量。
根据本申请的实施例,可选的,上述底层固件程序的更新方法中,所述***接口为本地总线控制接口,所述第一接口为串行外设接口,所述底层固件程序包括引导程序和操作***中至少一种。
根据本申请的实施例,可选的,上述底层固件程序的更新方法中,所述基于所述***引导启动方式判断是否需要进行接口的切换,包括:
当所述***从所述串行外设接口引导启动时,所述底层固件程序存储在与所述串行外设接口连接的存储器中,需要进行接口的切换;
当所述***从所述本地总线控制接口引导启动时,所述底层固件程序存储在与所述本地总线控制接口连接的存储器中,不需要进行接口的切换。
根据本申请的实施例,可选的,上述底层固件程序的更新方法中,所述将***接口切换为第一接口,包括:
将预设IO引脚由高电平转换为低电平;
在检测到预设IO引脚的下降沿时,控制接口切换引脚的电平值为低电平,以切换所述***接口为所述第一接口。
根据本申请的实施例,可选的,上述底层固件程序的更新方法中,所述将所述第一接口切换回所述***接口,包括:
将预设IO引脚由低电平转换为高电平;
在检测到预设IO引脚的上升沿时,控制接口切换引脚的电平值为高电平,以切换所述第一接口为所述***接口。
根据本申请的实施例,可选的,上述底层固件程序的更新方法中,所述更新所述待更新的底层固件程序,并对更新后的所述底层固件程序进行校验,包括:
步骤1:根据待更新的底层固件程序类型确定程序烧写偏移地址以及最大容量,并备份***原有底层固件程序;
步骤2:计算更新所述底层固件程序需要擦除块的总数,以及需写入页的总数,判断所述底层固件程序的总容量是否小于等于预设最大容量,若是,则执行步骤3,若否,则退出更新;
步骤3:擦除一个待擦除块,并使得第一计数器进行一次计数,所述第一计数器初始值设置为零;判断第一计数器所记录的数值是否小于需擦除的块的总数,若是,则再次执行步骤3,若否,则执行步骤4;
步骤4:从所述偏移地址依次写入一页所述底层固件程序的数据到闪存,并使得第二计数器进行一次计数,所述第二计数器初始值设置为零;
对写入的所述底层固件程序进行校验,若校验成功,则判断所述第二计数器所记录的数字是否小于所述底层固件程序的需写入页的总数,若是,则继续执行步骤4,直到所述第二计数器所记录的数字大于等于所述底层固件程序的页总数;
若校验失败,则通过备份的底层固件程序还原待更新的底层固件程序。
根据本申请的实施例,可选的,上述底层固件程序的更新方法中,所述根据待更新的底层固件程序类型确定程序烧写偏移地址以及最大容量,包括:
根据预设类型参数判断待更新的底层固件程序类型;
当所述预设类型参数为0时,所述底层固件程序为引导程序,确定所述引导程序的偏移地址为第一偏移地址,最大容量为第一预设容量;
当所述预设类型参数为1时,所述底层固件程序为操作***,确定所述操作***的偏移地址为第二偏移地址,最大容量为第二预设容量。
根据本申请的实施例,可选的,上述底层固件程序的更新方法中,所述需擦除块的总数包括构成容量不小于所述底层固件程序总容量所需的块的最少数量,所述需写入页的总数包括构成容量不小于所述底层固件程序总容量所需的页的最少数量。
根据本申请的实施例,可选的,上述底层固件程序的更新方法中,所述对更新后的所述底层固件程序进行校验,包括:
判断闪存内的底层固件程序与***缓存的底层固件程序是否完全一致,若是,则校验成功,若否,则校验失败。
第二方面,本申请提供了一种存储介质,该存储介质存储的计算机程序,可被一个或多个处理器执行,可用来实现如上述的底层固件程序的更新方法。
第三方面,本申请提供了一种电子设备,包括存储器和处理器,所述存储器上存储有计算机程序,所述存储器和所述处理器之间互相通信连接,该计算机程序被所述处理器执行时,执行上述的底层固件程序的更新方法。
本申请提供的一种底层固件程序的更新方法、存储介质以及电子设备,该方法相较于现有技术的有益效果包括:
1、兼容LBC和SPI两种不同的引导启动方式,根据用户需求选择更新引导程序或操作***,且在更新失败时能够还原为原程序;
2、引入互斥信号量,保证程序更新过程中接口方式不变,避免接口非法访问导致***崩溃;
3、在线更新底层固件程序,无需拆卸硬件;
4、操作简单,对作业人员的专业技能要求不高,且更新效率高。
附图说明
在下文中将基于实施例并参考附图来对本申请进行更详细的描述:
图1为本申请实施例提供的一种底层固件程序的更新方法的流程示意图;
图2为本申请实施例提供的一种底层固件程序的更新方法的接口切换示意图;
图3为本申请实施例提供的底层固件程序的更新方法的更新流程示意图。
在附图中,相同的部件使用相同的附图标记,附图并未按照实际的比例绘制。
具体实施方式
以下将结合附图及实施例来详细说明本申请的实施方式,借此对本申请如何应用技术手段来解决技术问题,并达到相应技术效果的实现过程能充分理解并据以实施。本申请实施例以及实施例中的各个特征,在不相冲突前提下可以相互结合,所形成的技术方案均在本申请的保护范围之内。
本公开提供一种底层固件程序的更新方法、存储介质以及电子设备,解决了相关技术中底层固件程序的更新方法操作繁琐,对操作人员专业技能要求较高,且更新效率低下,更新方式不可靠的技术问题。
实施例一
图1为本申请实施例提供的一种底层固件程序的更新方法的流程示意图,如图1所示,本方法包括:
步骤S110:接收更新请求,获取待更新的底层固件程序的目标码;
步骤S120:对所述待更新的底层固件程序进行缓存;
步骤S130:判断***引导启动方式,并基于所述***引导启动方式判断是否需要进行接口的切换;
步骤S140:若需要进行接口切换,则将***接口切换为第一接口;
步骤S150:调用所述第一接口函数更新所述待更新的底层固件程序,并对更新后的所述底层固件程序进行校验;
步骤S160:将所述第一接口切换回所述***接口;
步骤S170:若不需要进行接口切换,则调用所述***接口对应的接口函数更新存储的所述底层固件程序,并对更新后的所述底层固件程序进行校验。
进一步的,还包括:在进行接口切换之前获取互斥信号量;
对所述底层固件程序更新、且校验完成后释放所述互斥信号量。
进一步的,所述***接口为本地总线控制接口,所述第一接口为串行外设接口,所述底层固件程序包括引导程序和操作***中至少一种。
本申请基于飞腾芯片对底层固件程序(比如操作***,甚至是引导程序)进行软件更新,可支持本地总线控制接口LBC和串行外设接口SPI两种不同的引导启动方式,实现了兼容两种引导启动方式、更新类型可选择、灵活方便且可靠的在线更新底层固件程序。
其中,引导程序为***刚上电时刻需要启动的程序,完成最小***的部署,并引导操作***的加载。常见的引导程序有UBOOT,以及vxWorks中的bootrom。
飞腾芯片的LBC接口和SPI接口共同复用1GB的地址空间,两种接口不能同时使用,需要通过硬件引脚进行配置切换。例如从SPI引导启动的单板,***设备通过LBC接口与处理器连接,***成功引导启动后,便需要将接口方式从SPI切换为LBC才能正常工作。而***的引导启动方式,决定了底层固件程序的存放位置是位于哪种接口所连接的存储器中。
其中,***的引导启动方式可以根据预设引脚确定,也可以根据程序预设存储地址确定,还可以通过其他现有技术进行确定。
基于飞腾芯片的特性,若要进行底层固件程序的在线更新,首先需要判断是否要进行LBC接口和SPI接口之间的切换,并且要求在程序更新过程中不允许再次切换接口方式,否则接口非法访问可能导致***崩溃。
飞腾FT-2000A/2是由飞腾平台提供的一款面向装备和工业控制嵌入式***的国产化处理器,其集成了自主研发的内核,具有低功耗、强实时、高可靠、高安全等特点。本实施例中以飞腾FT-2000A/2为例进行说明。
具体的,用户通过远程客户端将需要更新的底层固件程序目标码上传至***FLASH存储器上,然后发送更新请求。其中,FLASH存储器通过LBC接口与飞腾FT-2000A/2连接,且FLASH存储器挂载有文件***,方便用户进行文件管理。
其中,LBC采用地址线/数据线复用的形式;SPI用于处理器和***低速器件进行同步串行数据传输;FLASH为闪存,是一种不挥发性的内存,在没有电流的情况下,也可以长久地保存数据,存储特性相当于硬盘。
具体的,***接收更新请求后,通过I/O接口将需要更新的底层固件程序拷贝到***缓存,判断***引导启动方式是从SPI引导还是LBC引导的,根据引导方式判断并进行LBC接口和SPI接口的切换。
进一步的,所述基于所述***引导启动方式判断是否需要进行接口的切换,包括:
当所述***从所述串行外设接口引导启动时,所述底层固件程序存储在与串行外设接口连接的存储器中,需要进行接口的切换;
当所述***从所述本地总线控制接口引导启动时,所述底层固件程序存储在与本地总线控制接口连接的存储器中,不需要进行接口的切换。
举例说明,LBC接口通过片选可以挂接多个***设备,***启动成功后,芯片工作在LBC模式,与这些***设备进行通信。
具体的,在更新底层固件程序时,引导方式有两种情况:情况一、***是通过SPI引导启动的,即底层程序存放在SPI接口连接的FLASH中,则首先需要将接口方式从原来的LBC接口切换为SPI接口;情况二、***是通过LBC引导启动的,即底层程序存放在LBC接口连接的FLASH中,则接口不需要切换。
而不论是否需要切换,都需要保证在程序更新期间接口方式维持不变,否则会引起非法访问,所以在切换接口时引入互斥信号量,互斥信号量为阻塞方式,在成功获取互斥信号量后才进行LBC接口和SPI接口的切换。
其中,在切换时引入互斥信号量,可防止其他程序再切换LBC接口和SPI接口,确保程序更新期间接口方式维持不变。
进一步的,所述将***接口切换为第一接口,包括:
将预设IO引脚由高电平转换为低电平;
在检测到预设IO引脚的下降沿时,控制接口切换引脚的电平值为低电平,以切换所述***接口为所述第一接口。
具体的,将预设IO引脚由高电平转换为低电平;第一控制芯片在检测到预设IO引脚的下降沿时,控制第二芯片接口切换引脚的电平值为低电平,以切换所述***接口为SPI接口。
进一步的,所述将所述第一接口切换回所述***接口,包括:
将预设IO引脚由低电平转换为高电平;
在检测到预设IO引脚的上升沿时,控制接口切换引脚的电平值为高电平,以切换所述第一接口为所述***接口。
具体的,将预设IO引脚由低电平转换为高电平;第一控制芯片在检测到预设IO引脚的上升沿时,控制第二芯片接口切换引脚的电平值为高电平,以切换所述SPI接口为所述***接口。
其中,预设IO引脚可以为GPIO引脚,第一控制芯片可以为FPGA,第二芯片可以为飞腾FT-2000A/2,第二芯片接口切换引脚为spi_lpc_select引脚;FPGA为现场可编程逻辑门阵列,GPIO为通用输入/输出口,其引脚功能可以由设计者通过寄存器进行控制,可以用于输入、输出或其他特殊功能。
图2为本申请实施例提供的一种底层固件程序的更新方法的接口切换示意图,如图2所示,接口切换的步骤如下:
根据更新请求对目标码对应的底层固件程序进行缓存,获取***的互斥信号量。
根据***的引导启动方式判断是否需要进行接口切换。
当需要进行接口切换时,控制特定GPIO引脚由高电平下拉至低电平,FPGA在捕获到特定GPIO引脚的下降沿后控制飞腾FT-2000A/2的spi_lpc_select引脚电平值为低电平,飞腾FT-2000A/2控制使用SPI接口方式,从而实现LBC接口和SPI接口两种接口方式的切换;切换完成后,调用SPI接口更新存储的底层固件程序,并对底层固件程序进行校验;
然后将控制特定GPIO引脚由低电平转为高电平,FPGA在捕获到特定GPIO引脚的上升沿后控制飞腾FT-2000A/2的spi_lpc_select引脚电平值为高电平,飞腾FT-2000A/2控制使用LBC接口方式,从而实现切换为原有接口;释放互斥信号量。
具体的,飞腾FT-2000A/2的LBC和SPI接口共用0~1GB的地址空间,具体通过芯片硬件的spi_lpc_select引脚进行LBC接口和SPI接口的切换,当spi_lpc_select为高电平时,由LBC使用这1GB的地址空间,当spi_lpc_select为低电平时,由SPI使用这1GB的地址空间。
当不需要进行接口切换时,调用LBC接口更新存储的底层固件程序,并对底层固件程序进行校验;释放互斥信号量。
进一步的,所述更新所述待更新的底层固件程序,并对更新后的所述底层固件程序进行校验,包括:
步骤S210:根据待更新的底层固件程序类型确定程序烧写偏移地址以及最大容量,并备份***原有底层固件程序;
步骤S220:计算更新所述底层固件程序需擦除块的总数,以及需写入页的总数,判断所述底层固件程序的总容量是否小于等于预设最大容量,若是,则执行步骤S230,若否,则退出更新;
步骤S230:擦除一个待擦除块,并使得第一计数器进行一次计数,所述第一计数器初始值设置为零;判断第一计数器所记录的数值是否小于需擦除的块的总数,若是,则再次执行步骤S230,若否,则执行步骤S240;
步骤S240:从所述偏移地址依次写入一页所述底层固件程序中的数据到闪存,并使得第二计数器进行一次计数,所述第二计数器初始值设置为零;
对写入的所述底层固件程序进行校验,若校验成功,则判断所述第二计数器所记录的数字是否小于所述底层固件程序的需写入页的总数,若是,则继续执行步骤S240,直到所述第二计数器所记录的数字大于等于所述底层固件程序的页总数;
若校验失败,则通过备份的底层固件程序还原待更新的底层固件程序。
进一步的,所述根据待更新的底层固件程序类型确定程序烧写偏移地址以及最大容量,包括:
根据预设类型参数判断待更新的底层固件程序类型;
当所述预设类型参数为0时,所述底层固件程序为引导程序,确定所述引导程序的偏移地址为第一偏移地址,最大容量为第一预设容量;
当所述预设类型参数为1时,所述底层固件程序为操作***,确定所述操作***的偏移地址为第二偏移地址,最大容量为第二预设容量。
进一步的,所述需擦除块的总数包括构成容量不小于所述底层固件程序总容量所需的块的最少数量,所述需写入页的总数包括构成容量不小于所述底层固件程序总容量所需的页的最少数量。
进一步的,所述对更新后的所述底层固件程序进行校验,包括:
判断闪存内的底层固件程序与***缓存的底层固件程序是否完全一致,若是,则校验成功,若否,则校验失败。
图3为本申请实施例提供的底层固件程序的更新方法的更新流程示意图,如图3所示,底层固件程序在此处简称底层程序,底层程序的更新和回读校验工作的步骤包括:
步骤S310:根据用户参数TYPE值确定需要更新的底层程序类型是引导程序还是操作***TYPE=0表示更新引导程序,TYPE=1表示更新操作***,其余参数值无效退出更新,确定底层程序烧写的偏移地址以及最大容量。
其中,引导程序的偏移地址offset为0,最大容量maxSize大小定为3MB,即0x300000字节(前缀0x表示16进制)。操作***的偏移地址offset为0x300000,最大容量maxSize大小定为5MB,即0x500000字节。
步骤S320:备份原FLASH底层程序。从偏移地址offset开始,将FLASH中原有的数据读入***缓存中进行备份,读取的大小为maxSize。
步骤S330:根据底层程序实际大小确定需擦除的块以及读/写的页个数,若底层程序实际大小超过最大容量maxSize,则退出更新;若底层程序实际大小未超过最大容量maxSiz,则执行步骤S340。
其中,FLASH的擦除以块为基本单位,读/写以页为基本单位,因此需擦除的块个数包括构成容量不小于所述底层固件总容量所需的块的最少数量,需读/写的页个数包括构成容量不小于所述底层固件总容量所需的页的最少数量。
例如FLASH每个块大小为0x8000字节,每个页大小为0x100字节,所需更新的程序大小为3000000字节,则需要从步骤S310确定底层程序烧写的偏移地址,开始擦除92个块(BlkNum=92),读/写11719个页(PageNum=11719)。
步骤S340:从所述偏移地址依次擦拭一个待擦除块,并使得ErsCnt进行一次计数;比较ErsCnt和BlkNum,当ErsCnt<BlkNum时,再次执行步骤S340进行块擦除操作。
其中,设置ErsCnt初始值为0,循环调用LBC或SPI接口的擦除函数,每次擦除一个块,每调用一次接口,ErsCnt进行一次计数,直至ErsCnt>=BlkNum时,执行步骤S350。
步骤S350:所述偏移地址依次写入一页所述底层固件程序中的数据到闪存,并使得WtCnt进行一次计数,比较WtCnt和PageNum,当WtCnt<PageNum时,进行底层程序的烧写。
其中,设置WtCnt初值为0,调用SPI或者LBC的写接口函数,将步骤S320中备份的底层程序的数据从偏移地址开始依次写入FLASH,每次烧写一页,每调用一次,WtCnt进行一次计数,执行步骤S360。
步骤S360:每烧写完一页,进行底层程序的回读校验。调用SPI或者LBC的读接口函数,将写入FLASH中的数据进行回读,并将读出的数据与***缓存数据比对,完全相同则校验通过,执行步骤S380;否则校验失败,执行步骤S370。
步骤S370:校验失败时,由于此时已经进行了FLASH擦除和写操作,FLASH中原有底层程序被破坏,需要对备份的原底层程序进行还原,然后执行步骤S390。
步骤S380:校验成功,返回执行步骤S350,直至WtCnt>=PageNum时,烧写完成,执行步骤S390。
步骤S390:根据执行情况反馈更新成功或者失败信息,结束。
本实施例提供一种底层固件程序的更新方法的流程示意图,包括:接收更新请求,获取待更新的底层固件程序的目标码;对所述待更新的底层固件程序进行缓存;判断***引导启动方式,并基于所述***引导启动方式判断是否需要进行接口的切换;若需要进行接口切换,则将***接口切换为第一接口;调用所述第一接口函数更新所述待更新的底层固件程序,并对更新后的所述底层固件程序进行校验;将所述第一接口切换回所述***接口;若不需要进行接口切换,则调用所述***接口对应的接口函数更新存储的所述底层固件程序,并对更新后的所述底层固件程序进行校验。结合飞腾芯片LBC接口和SPI接口不可同时使用的特性,兼容SPI和LBC两种不同的引导启动方式,可根据用户需求选择更新引导程序还是操作***,并且在更新失败时能够还原为原程序,引入互斥信号量,保证程序更新过程中接口方式不变,避免接口非法访问导致***崩溃。
实施例二
本实施例还提供一种计算机可读存储介质,如闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘、服务器、App应用商城等等,其上存储有计算机程序,该计算机程序被处理器执行时可以实现如实施例一的方法步骤,本实施例在此不再重复赘述。
实施例三
本实施例提供一种电子设备,该设备包括存储器和处理器,所述存储器上存储有计算机程序,所述存储器和所述处理器之间互相通信连接,该计算机程序被所述处理器执行时,执行如实施例一所述的底层固件程序的更新方法。
其中,处理器可以是专用集成电路(Application Specific IntegratedCircuit,简称ASIC)、数字信号处理器(Digital Signal Processor,简称DSP)、数字信号处理设备(Digital Signal Processing Device,简称DSPD)、可编程逻辑器件(ProgrammableLogic Device,简称PLD)、现场可编程门阵列(Field·Programmable Gate Array,简称FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述实施例一中的底层固件程序的更新方法。
存储器可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,例如静态随机存取存储器(Static Random Access Memory,简称SRAM),电可擦除可从编程只读存储器(Electrically Erasable Programmable Read-Only Memory,简称EEPROM),可擦除可编程只读存储器(Erasable Programmable Read-Only Memory,简称EPROM),可编程只读存储器(Programmable Read-Only Memory,简称PROM),只读存储器(Read-Only Memory,简称ROM),磁存储器,快闪存储器,磁盘或光盘。
综上,本申请提供的一种底层固件程序的更新方法、存储介质以及电子设备,该方法包括:接收更新请求,获取待更新的底层固件程序的目标码;对所述待更新的底层固件程序进行缓存;判断***引导启动方式,并基于所述***引导启动方式判断是否需要进行接口的切换;若需要进行接口切换,则将***接口切换为第一接口;调用所述第一接口函数更新所述待更新的底层固件程序,并对更新后的所述底层固件程序进行校验;将所述第一接口切换回所述***接口;若不需要进行接口切换,则调用所述***接口对应的接口函数更新存储的所述底层固件程序,并对更新后的所述底层固件程序进行校验。
结合飞腾芯片LBC接口和SPI接口不可同时使用的特性,兼容SPI和LBC两种不同的引导启动方式,可根据用户需求选择更新引导程序还是操作***,并且在更新失败时能够还原为原程序,引入互斥信号量,保证程序更新过程中接口方式不变,避免接口非法访问导致***崩溃,在线更新底层固件程序,无需拆卸硬件,操作简单,对作业人员的专业技能要求不高,且更新效率高。解决了相关技术中底层固件程序的更新方法操作繁琐,对操作人员专业技能要求较高,且更新效率低下,更新方式不可靠的技术问题。
在本申请实施例所提供的几个实施例中,应该理解到,所揭露的方法,也可以通过其它的方式实现。以上所描述的方法实施例仅仅是示意性的。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、物品或者设备中还存在另外的相同要素。
虽然本申请所揭露的实施方式如上,但上述的内容只是为了便于理解本申请而采用的实施方式,并非用以限定本申请。任何本申请所属技术领域内的技术人员,在不脱离本申请所揭露的精神和范围的前提下,可以在实施的形式上及细节上作任何的修改与变化,但本申请的专利保护范围,仍须以所附的权利要求书所界定的范围为准。
Claims (12)
1.一种底层固件程序的更新方法,其特征在于,所述方法包括:
接收更新请求,获取待更新的底层固件程序的目标码;
对所述待更新的底层固件程序进行缓存;
判断***引导启动方式,并基于所述***引导启动方式判断是否需要进行接口的切换;
若需要进行接口切换,则将***接口切换为第一接口;
调用所述第一接口函数更新所述待更新的底层固件程序,并对更新后的所述底层固件程序进行校验;
将所述第一接口切换回所述***接口;
若不需要进行接口切换,则调用所述***接口对应的接口函数更新存储的所述底层固件程序,并对更新后的所述底层固件程序进行校验。
2.根据权利要求1所述的方法,其特征在于,还包括:
在进行接口切换之前获取互斥信号量;
对所述底层固件程序更新、且校验完成后释放所述互斥信号量。
3.根据权利要求1所述的方法,其特征在于,所述***接口为本地总线控制接口,所述第一接口为串行外设接口,所述底层固件程序包括引导程序和操作***中至少一种。
4.根据权利要求3所述的方法,其特征在于,所述基于所述***引导启动方式判断是否需要进行接口的切换,包括:
当所述***从所述串行外设接口引导启动时,所述底层固件程序存储在与所述串行外设接口连接的存储器中,需要进行接口的切换;
当所述***从所述本地总线控制接口引导启动时,所述底层固件程序存储在与所述本地总线控制接口连接的存储器中,不需要进行接口的切换。
5.根据权利要求1所述的方法,其特征在于,所述将***接口切换为第一接口,包括:
将预设IO引脚由高电平转换为低电平;
在检测到预设IO引脚的下降沿时,控制接口切换引脚的电平值为低电平,以切换所述***接口为所述第一接口。
6.根据权利要求1所述的方法,其特征在于,所述将所述第一接口切换回所述***接口,包括:
将预设IO引脚由低电平转换为高电平;
在检测到预设IO引脚的上升沿时,控制接口切换引脚的电平值为高电平,以切换所述第一接口为所述***接口。
7.根据权利要求1所述的方法,其特征在于,所述更新所述待更新的底层固件程序,并对更新后的所述底层固件程序进行校验,包括:
步骤1:根据待更新的底层固件程序类型确定程序烧写偏移地址以及最大容量,并备份***原有底层固件程序;
步骤2:计算更新所述底层固件程序需擦除块的总数,以及需写入页的总数,判断所述底层固件程序的总容量是否小于等于预设最大容量,若是,则执行步骤3,若否,则退出更新;
步骤3:擦除一个待擦除块,并使得第一计数器进行一次计数,所述第一计数器初始值设置为零;判断第一计数器所记录的数值是否小于需擦除的块的总数,若是,则再次执行步骤3,若否,则执行步骤4;
步骤4:从所述偏移地址依次写入一页所述底层固件程序的数据到闪存,并使得第二计数器进行一次计数,所述第二计数器初始值设置为零;
对写入的所述底层固件程序进行校验,若校验成功,则判断所述第二计数器所记录的数字是否小于所述底层固件程序的需写入页的总数,若是,则继续执行步骤4,直到所述第二计数器所记录的数字大于等于所述底层固件程序的页总数;
若校验失败,则通过备份的底层固件程序还原待更新的底层固件程序。
8.根据权利要求7所述的方法,其特征在于,所述根据待更新的底层固件程序类型确定程序烧写偏移地址以及最大容量,包括:
根据预设类型参数判断待更新的底层固件程序类型;
当所述预设类型参数为0时,所述底层固件程序为引导程序,确定所述引导程序的偏移地址为第一偏移地址,最大容量为第一预设容量;
当所述预设类型参数为1时,所述底层固件程序为操作***,确定所述操作***的偏移地址为第二偏移地址,最大容量为第二预设容量。
9.根据权利要求7所述的方法,其特征在于,所述需擦除块的总数包括构成容量不小于所述底层固件程序总容量所需的块的最少数量,所述需写入页的总数包括构成容量不小于所述底层固件程序总容量所需的页的最少数量。
10.根据权利要求7所述的方法,其特征在于,所述对更新后的所述底层固件程序进行校验,包括:
判断闪存内的底层固件程序与***缓存的底层固件程序是否完全一致,若是,则校验成功,若否,则校验失败。
11.一种存储介质,其特征在于,该存储介质存储的计算机程序,可被一个或多个处理器执行,可用来实现如权利要求1~10任意一项所述的底层固件程序的更新方法。
12.一种电子设备,其特征在于,包括存储器和处理器,所述存储器上存储有计算机程序,所述存储器和所述处理器之间互相通信连接,该计算机程序被所述处理器执行时,执行如权利要求1~10任意一项所述的底层固件程序的更新方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010664704.4A CN113918199A (zh) | 2020-07-10 | 2020-07-10 | 底层固件程序的更新方法、存储介质以及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010664704.4A CN113918199A (zh) | 2020-07-10 | 2020-07-10 | 底层固件程序的更新方法、存储介质以及电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113918199A true CN113918199A (zh) | 2022-01-11 |
Family
ID=79232283
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010664704.4A Pending CN113918199A (zh) | 2020-07-10 | 2020-07-10 | 底层固件程序的更新方法、存储介质以及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113918199A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114579499A (zh) * | 2022-01-20 | 2022-06-03 | 飞腾信息技术有限公司 | 处理器通信接口的控制方法、装置、设备及存储介质 |
-
2020
- 2020-07-10 CN CN202010664704.4A patent/CN113918199A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114579499A (zh) * | 2022-01-20 | 2022-06-03 | 飞腾信息技术有限公司 | 处理器通信接口的控制方法、装置、设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI515660B (zh) | 韌體變量更新方法 | |
JP5909264B2 (ja) | セキュア・リカバリ装置及び方法 | |
KR100750132B1 (ko) | 부팅, 소프트웨어 자동 업데이트 및 에러 복원 방법과 그시스템, 그 방법을 기록한 컴퓨터 판독 가능한 기록매체 | |
CN110032405B (zh) | ***开机码存储器管理方法、存储器装置与应用其的电子*** | |
US10216936B2 (en) | Method of preventing computer malfunction, computer program, and computer | |
JP5575338B2 (ja) | 情報処理装置、情報処理方法、およびコンピュータプログラム | |
JP2007213571A (ja) | 新奇的なメモリアーキテクチャ内の直接メモリアクセスを用いてシステムを起動する方法 | |
JP2002526828A (ja) | ブート・ブロックへの書き込みアクセスを可能にする時のブート・ブロック・コードの保護 | |
US20080098381A1 (en) | Systems and methods for firmware update in a data processing device | |
WO2016206514A1 (zh) | 启动处理方法及装置 | |
US10025670B2 (en) | Information processing apparatus, memory dump method, and storage medium | |
JP2003316595A (ja) | インストール方法、ファイル更新方法、プログラム及びコンピュータシステム | |
JP6543122B2 (ja) | 情報処理装置と、前記情報処理装置による不揮発記憶装置の初期化方法、及びプログラム | |
US10977050B2 (en) | Method for managing system boot code memory, memory device and electronic system using the same | |
CN109582332B (zh) | 互联网摄像机的***升级方法及装置 | |
CN113918199A (zh) | 底层固件程序的更新方法、存储介质以及电子设备 | |
US7428635B2 (en) | Method of writing non-volatile memory that avoids corrupting the vital initialization code | |
TWI743480B (zh) | 電腦系統與其開機方法 | |
US10705827B2 (en) | Method for updating system information of a computer device | |
US20030237021A1 (en) | Automatic restoration of software applications in a mobile computing device | |
US20230069169A1 (en) | Information processing apparatus and control method of the same | |
JP3951808B2 (ja) | ハードディスクドライブサブシステム | |
US11922170B2 (en) | Systems and method for bootup activation of firmware images | |
CN117331593A (zh) | 双备份升级方法、计算机设备及存储介质 | |
CN113687851A (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 |