一种固件的更新方法及装置的制作方法

文档序号:7943379阅读:198来源:国知局
专利名称:一种固件的更新方法及装置的制作方法
技术领域
本发明涉及嵌入式Linux领域,特别涉及一种固件的更新方法及装置。
背景技术
嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可裁剪,适应于系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。可以这样认为,嵌入式系统是一种专用的计算机系统,作为装置或设备的一部分。通常,嵌入式系统是一个控制程序存储在非易失性随机访问存储器NVRAM中的嵌入式处理器控制板,NVRAM可以是闪存flash、EROM或EPR0M,后续文档以flash为例进行说明。事实上,所有带有数字接口的设备,如通信系统、手表、微波炉、录像机、汽车等,都使用嵌入式系统。所有嵌入式系统都面临更新固件的需求,固件(Firmware)就是写入flash中的程序,通俗的理解就是“固化的软件”,客户端在收到固件更新命令后,对固件对应的flash中的存储块(比如mtdblockl)进行读写操作实现更新。具体而言,是将固件数据传入内核空间由内核中的驱动来更新固件数据,这需要依赖于内核对于存储该固件的设备的驱动支持,开发人员必须熟悉内核中驱动的编写方法(如注册设备等)才能够编写该设备的驱动程序来支持固件更新。由此可见现有技术中存在如下问题固件的更新难度较大。

发明内容
本发明的目的是针对现有技术中存在的,固件的更新难度较大的问题,提供一种固件的更新方法及装置。本发明实施例提供一种固件的更新方法,包括客户端进行固件下载;客户端将固件写入第二内存空间,更新非易失性随机访问存储器中的固件,第二内存空间为通过用户程序将固件在非易失性随机访问存储器中的地址空间映射到内存中的地址空间。进一步,客户端将下载的固件存入第一内存空间。进一步,客户端将下载的固件存入第一内存空间具体为客户端接收服务器下发的固件更新命令后,延时将下载的固件存入第一内存空间。进一步,客户端将下载的固件存入第一内存空间具体为客户端接收服务器下发的固件更新命令后将下载的固件存入第一内存空间,并设置更新标志位;还包括非易失性随机访问存储器中的固件更新完成后或固件下载失败后,取消更新标志位。
进一步,还包括客户端将非易失性随机访问存储器中更新的固件进行加载。进一步,客户端将非易失性随机访问存储器中更新的固件进行加载具体为客户端加载前检查是否在向用户提供服务,若是则等待预定的时间重复进行加载检查,若否则将非易失性随机访问存储器中更新的固件进行加载。本发明实施例还提供一种固件的更新装置,包括下载模块,用于进行固件下载;更新模块,用于将固件写入第二内存空间,更新非易失性随机访问存储器中的固件,第二内存空间为通过用户程序将固件在非易失性随机访问存储器中的地址空间映射到内存中的地址空间。进一步,下载模块,还用于将下载的固件存入第一内存空间。进一步,下载模块,还用于接收服务器下发的固件更新命令后,延时将下载的固件存入第一内存空间。进一步,下载模块,还用于接收服务器下发的固件更新命令后将下载的固件存入第一内存空间,并设置更新标志位;还包括取消模块,用于非易失性随机访问存储器中的固件更新完成后或固件下载失败后,取消更新标志位。进一步,还包括加载模块,用于将非易失性随机访问存储器中更新的固件进行加载。进一步,加载模块,还用于加载前检查是否在向用户提供服务,若是则等待预定的时间重复进行加载检查,若否则将非易失性随机访问存储器中更新的固件进行加载。由于通过用户程序将固件在非易失性随机访问存储器中的地址空间映射到内存空间,然后通过用户程序更新该内存空间,使得固件更新难度较小。


