一种固件安全升级方法及路由设备的制造方法
【技术领域】
[0001]本发明涉及数据通信领域,特别是涉及一种固件安全升级方法及路由设备。
【背景技术】
[0002]目前openwrt路由器和传统路由器固件升级方法基本类似,可以通过串口或者web服务器将固件首先读入到SDRAM当中,然后擦除flash,将固件写入到flash当中,最后重启路由器。
[0003]与传统路由器不同,openwrt的flash中的固件区域分为SquashFS和JFFS2两种文件系统,其中SquashFS是只读区域,而JFFS2具有可读写的特性。
[0004]OpenWrt的包管理提供了一个完全可写的文件系统。用户可以从远程仓库下载ipk,并安装到路由器当中,扩展自己的功能,这点与安卓手机在应用市场下载apk应用相类似。利用这个特性用户可以便捷地升级部分功能,然而在软件快速迭代的现在,用户还是有相当多地场景是需要升级整个固件的。
[0005]在目前绝大多数的路由器中,是不支持固件升级失败回退功能的,用户在升级固件的过程中,往往是小心翼翼.这限制了我司的固件快速推广.同时用户一旦因为意外情况,固件升级失败,由于无法再次进入web配置页面,导致用户路由器只能返厂维修或者自认倒霉。
[0006]当前针对固件安全升级,解决方案主要是通过在flash中划定一块区域存放备份固件,当升级过程中发生意外情况,要么将备份区域的固件拷贝到uboot的启动位置,要么将uboo t的启动位置换到备份固件的首地址。
[0007]总之,当前方案都会对flash空间造成一定的浪费。
【发明内容】
[0008]本发明的目的是提供一种安全的固件升级的方法,能够保证用户升级顺利完成,同时flash存储空间可以正确释放。
[0009]本发明提供的技术方案如下:
[0010]本发明提供一种固件安全升级方法,包括:S10保存固件至flash中;S20从flash中将固件读入到SDRAM(Synchronous Dynamic Random Access Memory,同步动态随机存储器)中;S30升级固件;S40当固件升级完成后,清理flash空间。
[0011]本发明还提供另一种固件安全升级方法,包括S00:判断flash的存储空间是否大于固件所需空间;若判断结果为否,则清理部分flash空间;否则,执行步骤S20; S10保存固件至f lash中;S20从f lash中将固件读入到SDRAM中;S30升级固件;S40当固件升级完成后,清理flash空间。
[0012]进一步优选的,所述步骤S10保存固件至flash中是指将固件分段式地保存到flash中。
[0013]本发明还提供另一种固件安全升级方法,包括S00:判断flash的存储空间是否大于固件所需空间;若判断结果为否,则清理部分flash空间;否则,执行步骤S20;S10将固件分段式地保存到flash中;S12判断固件完整性;若判断为否,则返回执行步骤S10;否则,将flag区域中的标志位置1,保存固件首地址;S20从flash中将固件读入到SDRAM中;S30升级固件;S40当固件升级完成后,清理flash空间。
[0014]本发明还提供另一种固件安全升级方法,包括S00:判断flash的存储空间是否大于固件所需空间;若判断结果为否,则清理部分flash空间;否则,执行步骤S20;S10将固件分段式地保存到flash中;S12判断固件完整性;若判断为否,则返回执行步骤S10;否则,将flag区域中的标志位置1,保存固件首地址;S14读取并判断flag标志位;若flag的标志位为1,执行步骤S20;若flag的标志位为0,则读取flag地址位,进一步判断所述地址位是否为有效地址位;当flag地址位为有效地址,清理flash空间;S20从flash中将固件读入到SDRAM中;S30升级固件;S40当固件升级完成后,清理flash空间。
[0015]本发明还提供另一种固件安全升级方法,包括S00:判断flash的存储空间是否大于固件所需空间;若判断结果为否,则清理部分flash空间;否则,执行步骤S20;S10将固件分段式地保存到flash中;S12判断固件完整性;若判断为否,则返回执行步骤S10;否则,将flag区域中的标志位置1,保存固件首地址;S14读取并判断flag标志位;若flag的标志位为1,执行步骤S20;若flag的标志位为0,则读取flag地址位,进一步判断所述地址位是否为有效地址位;当flag地址位为有效地址,清理flash空间;S16判断清理flash空间是否完毕;若是,升级结束;否则,返回执行步骤S14;S20从flash中将固件读入到SDRAM中;S30升级固件;S40当固件升级完成后,清理flash空间。
[0016]进一步优选的,所述步骤S30升级固件还包括:判断升级是否完成;若是,执行步骤S40 ;否则,重复执行步骤S14。
[0017]进一步优选的,所述步骤S40当固件升级完成后,清理flash空间还包括:将flag标志位置0,返回执行步骤S16。
[0018]本发明还提供一种路由设备,应用上述固件安全升级方法。
[0019]与现有技术相比,本发明利用openwrt的JFFS2文件系统的可读写特性,在升级过程中在flash中暂时保存固件,在升级完成后自动删除固件.保证了升级过程可以顺利完成,同时flash空间可以正确释放。
【附图说明】
[0020]下面将以明确易懂的方式,结合【附图说明】优选实施方式,对一种固件安全升级方法及路由设备的上述特性、技术特征、优点及其实现方式予以进一步说明。
[0021]图1为本发明一种固件安全升级方法的步骤示意图;
[0022]图2为本发明一种固件安全升级方法的固件的flash分布图;
[0023]图3为本发明一种固件安全升级方法的固件在flash中保存形式图;
[0024]图4为本发明一种固件安全升级方法的流程图。
【具体实施方式】
[0025]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对照【附图说明】本发明的【具体实施方式】。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图,并获得其他的实施方式。
[0026]为使图面简洁,各图中只示意性地表示出了与本发明相关的部分,它们并不代表其作为产品的实际结构。另外,以使图面简洁便于理解,在有些图中具有相同结构或功能的部件,仅示意性地绘示了其中的一个,或仅标出了其中的一个。在本文中,“一个”不仅表示“仅此一个”,也可以表示“多于一个”的情形。
[0027]图1为本发明一种固件安全升级方法的步骤示意图,作为本发明的一个具体实施例,如图1所示,包括:S10保存固件至flash中;S20从flash中将固件读入到SDRAM中;S30升级固件;S40当固件升级完成后,清理flash空间。
[0028]对上述实施例进行改进,得到另一种固件安全升级方法,包括S00:判断flash的存储空间是否大于固件所需空间;若判断结果为否,则清理部分flash空间;否则,执行步骤S20 ; S10保存固件至flash中;S20从flash中将固件读入到SDRAM中;S30升级固件;S40当固件升级完成后,清理flash空间。
[0029]进一步优选的,所述步骤S10保存固件至flash中是指将固件分段式地保存到flash中。
[°03°]图2为本发明一种固件安全升级方法的固件的flash分布图。如图2所不:
[0031 ] flash 被分为5 个区域:uboot; uboot -env;factory;firmware;config.
[0032]Firmware被分为kernel和rootfs两个区域。其中rootfs又可以分为SquashFS和JFFS2两种文件类型。
[0033]用户通过串口或者web页面将用于升级的临时备份固件分段式地保存到flash中的rootfs_data区域,这个区域的文件类型是JFFS2类型,可以自由地擦写。标志位flag将会保存在uboot-env区域中,供uboot来读取。
[0034]在flag区域中将会保存两个数据:
[0035]Bool update-prepared//用于保存固件是否需要升级的标志位
[0036]Unsigned int address//用于保存固件在flash中的首地址
[0
037]固件部分在flash是分布式存储的,每个部分包含数据头和数据段两个部分,其中数据头包含3个数据:
[0038]l.1nt size//表示本段连续保存固件的长度.即uboot从这个地址向后读取多少数据
[0039]2.1nt CRC//存储本段连续存储的数据的CRC校验值,从而保证了固件的完整性和正确性.
[0040]3.unsigned int address//存储了下一段存储文件的首地址
[0041 ]具体的,在正常使用的过程中,flash的使用不是连续的,所以针对目前大小在8M?32M中很难找到连续的空间来存放固件。本发明使用一种分段式的存储方式来存储固件。以使用flash中不连续的3段空间来保存固件为例,其在flash保存形式如图3所示:
[0042]将固件分为3个部分,同时加入head头部,头部包含了data长度,CRC校验值,下一个数据段的首地址,其中data长度保证可以读取正确长度的数据,CRC校验值保证数据段的正确性和完整性。下下一个数据段的首地址保证了可以通过地址找到下一个数据段。
[0043]对上述实施例进行改进,得到另一种固件安全升级方法,包括S00:判断flash的存储空间是否大于固件所需空间;若判断结果为否,则清理部分flash空间;否则,执行步骤S20;S10将固件分段式地保存到flash中;S12判断固件完整性;若判断为否,则返回执行步骤S10;否则,将flag区域中的标志位置1,保存固件首地址;S20从flash中将固件读入到SDRAM中;S30升级固件;S40当固件升级完成后,清理flash空间。
[0044]对上述实施例进行改进,得到另一种固件安全升级方法,包括S00:判断flash的存储空间是否大于固件所需空间;若判断结果为否,则清理部分flash空间;否则,执行步骤S20;S10将固件分段式地保存到flash中;S12判断固件完整性;若判断为否,则返回执行步骤S10;否则,将flag区域中的标志位置1,保存固件首地址;S14读取并判断flag标志位;若f lag的标志位为1,执行步骤S20 ;若flag的标志位为0,则读取flag地址位,进一步判断所述地址位是否为有效地址位;当flag地址位为有效地址,清理flash空间;S20从flash中将固件读入到SDRAM中;S30升级固件;S40当固件升级完成后,清理flash空间。
[0045]对上述实施例进行改进,得到另一种固件安全升级方法,包括S00:判断flash的存储空间是否大于固件所需空间;若判断结果为否,则清理部分flash空间;否则,执行步骤S20;S10将固件分段式地保存到flash中;S12判断固件完整性;若判断为否,则返回执行步骤S10;否则,将flag区域中的标志位置1,保存固件首地址;S14读取并判断flag标志位;若f lag的标志位为1,执行步骤S20 ;若flag的标志位为0,则读取flag地址位,进一步判断所述地址位是否为有效地址位;当flag地址位为有效地址,清理flash空间;S16判断清理flash空间是否完毕;若是,升级结束;否则,返回执行步骤S14; S20从f lash中将固件读入到SDRAM中;S30升级固件;S40当固件升级完成后,清理flash空间。
[0046]进一步优选的,所述步骤S30升级固件还包括:判断升级是否完成;若是,执行步骤S40 ;否则,重复执行步骤S14。
[0047]进一步优选的,所述步骤S40当固件升级完成后,清理flash空间还包括:将flag标志位置0,返回执行步骤S16。
[0048]下面详细介绍本发明的工作流程。图4为本发明一种固件安全升级方法的流程图。如图4所示:
[0049]200开始。
[0050]201判断flash的存储空间是否大于固件所需空间;若判断结果为否,则执行步骤211;否则,则继续执行下一步
[0051 ] 202将固件分段式地保存到f lash中的rootfs_data区域。
[0052]203判断固件的完整性;若是,则执行下一步;否则,提示用户重试,重复执行步骤201。
[0053]204将flag区域中的标志位置1,同时保存固件首地址。
[0054]205重启系统,由uboot读取flag标志位。
[0055]206判断标志位是否为1;若是,则执行下一步;否则,执行步骤214。
[0056]207依次从flash中将固件读入到SDRAM中,启动升级流程。
[0057]208判断升级是否完成;若是,执行下一步;否则,重复执行步骤205。
[0058]209将flag标志位置0。
[0059]210清理flash存储空间。
[0060]211判断是否清理完毕;若是,执行步骤212;否则重复执行步骤205。[0061 ] 212正常启动系统。
[0062]213 结束。
[0063]214读取并判断flag地址位是否有效;若地址位为有效地址位,则执行步骤210;否则执行步骤212。
[0064]本发明还提供一种路由设备,应用上述固件安全升级方法。
[0065]原先没有双固件或者固件备份的路由器中,在升级过程中,一旦断电或者断网,路由器则必须返厂维修,对用户而言是个巨大的负担。
[0066]而本发明提供的一种路由设备,应用上述固件安全升级方法,在升级过程中的任意时刻断电或者断网都不会影响用户的正常使用。对用户而言,路由器一直都是可用的,不会因为升级过程中的任何意外而导致路由器无法正常启动。对于快速迭代的互联网,本发明有积极意义。
[0067]应当说明的是,上述实施例均可根据需要自由组合。以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
【主权项】
1.一种固件安全升级方法,其特征在于,包括: S10保存固件至flash中; S20从flash中将固件读入到SDRAM中; S30升级固件; S40当固件升级完成后,清理flash空间。2.如权利要求1所述的固件安全升级方法,其特征在于,所述步骤S10保存固件至flash中之前还包括S00: 判断flash的存储空间是否大于固件所需空间;若判断结果为否,则清理部分flash空间;否则,执行步骤S20。3.如权利要求2所述的固件安全升级方法,其特征在于,所述步骤S10保存固件至flash中是指将固件分段式地保存到flash中。4.如权利要求3所述的固件安全升级方法,其特征在于,所述步骤S10保存固件至flash中之后还包括S12: 判断固件完整性;若判断为否,则返回执行步骤S10;否则,将flag区域中的标志位置1,保存固件首地址。5.如权利要求4所述的固件安全升级方法,其特征在于,所述步骤S12之后还包括S14: 读取并判断flag标志位; 若flag的标志位为1,执行步骤S20 ;若flag的标志位为0,则读取flag地址位,进一步判断所述地址位是否为有效地址; 当f 1 ag地址位为有效地址,清理f 1 ash空间。6.如权利要求5所述的固件安全升级方法,其特征在于,所述步骤S14之后还包括S16: 判断清理flash空间是否完毕;若是,升级结束;否则,返回执行步骤S14。7.如权利要求6所述的固件安全升级方法,其特征在于,所述步骤S30升级固件还包括: 判断升级是否完成;若是,执行步骤S40;否则,重复执行步骤S14。8.如权利要求7所述的固件安全升级方法,其特征在于,所述步骤S40当固件升级完成后,清理flash空间还包括: 将flag标志位置0,返回执行步骤S16。9.一种路由设备,其特征在于,应用上述1-8任意一项权利要求所述的固件安全升级方法。
【专利摘要】本发明公开了一种固件安全升级方法,包括:S10保存固件至flash中;S20从flash中将固件读入到SDRAM中;S30升级固件;S40当固件升级完成后,清理flash空间。本发明利用固件openwrt的JFFS2文件系统的可读写特性,在升级过程中在flash中暂时保存固件,在升级完成后自动删除固件,保证了升级过程可以顺利完成,同时flash空间可以正确释放。
【IPC分类】G06F21/57
【公开号】CN105488419
【申请号】CN201510906709
【发明人】成祎
【申请人】上海斐讯数据通信技术有限公司
【公开日】2016年4月13日
【申请日】2015年12月9日