软件升级方法及升级装置 【技术领域】
本发明涉及软件升级方法及升级装置,具体地说,是涉及一种通过网络进行软件升级的方法和装置。
背景技术
目前,数字机顶盒、手机等嵌入式设备进行软件升级时,大都通过串口来升级或采用OTA(Over the Air,空中下载)方式来进行。不管是通过串口还是采用OTA方式升级软件,都存在着接收升级文件数据速度较慢的问题,一个升级文件可能得需要长达几分钟的时间才能接收完。接收数据所需的时间越长,机顶盒等设备断电和出错的概率就越大,越容易产生升级失败的问题。尤其是随着设备软件功能的不断增加,程序代码越来越多,升级文件数据越来越大,如果仍采用传统速度较慢的升级方式来接收数据进行软件升级,则发生升级失败的问题将尤为突出,严重影响了设备的正常运行。
【发明内容】
本发明的目的之一是提供一种软件升级方法,该方法基于socket编程,将待升级设备作为客户端,实现多个客户端通过网络进行软件升级,提高了软件升级的效率。
本发明的目的之二是提供一种软件升级装置,利用该升级装置对设备进行软件升级,能够提高升级速度和效率,有效避免升级失败的问题。
为实现上述发明目的之一,本发明提供下述技术方案的软件升级方法:
一种软件升级方法,所述方法包括:
待升级设备作为客户端,PC机作为服务端,在所述待升级设备与所述PC机之间建立基于socket的网络链接;
所述PC机将升级文件通过所述基于socket的网络链接传输至所述待升级设备;
所述待升级设备接收所述升级文件,并更新其程序存储器。
根据本发明所述的软件升级方法,为满足局域网内多台待升级设备同时进行网络升级,所述PC机具有m个软件升级用端口,所述待升级设备与所述PC机之间建立基于socket的网络链接的具体过程为:所述PC机开辟m个线程,每个线程创建一个socket,每个socket分别绑定一个软件升级用端口,用于监听所绑定端口的链接请求;所述待升级设备测试所述PC机的软件升级用端口,并在测试到空闲端口时向该空闲端口发出链接请求,所述PC机接受链接请求,与所述待升级设备建立基于socket的网络链接。
为避免局域网内多个待升级设备集中测试并链接所述PC机的软件升级用端口而降低链接效率,所述待升级设备采用下述方法测试所述PC机的软件升级用端口,以获得空闲端口:
将待升级设备的启动时间作为随机数种子,利用所述随机数种子产生随机数,并使得所述随机数对应于所述PC机的软件升级用端口的端口号;
测试所述随机数所对应的PC机的软件升级用端口,并判断该端口是否空闲;
若该端口空闲,直接向该空闲端口发出链接请求;若该端口非空闲,则循环测试下一个软件升级用端口,直至测试到空闲端口。
为保证待升级设备正确升级,PC机将升级文件传输至所述待升级设备之前,先提取所述升级文件中的版本信息,并将所述版本信息通过所述基于socket的网络链接传输至所述待升级设备;所述待升级设备验证所述版本信息是否正确;在所述版本信息正确时,所述PC机再将升级文件通过所述基于socket的网络链接传输至所述待升级设备。
所述PC机将升级文件分解为多个数据包,然后将多个数据包分别通过所述基于socket的网络链接传输至所述待升级设备,以避免整个数据包传输时因数据较大而容易产生传输错误。
为实现上述发明目的之二,本发明提供下述技术方案的软件升级装置:
一种软件升级装置,所述装置包括:
设置在待升级设备中的客户端通讯模块及设置在PC机中的服务端通讯模块,所述客户端通讯模块与所述服务端通讯模块之间建立基于socket的网络链接;
所述服务端通讯模块通过基于socket的网络链接将所述PC机中的升级文件传输至待升级设备;所述待升级设备通过其客户端通讯模块接收所述升级文件,并利用更新模块更新其程序存储器。
与现有技术相比,本发明的优点和积极效果是:本发明所述的软件升级方法及升级装置基于socket网络传输,配合PC机软件,可以实现多台待升级设备同时进行网络升级,升级软件传输速度快,解决了传统串口升级方法和OTA升级方法存在的数据接收速度慢、容易导致升级失败的问题,提高了设备升级的速度和效率;且本发明所述的软件升级方法不需要使用任何收费的网络协议,成本较低,通用性较强,可普遍应用于数字机顶盒、手机等嵌入式设备的软件升级。
【附图说明】
图1是本发明所述软件升级方法一个实施例的基本流程图;
图2是图1实施例中升级文件传输的具体流程图;
图3是本发明所述软件升级装置一个实施例的结构框图。
【具体实施方式】
下面结合附图和具体实施方式对本发明的技术方案作进一步详细的说明。
图1所示为本发明所述软件升级方法一个实施例的基本流程图。该实施例以机顶盒作为待升级设备,通过PC机对机顶盒进行软件升级的基本流程如下:
S101:将机顶盒作为客户端、PC机作为服务端,在机顶盒与PC机之间建立基于socket的网络链接。
S102:PC机将升级文件通过基于socket的网络链接传输至机顶盒。
S103:机顶盒接收升级文件,更新其程序存储器。
上述实施例中升级文件传输的具体流程如图2所示。下面以作为服务端的PC机和作为客户端的机顶盒为例,详细描述升级文件的具体传输过程。
首先,在PC机和机顶盒之间建立基于socket的网络链接。
为实现局域网内多台机顶盒能同时通过网络进行升级,作为服务端的PC机存在有多个软件升级用端口。假设局域网内最多可能存在的机顶盒为m个,PC机为升级功能开辟的端口为m个,且这m个端口的端口号从k到k+m。
PC机软件启动后,首先开辟m个线程,每个线程创建一个socket,共创建socket0到socketm共m个。每个socket分别绑定一个软件升级用端口,例如,socket0与端口号为k的软件升级用端口绑定,socket1与端口号为k+1的软件升级用端口绑定,以此类推。每个socket负责监听各自绑定的端口号的端口的链接请求和数据请求,当监听到相关请求后,开始建立链接,并进行数据通讯。在建立完socket后,PC机读取升级文件,并监听机顶盒的链接请求。
作为客户端的机顶盒等待用户进行软件升级的按键确认,在用户确认进行软件升级后,将测试空闲端口,并在测试到空闲端口时,向该端口发送链接请求。
由于机顶盒只能知道PC机的IP地址,而不知道PC机的哪个端口被占用,所以需要通过对PC机的软件升级用端口进行测试,以获得空闲端口。
如果局域网内多台机顶盒都采用顺序方法测试PC机的软件升级用端口,可能会出现一个端口被集中尝试链接的情况,增加了多个机顶盒对空闲端口的竞争,从而增加了每个机顶盒测试链接的次数。为避免局域网内多个机顶盒集中测试并链接所述PC机的软件升级用端口而降低链接效率,机顶盒采用下述方法测试PC机的软件升级用端口,以获得空闲端口:
将机顶盒的启动时间作为随机数种子,利用所述随机数种子产生随机数,并使得所述随机数对应于所述PC机的软件升级用端口的端口号,即所产生的随机数在k到k+m之间。可以通过用随机数对m取余然后再加上k的方法,使得最终获得的随机数的值在k到k+m之间。
然后测试所述随机数所对应的PC机的软件升级用端口,并判断该端口是否空闲;若该端口空闲,直接向该空闲端口发出链接请求;若该端口非空闲,则循环测试下一个软件升级用端口,直至测试到空闲端口。
在循环测试下一个软件升级用端口时,若测试到最后一个k+m端口仍未获得空闲端口,则从第k个端口开始重新进行循环测试。
由于每台机顶盒启动的时间总会存在差别,不同的启动时间对应不同的随机数种子,而不同的随机数种子对应不同的随机数,从而极大地分散了多台机顶盒尝试链接的PC机的端口号,提高了链接效率。
机顶盒在测试到空闲端口时,则向该空闲端口发出链接请求。
其次,执行升级文件版本信息及升级文件的传输和校验。
PC机在监听到机顶盒发出的链接请求后,将与机顶盒建立基于socket的网络链接。同时,为保证机顶盒能够正确升级,PC机首先读取升级文件的版本信息,并将版本信息发送至机顶盒。版本信息包括有升级文件对应的软件版本、硬件版本、厂商版本及发布日期等信息。机顶盒接收到PC机发来的版本信息后,对版本信息进行校验,以决定本机是否需要升级。若机顶盒需要升级,则发送一个关键字节至PC机,以请求PC机发送升级文件。若根据版本信息判断不需要升级,则退出升级过程,升级结束。
PC机判断是否接收到机顶盒反馈的关键字节。若接收到关键字节,则发送升级文件;若没有接收到关键字节,则放弃对该机顶盒的升级过程,重新监听链接请求。
PC机在发送升级文件时,将升级文件的数据内容分成合适长度的多份数据包,如分为4M或512K,分别发送至机顶盒客户端。在发送完毕所有升级文件后,PC机将重新监听链接请求。
机顶盒通过基于socket的网络链接接收升级文件,并将文件数据整合。为保证程序的安全性,在升级文件制作过程中对升级文件进行了加密处理;而为防止文件在传输中出现错误,在制作升级文件时,对加密前的文件数据进行了CRC校验和运算,并附加在升级文件之后。因此,机顶盒在接收完所有升级文件后,需要对升级文件数据解密,并进行CRC校验。在升级文件数据校验正确后,将数据存储至机顶盒的FLASH程序存储器中,实现机顶盒的软件更新。若数据校验错误,则不进行升级,升级结束。
图3是本发明所述软件升级装置一个实施例的结构框图,该实施例以机顶盒作为待升级设备为例,机顶盒作为客户端,配合PC机实现软件升级,PC机作为服务端。
如图3所示,软件升级装置包括设置在机顶盒中的客户端通讯模块及设置在PC机中的服务端通讯模块,所述客户端通讯模块和所述服务端通讯模块之间建立基于socket的网络链接。
所述升级装置还包括设置在机顶盒中的测试模块、随机数生成模块、版本验证模块及更新模块;以及设置在PC机中的监听模块和版本提取模块。
所述随机数生成模块以机顶盒的启动时间作为随机数种子,利用所述随机数种子产生随机数,并使得所述随机数对应于所述PC机的软件升级用端口的端口号。所述测试模块测试所述随时数生成模块所生成的随机数所对应的PC机的软件升级用端口,并判断该端口是否空闲。在测试到空闲端口时,通过所述客户端通讯模块向该空闲端口发出链接请求。
所述PC机中的监听模块包括有与PC机的软件升级用端口个数相同的线程,每个线程创建有一个socket,每个socket分别绑定一个PC机的软件升级用端口,用于监听所绑定端口的链接请求。所述监听模块在监听到所述机顶盒发出的链接请求时,通过所述服务端通讯模块接受链接请求,并与所述机顶盒中的客户端通讯模块建立基于socket的网络链接。然后所述服务端通讯模块通过基于socket的网络链接将所述PC机中的升级文件传输至机顶盒;所述机顶盒通过其客户端通讯模块接收所述升级文件,并利用所述更新模块对升级文件进行解密、校验等处理,并在校验正确后更新机顶盒的程序存储器。
为保证机顶盒能够正确升级,所述PC机在传输升级文件之前,先利用所述版本提取模块提取升级文件中的版本信息,并通过所述服务端通讯模块将所述版本信息传输至所述机顶盒。所述机顶盒中的客户端通讯模块接收所述版本信息,并传输至所述版本验证模块,通过所述版本验证模块验证所述版本信息是否正确。所述版本验证模块将验证结果通知所述客户端通讯模块,并在验证正确时通过所述客户端通讯模块发送关键字节反馈至所述PC机,以请求PC机发送升级文件。
上述软件升级方法及升级装置中的待升级设备为机顶盒,但并不局限于此,也可以是手机等其他嵌入式设备。
以上实施例仅用以说明本发明的技术方案,而非对其进行限制;尽管参照前述实施例对本发明进行了详细的说明,对于本领域的普通技术人员来说,依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或替换,并不使相应技术方案的本质脱离本发明所要求保护的技术方案的精神和范围。