发明内容
本发明的目的是提供一种基于openwrt的固件升级方法及路由器,实现稳定升级路由器的固件的目的。
本发明提供的技术方案如下:
本发明提供一种基于openwrt的固件升级方法,包括步骤:S100运行预设升级脚本,所述预设升级脚本启动在RAM中创建ramfs文件***;S200在所述ramfs文件***中生成预设路径和软链接;所述预设路径为从ROM调用目标固件文件的路径;所述软链接为预设命令的链接地址;S300擦除Flash,根据所述预设路径写入所述目标固件文件至Flash;S400在所述ramfs文件***中调用所述软链接执行重启操作,完成所述目标固件的升级。
进一步的,所述步骤S100之前包括步骤:S010生成所述预设升级脚本;所述预设升级脚本包括预设获取地址,所述预设获取地址为获取目标固件安装包的地址;S020储存所述预设升级脚本至ROM中,并根据所述预设获取地址获取所述目标固件安装包至ROM;S030判断待升级路由器是否接收到升级指令;若是,执行步骤S100。
进一步的,所述步骤S300包括步骤:S310擦除Flash中历史固件文件的所有数据;所述历史固件文件是对应于所述目标固件文件的历史版本文件;S320根据所述预设路径写入所述目标固件文件至Flash。
进一步的,所述步骤S400包括步骤:S410在所述ramfs文件***中输入预设命令;所述预设命令包括重启命令或复位命令或关闭看门狗命令;S420根据所述预设命令调用所述软链接执行重启操作,完成所述目标固件的升级。
进一步的,所述步骤S300之后,S400之前包括步骤:S301判断写入的所述目标固件文件是否是完整;若是,执行步骤S302;S302备份固件配置文件至ROM;所述固件配置文件包括所述目标固件文件和配置文件。
本发明还提供一种基于openwrt的固件升级路由器,包括:运行模块,运行预设升级脚本;启动创建模块,根据所述运行模块运行的所述预设升级脚本启动在RAM中创建ramfs文件***;第一生成模块,在所述启动创建模块生成的所述ramfs文件***中生成预设路径和软链接;所述预设路径为从ROM调用目标固件文件的路径;所述软链接为预设命令的链接地址;擦除写入模块,擦除Flash,根据所述第一生成模块生成的所述预设路径写入所述目标固件文件至Flash;调用重启模块,在所述ramfs文件***中调用所述第一生成模块生成的所述软链接执行重启操作,完成所述目标固件的升级。
进一步,还包括:第二生成模块,生成所述预设升级脚本;所述预设升级脚本包括预设获取地址,所述预设获取地址为获取目标固件安装包的地址;储存模块,储存所述第二生成模块生成的所述预设升级脚本至ROM中,并根据所述预设获取地址获取所述目标固件安装包至ROM;第一判断模块,判断待升级路由器是否接收到升级指令;若是,所述运行模块开始运行所述预设升级脚本。
进一步,所述擦除写入模块包括:擦除单元,擦除Flash中历史固件文件的所有数据;所述历史固件文件是对应于所述目标固件文件的历史版本文件;写入单元,在所述擦除单元擦除Flash中历史固件文件的所有数据后,根据所述预设路径写入所述目标固件文件至Flash。
进一步,所述调用重启模块包括:输入单元,在所述ramfs文件***中输入预设命令;所述预设命令包括重启命令或复位命令或关闭看门狗命令;调用重启单元,根据所述输入单元获取的所述预设命令调用所述软链接执行重启操作,完成所述目标固件的升级。
进一步,还包括:第二判断模块,判断所述擦除写入模块写入的所述目标固件文件是否是完整;备份模块,当所述第二判断模块判定所述目标固件完整时,备份固件配置文件至ROM;所述固件配置文件包括所述目标固件文件和配置文件。
通过本发明提供的一种基于openwrt的固件升级方法及路由器,能够带来以下至少一种有益效果:
1)本发明避免了设备升级过程中,Flash破坏冲突等导致的设备死机变砖头无法重启的问题,极大的提高了升级的稳定性,使得待升级路由器擦写升级更为安全可靠。
2)本发明提升待升级路由器的升级安全性,减少用户由于待升级路由器死机或宕机后返厂维修或更换新的设备的费用,提升用户的使用体验。
3)本发明提升待升级路由器的升级安全性,减少用户由于待升级路由器死机或宕机后返厂维修或更换新的设备的费用,提升用户的使用体验。
具体实施方式
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对照附图说明本发明的具体实施方式。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图,并获得其他的实施方式。
为使图面简洁,各图中只示意性地表示出了与本发明相关的部分,它们并不代表其作为产品的实际结构。另外,以使图面简洁便于理解,在有些图中具有相同结构或功能的部件,仅示意性地绘示了其中的一个,或仅标出了其中的一个。在本文中,“一个”不仅表示“仅此一个”,也可以表示“多于一个”的情形。
OpenWRT是一个高度模块化、高度自动化的嵌入式Linux***,拥有强大的网络组件和扩展性,OpenWRT不同于其他许多用于路由器的发行版,它是一个从零开始编写的、功能齐全的、容易修改的路由器操作***。
ramfs文件***是Linus***的一种基于内存的文件***,工作于虚拟文件***层,不能格式化,可以创建多个,在创建时可以指定最大能使用的内存大小,并且读写。ramfs文件***把所有的文件都放在RAM中,所以读/写操作发生在RAM中,可以用ramfs文件***来存储一些临时性或经常要修改的数据,例如/tmp和/var目录,这样既避免了对Flash存储器的读写损耗,也提高了数据读写速度。ramfs文件***不能格式化,文件***大小可以随所含文件内容大小变化。
ramfs文件***的文件***大小可以根据被复制、创建或删除的文件及目录的数据来缩放,使得能够以最理想的方式使用内存,因为ramfs文件***基于RAM构建,所以读和写几乎都是瞬时的,即使以交换的形式存储文件,I/O操作的速度仍非常快。
图1是本发明一种基于openwrt的固件升级方法的一个实施例,包括:
S100运行预设升级脚本,所述预设升级脚本启动在RAM中创建ramfs文件***;
具体的,本实施例中,ramfs文件***顾名思义是内存文件***,它处于虚拟文件***(VFS)层,无需格式化,可以创建多个,只要内存足够,在创建时可以指定其最大能使用的内存大小。如果待升级路由器的操作***Linux已经将ramfs文件***编译进内核,就可以创建一个目录,加载ramfs文件***到该目录即可。即:
#mkdir-p/RAM1
#mount-t ramfs文件***none/RAM1
缺省情况下,ramfs文件***被限制最多可使用内存大小的一半。可以通过maxsize(以kbyte为单位)选项来改变。
#mkdir-p/RAM1
#mount-t ramfs文件***none/RAM1-o maxsize=10M
以上就创建了一个限定了最大使用内存大小为10M的ramfs文件***。
S200在所述ramfs文件***中生成预设路径和软链接;所述预设路径为从ROM调用目标固件文件的路径;所述软链接为预设命令的链接地址;
S300擦除Flash,根据所述预设路径写入所述目标固件文件至Flash;
S400在所述ramfs文件***中调用所述软链接执行重启操作,完成所述目标固件的升级。
具体的,当待升级路由器如路由器等运行的过程中,一旦烧写固件的时候,如果当前路由器的操作***被破坏,会导致待升级路由器由于烧写故障而不能使用,而本发明是将内存RAM划分出来,当做一块独立的分区进行使用,该ramfs文件***是基于内存中的,与Flash无冲突,因此当待升级路由器升级时Flash烧写目标固件文件时,并不会影响到ranfs文件***中执行脚本和命令,这样即使待升级路由器在Flash区域进行烧写目标固件文件出现故障时,本发明还能根据ramfs文件***中的预设路径和软链接执行重启操作,恢复待升级路由器的工作状态,当待升级路由器重启或者重置或者复位成功后,还能够重新进行固件的烧写,不会导致待升级路由器由于烧写故障而不能使用,出现死机或宕机的状态,提升待升级路由器的升级安全性,减少用户由于待升级路由器死机或宕机后返厂维修或更换新的设备的费用,提升用户的使用体验。
图2是本发明一种基于openwrt的固件升级方法的另一个实施例,包括:
S010生成所述预设升级脚本;所述预设升级脚本包括预设获取地址,所述预设获取地址为获取目标固件安装包的地址;
S020储存所述预设升级脚本至ROM中,并根据所述预设获取地址获取所述目标固件安装包至ROM;
S030判断待升级路由器是否接收到升级指令;若是,执行步骤S100;
S100运行预设升级脚本,所述预设升级脚本启动在RAM中创建ramfs文件***;
S200在所述ramfs文件***中生成预设路径和软链接;所述预设路径为从ROM调用目标固件文件的路径;所述软链接为预设命令的链接地址;
S310擦除Flash中历史固件文件的所有数据;所述历史固件文件是对应于所述目标固件文件的历史版本文件;
S320根据所述预设路径写入所述目标固件文件至Flash;
S410在所述ramfs文件***中输入预设命令;所述预设命令包括重启命令或复位命令或关闭看门狗命令;
具体的,看门狗需要在规定时间内喂狗,这里所说的“规定时间”就是看门狗定时器计数溢出时间,即一旦到达计数阈值,看门狗就会产生复位。CPU必须在这个周期内对这个定时器进行清零处理,让看门狗定时器重新计数,防止看门狗产生复位。本发明输入关闭看门狗命令能够避免看门狗定时器清零,从而使得待升级路由器进行复位操作。
S420根据所述预设命令调用所述软链接执行重启操作,完成所述目标固件的升级。
具体的,本实施例中,在烧写固件之前,首先需要根据用户的需要生成预设升级脚本,并根据预设脚本中的预设获取地址获取目标固件安装包,并将目标固件安装包储存在ROM中,这样能使得当固件版本更新的时候,待升级路由器能够运行预设升级脚本,使得待升级路由器在RAM中创建ramfs文件***,然后在创建得到的ramfs文件***中生成预设路径和软链接,这样,即使待升级路由器升级过程中擦写Flash时出现Flash正在运行使用的情况,而导致路由器变砖Flash被破坏的情况,但是由于RAM中的ramfs文件***中的软链接未被破坏,因此能够在Flash被破坏的情况下,用户能够通过ramfs文件***调用预设命令,从而重启或重置待测路由器,避免待测路由器像现有技术那样因为预设命令均储存在Flash中而导致Flash破坏时导致待升级路由器变砖。本发明不会导致待升级路由器由于烧写故障而不能使用,出现死机或宕机的状态,提升待升级路由器的升级安全性,减少用户由于待升级路由器死机或宕机后返厂维修或更换新的设备的费用,提升用户的使用体验。
优选的,上述所有方法实施例中,步骤S300之后,S400之前包括步骤:
S301判断写入的所述目标固件文件是否是完整;若是,执行步骤S302;
S302备份固件配置文件至ROM;所述固件配置文件包括所述目标固件文件和配置文件;
具体的,本实施例中,因为ramfs文件***驻留在RAM,在***重新引导时会丢失所有数据,因此,需要长期保存的数据不能存储在ramfs文件***上。因此本发明将目标固件文件在ROM进行备份保存,使得待升级路由器升级失败时,不需要再次通过预设路径获取目标固件文件,也不需要再次配置待升级路由器的配置选项,待升级路由器能够在重启后直接根据备份好的固件配置文件进行配置使用,避免用户在每次刷机后都需要重新设置路由器的密码,用户名,加密方式的配置选项,提升用户的刷机体验。
图3是本发明一种基于openwrt的固件升级方法的另一个实施例,包括:
S10开始升级;
S11执行预设升级脚本;
S12在内存空间创建ramfs文件***;
S13在ramfs文件***中增加基本命令的软链接,创建一系列目录等;
S14打开Flash;
S15擦写Flash并写入对应的固件文件;
S16校验写入的文件是否损坏;
S17完成升级烧写过程;
S18备份固件配置文件;
S19在ramfs文件***中直接输入reboot命令或者关闭喂狗;
S20设备重启成功。
具体的,本实施例中,经过上述流程以及设计,在单分区的文件***架构情况下,保证升级时擦写固件分区以及烧写固件文件,不会影响当前***环境,从而保证设备可以正常安全完成升级以及重启动作。本发明利用脚本在内存新建一个小型的ramfs文件***,并在该***装好基本的linux命令以及文件,然后在该文件***执行升级步骤,烧写Flash,由于该***位于内存,任何擦写Flash动作不会影响该ramfs文件***,从而保证整个升级过程稳定,并且可以保证设备reboot成功,不至于变砖头,无法控制,提升待升级路由器的升级安全性,减少用户由于待升级路由器死机或宕机后返厂维修或更换新的设备的费用,提升用户的使用体验。与常见的直接在当前***下升级,擦写固件分区相比,本发明在RAM新建的小型的ramfs文件***,使得待升级路由器擦写升级更为安全可靠,避免了设备升级过程中,Flash破坏,冲突等导致的设备死机变砖头无法重启的问题,极大的提高了升级的稳定性。
图4是本发明一种基于openwrt的固件升级路由器100的一个实施例,包括:
运行模块110,运行预设升级脚本;
启动创建模块120,根据所述运行模块110运行的所述预设升级脚本启动在RAM中创建ramfs文件***;
第一生成模块130,在所述启动创建模块120生成的所述ramfs文件***中生成预设路径和软链接;所述预设路径为从ROM调用目标固件文件的路径;所述软链接为预设命令的链接地址;
擦除写入模块140,擦除Flash,根据所述第一生成模块130生成的所述预设路径写入所述目标固件文件至Flash;
调用重启模块150,在所述ramfs文件***中调用所述第一生成模块130生成的所述软链接执行重启操作,完成所述目标固件的升级。
具体的,本实施例中,基于openwrt框架的无线路由产品,通常情况下,固件容量相对比较小,在升级的时候,会去擦写Flash,可能会出现当前擦写的Flash或者配置文件正在使用的情况,从而导致升级的时候会出现当前运行的Flash被破坏,待升级路由器可能变砖头无法被管理和使用的的死机情况。本文主要使用脚本的方式,在当前***中新创建一个小的ramfs文件***,在该ramfs文件***中,调用升级命令,烧写目标固件文件至待升级路由器,然后重启设备,完成整个升级过程。当待升级路由器运行的过程中,一旦烧写目标固件文件的时候,如果当前待升级路由器的操作***被破坏,会导致待升级路由器由于烧写故障而不能使用,而本发明是将内存RAM划分出来,当做一块独立的分区进行使用,该ramfs文件***是基于内存中的,与Flash无冲突,因此当待升级路由器升级时Flash烧写目标固件文件时,并不会影响到ranfs文件***中执行脚本和命令,这样即使待升级路由器在Flash区域进行烧写目标固件文件出现故障时,本发明还能根据ramfs文件***中的预设路径和软链接执行重启操作,恢复待升级路由器的工作状态,当待升级路由器重启或者重置或者复位成功后,还能够重新进行固件的烧写,不会导致待升级路由器由于烧写故障而不能使用,出现死机或宕机的状态,提升待升级路由器的升级安全性,减少用户由于待升级路由器死机或宕机后返厂维修或更换新的设备的费用,提升用户的使用体验。
图5是本发明一种基于openwrt的固件升级路由器100的另一个实施例,本实施例中其他部分与上一实施例相同,包括:运行模块110、启动创建模块120、第一生成模块130、擦除写入模块140、调用重启模块150;
此外还包括:
第二生成模块160,生成所述预设升级脚本;所述预设升级脚本包括预设获取地址,所述预设获取地址为获取目标固件安装包的地址;
储存模块170,储存所述第二生成模块160生成的所述预设升级脚本至ROM中,并根据所述预设获取地址获取所述目标固件安装包至ROM;
第一判断模块180,判断待升级路由器是否接收到升级指令;若是,所述运行模块110开始运行所述预设升级脚本。
所述擦除写入模块140包括:
擦除单元141,擦除Flash中历史固件文件的所有数据;所述历史固件文件是对应于所述目标固件文件的历史版本文件;
写入单元142,在所述擦除单元141擦除Flash中历史固件文件的所有数据后,根据所述预设路径写入所述目标固件文件至Flash。
所述调用重启模块150包括:
输入单元151,在所述ramfs文件***中输入预设命令;所述预设命令包括重启命令或复位命令或关闭看门狗命令;
调用重启单元152,根据所述输入单元151获取的所述预设命令调用所述软链接执行重启操作,完成所述目标固件的升级。
具体的,本实施例中,目前普通的小型路由器设备,由于固件分区小,主要采用单分区形式的文件***,升级时,就直接擦写固件分区,把发布的新固件版本写入分区,然后重启设备,上述这些操作都直接在当前***的环境中去执行。现有的这种直接在当前***环境中升级的方法,可能会导致文件***破坏的情况,从而进一步导致一些基本的命令都无法使用,如,reboot等命令无法使用,设备就无法重启,由于此时新固件已经烧写完成,当前设备的基本服务进程也在升级前已经杀掉,无法提供服务,也无法重启,从而使得该设备失去了管理,变成砖头。本发明描述的方法,在擦写固件分区之前,先创建脚本,在当前***环境中新建一个小型的ramfs文件***,由于这个小型的文件***是位于RAM,所以不会和Flash有任何的冲突,即使Flash上的内容在使用,被擦写,也不会影响该小***上执行的脚本以及命令。采用此方法可以保证升级过程更加的稳定,也能保证烧写完固件版本后,设备可以正常复位重启。路由设备在升级动作之前,先创建脚本,在脚本文件中,执行在内存中创建小型文件***的命令,准备好升级环境,然后在该小型***中,执行具体的烧写固件分区的动作以及备份配置,复位设备等动作,从而保证了升级过程的稳定性,避免升级变砖头。提升待升级路由器的升级安全性,减少用户由于待升级路由器死机或宕机后返厂维修或更换新的设备的费用,提升用户的使用体验。
优选的,上述所有装置实施例中包括:
第二判断模块185,判断所述擦除写入模块140写入的所述目标固件文件是否是完整;
备份模块190,当所述第二判断模块185判定所述目标固件完整时,备份固件配置文件至ROM;所述固件配置文件包括所述目标固件文件和配置文件。
具体的,本实施例中,因为ramfs文件***驻留在RAM,在***重新引导时会丢失所有数据,因此,需要长期保存的数据不能存储在ramfs文件***上。因此本发明将目标固件文件在ROM进行备份保存,使得待升级路由器升级失败时,不需要再次通过预设路径获取目标固件文件,也不需要再次配置待升级路由器的配置选项,待升级路由器能够在重启后直接根据备份好的固件配置文件进行配置使用,避免用户在每次刷机后都需要重新设置路由器的密码,用户名,加密方式的配置选项,提升用户的刷机体验。
应当说明的是,上述实施例均可根据需要自由组合。以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。