图1表示本发明实施例提供的方法流程图;图2表示本发明实施例提供的装置结构图。
具体实施例方式下面结合实施例和附图对本发明进行说明,为了解决现有技术中的,固件的更新难度较大的问题,本发明实施例提供一种固件的更新方法及装置。本发明实施例提供一种固件的更新方法,如图1所示,包括如下步骤步骤101、客户端将下载的固件存入第一内存空间。步骤102、客户端将第一内存空间中的固件写入第二内存空间,更新闪存中的固件,第二内存空间为通过用户程序将固件在闪存中的地址空间映射到内存中的地址空间。步骤101具体实施时,服务器与客户端建立TCP (Transmission Control Protocol传输控制协议)连接后服务器可下发固件更新命令,包括对什么固件进行更新以及需要取得的文件名称等。
客户端接收固件更新命令后,根据固件更新命令设置对应的更新标志位,用于标示需要进行固件更新,并自动设置一个随机延时时间如15秒,之后使用TCP协议下载完整固件数据到本地内存中的第一内存空间,如1FFF-3FFF。设置随机延时时间是为了保证,当有多个客户端需从服务器处下载固件时,在时间上有所不同,减轻服务器的负担。客户端将下载的固件存入第一内存空间的同时,设置更新标志位如设置标志位为“1”,以表明客户端正处在固件下载的阶段,flash中的固件更新完成后或固件下载失败后,则取消更新标志位,如设置标志位为“0”,表明客户端未处在固件下载的阶段。当然将下载的固件存入内存中,只是本实施例中的优选方案,下载的固件还可以存在flash中。存在第一内存空间中,只是为了后续的步骤102中,将固件写入到第二内存空间中时,由于是在内存的不同地址空间,对固件数据进行读写操作,使得读写操作更加快捷高效。步骤102具体实施时,通过网络得到要更新的完整固件数据后,客户端可以按预先设置好的对不同固件的更新方法来更新,如果内核支持对固件在flash分区的读写则直接向该flash分区写入及固件数据,如果内核不支持对该flash分区的读写,则由用户程序将相应的flash地址空间映射到内存中的第二内存空间,如4FFF-6FFF。同时通过自身提供的读写驱动,从第一内存空间中读取固件写入第二内存空间,完成对固件的更新,对映射后第二内存空间的操作就是对flash所在存储空间的操作,操作必须要按照芯片手册说明的方法进行。具体实施时,要确定固件所在的cpu寻址空间中的地址,即固件应在flash中的地址空间,固件在flash中存放的地址是开发阶段就定义完成的,该地址可能是一块flash或者是flash的一个分区,该地址空间可以根据flash和cpu的片选关系以及cpu手册对寻址空间分配的描述得到,然后将该flash占用的地址空间映射到内存中。映射方法举例如下首先执行 fd = open (" /dev/mem" , 0_RDWR, O)然后执行 env_base = (env_t*)mmap (O,CFG_ENV_SIZE, PR0T_READ | PR0T_WRITE, MAP_SHARED, fd, env_addr),其中 fd 是第一步打开的文件描述符,env_addr是固件在flash中的地址空间的首地址,CFG_ENV_SIZE是固件在flash中的地址空间所占用的空间大小,env_base则是固件在flash中的地址空间映射到内存中的首地址,如果是对固件在flash中的地址空间操作,则操作以env_base为首地址的第二内存空间即可,对第二内存空间的读写操作会最终作用到实际固件所在的flash中的地址空间中,上述的程序即用户程序,举例完毕。映射完成后客户端就可以利用对该flash进行读写的驱动模块,对第二地址空间的数据进行更新,即采用第一内存空间中的固件更新第二地址空间,该驱动模块应根据不同的flash的数据手册要求编写即可,向flash擦写数据举例如下以本系统中数据线8位擦写数据块4k的flash为例。擦除第一个数据块的程序如下fbase = (unsigned long)env_base ;address = (unsigned volatile char*)fbase ;/*Erase this sector*/*((volatile unsigned char*) (fbase+0x5555)) =Oxaa;*((volatile unsigned char*) (fbase+0x2aaa)) =0x55;*((volatile unsigned char*) (fbase+0x5555)) = 0x80;
*((volatile unsigned char*) (fbase+0x5555)) =Oxaa;*((volatile unsigned char*) (fbase+0x2aaa)) =0x55;^address = 0x30 ;其中fbase与env_base相等,都指向映射的第二内存空间的首地址,0x5555为该flash存储块的一个寄存器地址,Oxaa为向该寄存器写入的指令。其他语句类似,寄存器位置,指令含义,写入顺序都可以通过查询手册得到。向第一个数据块写入数据的程序如下*((volatile unsigned char*) (fbase+0x5555)) =Oxaa;*((volatile unsigned char*) (fbase+0x2aaa)) =0x55;*((volatile unsigned char*) (fbase+0x5555)) =OxaO;*fbase = *wbuf ;其中fbase与env_base相等,都指向映射的第二内存空间的首地址,wbuf为存放写入第二内存空间的首地址。举例完成。因此用户程序看到的是一块内存空间而不是设备,固件可以分布在同一个flash的多个分区上也可以分布在多个flash上,用户程序只要按要求向对应地址写入对应固件数据即可。

在步骤102之后,在延时时间到期后,客户端首先会检查嵌入式系统是否在向用户提供服务,该服务是指该嵌入式系统的主要功能,若正在向用户提供服务则需等待预定的时间重复进行加载检查,直到不提供服务的情况下才会重新加载固件。这样做的目的是避免,固件的更新对系统向用户提供服务时造成影响。采用本发明实施例的方案的优点是固件数据是在用户程序直接写入相应的内存地址空间的,开发人员可以不需要了解内核驱动的编写方法,只需要关心芯片手册中描述的数据读写方法即可,更新数据不依赖内核对存储该固件的设备的驱动支持,实现简单。进一步可以自由的选择更新固件的时间和加载固件的时间,在更新固件时完全不影响本系统向用户提供服务。重新加载固件时则可以在用户设置的时间到期后自动分析业务情况来决定加载时机,尽最大可能不影响用户使用本系统。本发明实施例还提供一种固件的更新装置,如图2所示,包括下载模块201,用于进行固件下载;更新模块202,用于将固件写入第二内存空间,更新非易失性随机访问存储器中的固件,第二内存空间为通过用户程序将固件在非易失性随机访问存储器中的地址空间映射到内存中的地址空间。进一步,下载模块201,还用于将下载的固件存入第一内存空间。进一步,下载模块201,还用于接收服务器下发的固件更新命令后,延时将下载的固件存入第一内存空间。进一步,下载模块201,还用于接收服务器下发的固件更新命令后将下载的固件存入第一内存空间,并设置更新标志位;还包括取消模块203,用于闪存中的固件更新完成后或固件下载失败后,取消更新标志位。
进一步,还包括加载模块204,用于将闪存中更新的固件进行加载。进一步,加载模块204,还用于加载前检查是否在向用户提供服务,若是则等待预定的时间重复进行加载检查,若否则将闪存中更新的固件进行加载。最后应说明的是以上实施例仅用以说明本发明的技术方案而非对其进行限制,尽管参照较佳实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解其依然可以对本发明的技术方案进行修改或者等同替换,而这些修改或者等同替换亦不能使修改后的技术方案脱离本发明技术方案的精神和范围。
权利要求
1.一种固件的更新方法,其特征在于,包括 客户端进行固件下载; 客户端将固件写入第二内存空间,更新非易失性随机访问存储器中的固件,第二内存空间为通过用户程序将固件在非易失性随机访问存储器中的地址空间映射到内存中的地址空间。
2.根据权利要求1所述的方法,其特征在于,客户端进行固件下载具体为 客户端将下载的固件存入第一内存空间。
3.根据权利要求2所述的方法,其特征在于,客户端将下载的固件存入第一内存空间具体为 客户端接收服务器下发的固件更新命令后,延时将下载的固件存入第一内存空间。
4.根据权利要求2所述的方法,其特征在于,客户端将下载的固件存入第一内存空间具体为 客户端接收服务器下发的固件更新命令后将下载的固件存入第一内存空间,并设置更新标志位; 还包括 非易失性随机访问存储器中的固件更新完成后或固件下载失败后,取消更新标志位。
5.根据权利要求1所述的方法,其特征在于,还包括 客户端将非易失性随机访问存储器中更新的固件进行加载。
6.根据权利要求5所述的方法,其特征在于,客户端将非易失性随机访问存储器中更新的固件进行加载具体为 客户端加载前检查是否在向用户提供服务,若是则等待预定的时间重复进行加载检查,若否则将非易失性随机访问存储器中更新的固件进行加载。
7.一种固件的更新装置,其特征在于,包括 下载模块,用于进行固件下载; 更新模块,用于将固件写入第二内存空间,更新非易失性随机访问存储器中的固件,第二内存空间为通过用户程序将固件在非易失性随机访问存储器中的地址空间映射到内存中的地址空间。
8.根据权利要求7所述的装置,其特征在于,下载模块,还用于将下载的固件存入第一内存空间。
9.根据权利要求8所述的装置,其特征在于,下载模块,还用于接收服务器下发的固件更新命令后,延时将下载的固件存入第一内存空间。
10.根据权利要求8所述的装置,其特征在于,下载模块,还用于接收服务器下发的固件更新命令后将下载的固件存入第一内存空间,并设置更新标志位; 还包括 取消模块,用于非易失性随机访问存储器中的固件更新完成后或固件下载失败后,取消更新标志位。
11.根据权利要求7所述的装置,其特征在于,还包括 加载模块,用于将非易失性随机访问存储器中更新的固件进行加载。
12.根据权利要求11所述的装置,其特征在于,加载模块,还用于加载前检查是否在向用户 提供服务,若是则等待预定的时间重复进行加载检查,若否则将非易失性随机访问存储器中更新的固件进行加载。
全文摘要
本发明提供一种固件的更新方法及装置,涉及嵌入式Linux领域,以解决现有技术中存在的,固件更新难度较大的问题,该方法,包括客户端进行固件下载,客户端将固件写入第二内存空间,更新非易失性随机访问存储器中的固件,第二内存空间为通过用户程序将固件在非易失性随机访问存储器中的地址空间映射到内存中的地址空间,由于通过用户程序将固件在非易失性随机访问存储器中的地址空间映射到内存空间,然后通过用户程序更新该内存空间,使得固件更新难度较小。
文档编号H04L29/08GK103064692SQ20111031907
公开日2013年4月24日 申请日期2011年10月19日 优先权日2011年10月19日
发明者周斐, 张鑫, 乔美生, 赵巍, 王文, 魏金光, 张强 申请人:北京市三希电子科技开发公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1