发明内容
有鉴于此,本发明的主要目的在于提供一种实现固件更新的方法,使嵌入式系统的固件更新简单方便。
本发明的第二个目的在于提供一种实现固件更新的系统,使嵌入式系统的固件更新简单方便。
为了实现上述第一个目的,本发明提供了一种实现固件更新的方法,该方法包括:
在固件更新模式下,在嵌入式系统中加载固件更新模块,所述固件更新模块建立虚拟文件分配表FAT;其中,所述虚拟FAT包括:FAT引导扇区FAT HEADER,只包含FAT表区的数据头的2个FAT表区,只包含1个文件名内容的目录和文件名区,以及虚拟数据区;
在上位机与嵌入式系统连接后,进行设备枚举过程,上位机基于存储设备协议,根据所述虚拟FAT将所述嵌入式系统识别为可进行数据存储操作的设备;
执行固件更新过程,所述上位机将固件程序拷贝到嵌入式系统,所述固件更新模块接收来自上位机的固件程序,并根据所述虚拟FAT存储该固件程序。
优选的,所述固件更新模块可以加载在所述嵌入式系统的引导系统BOOT内,所述虚拟FAT的FAT HEADER、FAT表区以及目录和文件名区均在所述BOOT中建立,所述虚拟数据区被映射到所述嵌入式系统的存储空间中。
所述固件更新模块接收来自上位机的固件程序后,进一步可对固件程序进行校验,将校验结果通过所述虚拟FAT返回给所述上位机,并且在校验通过时存储固件程序。
优选的,所述固件更新模块将校验结果通过虚拟FAT返回给所述上位机具体是,根据校验结果生成状态反馈文件,所述生成状态反馈文件为将校验结果以字符串的形式填充在虚拟FAT中的目录和文件名区内;在生成状态反馈文件后,固件更新模块通知上位机虚拟FAT内数据改变,上位机进行自动刷新,显示以校验结果作为文件名的状态反馈文件。
优选的,所述设备枚举过程包括:上位机读取FAT HEADER,固件更新模块返回FAT HEADER内容;上位机根据返回的FAT HEADER内容读取FAT表区以及目录和文件名区内容,固件更新模块根据FAT HEADER中标识的FAT表区以及目录和文件名区的长度来返回简化的FAT表区以及目录和文件名区内容。
优选的,在校验通过时,所述固件更新模块将所述固件程序存储到映射在所述嵌入式系统的存储空间中的虚拟数据区内;在校验未通过时,所述固件更新模块将所述固件程序丢弃。
优选的,所述可进行数据存储操作的设备为通用的可移动存储设备;
所述存储设备协议为通用的可移动存储设备协议。
优选的,所述固件更新模块为U盘系统,所述通用的可移动存储设备协议为U盘的软硬件协议,所述上位机将嵌入式系统识别为U盘;
所述上位机通过USB电缆与嵌入式系统连接。
为了实现上述第二个目的,本发明提供了一种实现固件更新的系统,该系统包括上位机和嵌入式系统,嵌入式系统中设置有固件更新模块,所述固件更新模块在固件更新模式下被加载,并在加载后建立虚拟文件分配表FAT;其中,所述虚拟FAT包括:FAT引导扇区FAT HEADER,只包含FAT表区的数据头的2个FAT表区,只包含1个文件名内容的目录和文件名区,以及虚拟数据区;
上位机,与处于固件更新模式下的嵌入式系统连接,并用于在连接后根据所述虚拟FAT,基于存储设备协议将所述嵌入式系统识别为可进行数据存储操作的设备;
所述上位机还用于将固件程序拷贝到所述嵌入式系统,所述固件更新模块用于接收来自上位机的固件程序,并根据所述虚拟FAT存储该固件程序至嵌入式系统的存储空间。
所述固件更新模块进一步用于对来自上位机的固件程序进行校验,并根据校验结果生成状态反馈文件,所述生成状态反馈文件为将校验结果以字符串的形式填充在虚拟FAT中的目录和文件名区内;
在生成状态反馈文件之后,固件更新模块进一步用于通知上位机虚拟FAT内数据改变;
所述上位机进一步用于进行自动刷新,显示以校验结果作为文件名的状态反馈文件。
优选的,所述固件更新模块加载在所述嵌入式系统的引导系统BOOT内,所述虚拟FAT的FAT HEADER、FAT表区以及目录和文件名区均设置在所述BOOT中,所述虚拟数据区映射到所述嵌入式系统的存储空间中。
优选的,所述固件更新模块为U盘系统,所述存储设备协议为U盘的软硬件协议,所述上位机将嵌入式系统识别为U盘;
所述上位机与所述嵌入式系统中的U盘系统通过USB电缆连接。
由以上技术方案可以看出,本发明通过在嵌入式系统中设置具有虚拟文件分配表FAT的固件更新模块,在上位机和嵌入式系统之间建立连接后,上位机基于存储设备协议可自动识别嵌入式系统,并通过执行文件拷贝的操作,即可将固件程序拷贝到嵌入式系统,使固件更新模块进行固件更新的操作,将固件程序存储到嵌入式系统的存储空间中。因此与现有技术中必须由嵌入式系统的主程序与上位机配合才能完成固件更新不同的是,本发明针对不同的嵌入式系统不需要采用专门的传输线和私有的协议客户端软件,使嵌入式系统的固件更新简单方便。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和实施例对本发明做进一步地详细描述。
首先有必要对存储设备协议进行说明。本文中所采用的存储设备协议是指上位机所通用的,用于对存储设备进行识别,并与存储设备进行通信的标准协议。本领域内技术人员所公知的,上位机为了识别某些类型的存储设备,一般都预先配置了存储设备协议,这些存储设备协议因其通用性而成为业内的标准协议,并在存储设备连接到上位机后,上位机无需其它应用程序控制,即可自动对该存储设备进行设备枚举,识别设备,并可在使用过程中对该存储设备进行数据存取的操作。举例来说,如现在的电脑一般都具有U盘的软硬件协议,当将U盘插入电脑的USB接口后,电脑可以自动识别出U盘,从而在电脑的操作系统中,通过打开文件夹的方式,对U盘进行文件操作。另外,目前一些MP3播放器、手机等设备也可以在无需特别安装驱动程序的情况下,被电脑识别并进行文件存取操作。
这里的存储设备及存储设备协议包括现在已有的以及未来将有的通用的存储设备及存储设备协议。所述存储设备及存储设备协议可以为现有的或未来将有的通用的可移动存储设备和通用的可移动存储设备协议。
本发明的核心思想是,利用上位机具备根据所述存储设备协议自动识别外部设备的性能,使上位机将嵌入式系统自动识别为可进行数据存储操作的设备,通过上位机向该设备拷贝文件的简单操作完成复杂的固件更新过程。
本文中所述的“拷贝”的操作,不仅包括传统意义上的将文件从一个文件夹复制到另一个文件夹的过程,还包括将文件从一个文件夹移动到另一个文件夹,或将文件从一个文件夹剪切后粘贴到另一个文件,等等类似的过程。
下面,首先对本发明所提供的一种实现固件更新的系统进行描述。图1为实现固件更新的系统结构示意图。如图1所示,该系统包括:上位机100和嵌入式系统110。其中,上位机100为可自动根据存储设备协议,将所连接的设备识别为可进行数据存储操作的设备的上位机;嵌入式系统100中设置有固件更新模块111,以及存储空间112。
固件更新模块111在被加载后,建立虚拟FAT,并可以基于存储设备协议和虚拟FAT与上位机100进行设备枚举过程和固件更新过程。
下面参照现有FAT对本发明的固件更新模块中的虚拟FAT进行描述。
目前公知的标准的文件分配表FAT,以FAT16为例,如图2所示,分为:FAT HEADER 201、2个FAT表区202和203、目录和文件名区204、以及数据区205。
其中,FAT HEADER 201一般用来标识FAT系统,也可用来标识FAT表区202和203、目录和文件名区204、以及数据区的长度。FAT表区202和203用来记录每一扇区是否使用,以及它们的位置关系。目录和文件名区204用来记录文件名和路径名,记录根目录下每个文件的起始单元、文件属性等。定位文件位置时,操作系统根据目录和文件名区204以及FAT表202和203就可以知道文件的具体位置和大小了。数据区205用来存储数据。
由于标准的文件分配表FAT中包含的信息很多,一般其所占用的存储空间很大,很多时候都达到了500k。因此现有的这种标准FAT将占用大量的内存空间。
本发明对FAT作虚拟化处理,即只有在进入固件更新模式后,嵌入式系统才会将固件更新模块加载到内存中,固件更新模块工作的过程中才会建立虚拟FAT,虚拟FAT的内容才会被缓存在内存中;而在非固件更新模式下,虚拟FAT会因为固件更新模块未被加载或从嵌入式系统的内存中移除,而未被建立或同时被移除。从而达到虚拟FAT一方面可以帮助实现基于存储设备协议进行固件更新的过程,另一方面又不占用嵌入式系统的内存空间的目的。
另外,为了简化嵌入式系统的结构,所述固件更新模块111可以加载在嵌入式系统的BOOT中,这样嵌入式系统的固件更新过程将不依赖于系统的主程序,而独立工作。
但因为目前的嵌入式系统分配给BOOT的内存空间很小,一般在30k左右,因此现有的标准的FAT不能设置在现在的嵌入式系统的BOOT内。为了能够在BOOT中加载固件更新模块,固件更新模块111中建立的虚拟FAT可以采用虚拟化后的简化的文件分配表FAT。即:保留FAT HEADER区;2个FAT表区只包含FAT表区的数据头,只占3-4字节,FAT表区中的其余数据用0表示,不占用空间,同时还可以表示所有的扇区未被使用,那么数据区的0地址即为固件程序的存放地址;目录和文件名区只保留1个文件名内容,为32字节,该文件名内容是状态反馈文件的文件名内容,在固件更新之前,此文件名内容为空。本虚拟FAT的数据区被直接映射到嵌入式设备的存储空间112中,成为一个虚拟数据区。这样就可以将简化的虚拟FAT放到BOOT中,即将虚拟FAT的FATHEADER区、2个FAT表区、以及目录和文件名区放到BOOT中,只占用BOOT很少的内存空间,而虚拟数据区实际存在于嵌入式设备的存储空间112中,它不占用BOOT的内存空间。
进一步地,上位机100,与处于固件更新模式下的嵌入式系统110连接,并用于在连接后根据所述存储设备协议以及虚拟FAT将所述嵌入式系统110识别为可进行数据存储操作的设备;
所述上位机100还用于将固件程序拷贝到所述嵌入式系统110,所达固件更新模块111用于接收来自上位机100的固件程序,并对固件程序进行校验,将校验结果通过所述虚拟FAT返回给所述上位机100,并在校验通过时根据所述虚拟FAT存储该固件程序至嵌入式系统的存储空间112。
所述上位机一般为PC机,也可以为能够识别固件更新模块的其他设备。
所述固件更新模块111将校验结果通过所述虚拟FAT返回给所述上位机100具体可以是:在校验过程中,根据固件程序的长度和校验码来校验数据,并根据校验结果生成状态反馈文件,然后向上位机100发送数据改变通知。
其中,所述生成的状态反馈文件用来表征校验是否成功,校验成功则生成表征正确的状态反馈文件;校验失败,则生成表征错误的状态反馈文件。
所述状态反馈文件以字符串的形式填充在所述虚拟FAT的目录和文件名区中。
上位机100,接收到固件更新模块111发来的数据改变通知后,自动进行刷新,显示以校验结果作为文件名的状态反馈文件。
作为一种具体实施的方式,所述固件更新模块111可以为U盘系统,所述存储设备协议为U盘的软硬件协议;上位机与嵌入式系统的连接可以采用USB传输线连接。
下面对本发明所提供的实现固件更新的方法做详细的描述。图3为实现固件更新的方法流程图。如图3所示,该方法包括以下步骤:
步骤301:在固件更新模式下,在嵌入式系统中加载固件更新模块,固件更新模块建立虚拟FAT。
步骤302:连接上位机与嵌入式系统,进行设备枚举过程,并根据存储设备协议以及虚拟FAT将所述嵌入式系统识别为可进行数据存储操作的设备。
步骤303:执行固件更新过程,所述上位机将固件程序拷贝到嵌入式系统,所述固件更新模块接收来自上位机的固件程序,并根据所述虚拟FAT存储该固件程序。
所述步骤303进一步可以包括,固件更新模块对固件程序进行校验,将校验结果通过所述虚拟FAT返回给上位机。步骤303之后,该方法还可以进一步包括:上位机自动刷新,显示校验结果。
上述是本发明所提供方法的主要流程,下面以从PC机下载固件程序,固件更新模块为U盘系统为例,对本发明所提供的实现固件更新的方法进行详细描述。图4为本发明所提供实施例的方法流程图。如图4所示,该方法包括以下步骤:
步骤401:在固件更新模式下,在嵌入式系统的BOOT内加载U盘系统,U盘系统建立虚拟FAT。
本领域内普通技术人员应当可以想到,为了使嵌入式系统进入固件更新模式,可以为嵌入式系统设置工作模式选择开关,在将PC与嵌入式系统连接之前,将工作模式选择开关选定至普通工作状态,则PC与嵌入式系统连接后,将按照公知的步骤,进入正常的工作状态,此步骤可以为现有技术,本发明不赘述;将工作模式选择开关选定至固件更新状态时,则嵌入式系统进入固件更新模式。
U盘系统可以为一软件模块,预先存储在嵌入式系统的存储空间中,当系统切换到固件更新模式下时,才在BOOT内加载该U盘系统。
U盘系统被加载后,将建立虚拟FAT。
U盘系统中的虚拟FAT可以采用简化的FAT12/FAT16。保留FATHEADER区;2个FAT表区只包含FAT表区的数据头,只占3-4字节;目录和文件名区只保留1个文件名内容,为32字节。
这样,在BOOT内建立的虚拟FAT实际上只包括FAT HEADER区、2个FAT表区、以及目录和文件名区,虚拟FAT的虚拟数据区被映射到嵌入式系统的存储空间112中。
本实施例中,嵌入式系统110可以为MP3播放器、掌上电脑等PMP(Portable MultiMedia Player,便携式多媒体播放器)设备,嵌入式系统110的内存可以采用SRAM、SDRAM等内存RAM,存储空间112可以采用非易失性存储器NOR FLASH、或NAND FLASH等。
U盘系统与上位机通信时,是采用标准的USB设备传输协议,该协议为目前的计算机所通用,所以本实施例在进行固件更新时,可以不再需要专门的私有协议客户端软件,遵循私有协议进行通信,使嵌入式系统的固件更新更加的方便简单。
步骤402:连接PC与嵌入式系统。
本步骤中是通过USB电缆连接PC与嵌入式系统的,连接后PC端可显示已格式化的U盘。所述PC端显示已格式化的U盘的过程,即为U盘系统的枚举过程:PC端首先读取FAT HEADER,U盘系统返回FAT HEADER内容;然后PC端会根据FAT HEADER内容来读取FAT表区或者目录和文件名区内容,U盘系统根据FAT HEADER中标识的FAT表区、目录和文件名区的长度来返回简化的FAT表区或者目录和文件名区内容,对于不占用存储空间的简化数据用0数据代替。PC读取完这些数据后完成U盘系统的枚举。
枚举过程完成后,PC机上会显示出表示嵌入式系统的设备符号,比如:打开windows操作系统中的“我的电脑”或者“windows资源管理器”,可以看到其中新出现了一个表示嵌入式系统的U盘标识符。双击该标识符可以进入到嵌入式系统的根目录中,此时进入根目录将是固件程序的存储位置。
步骤403:通过U盘系统,将固件程序从PC拷贝到嵌入式系统的存储空间。
本步骤中的固件程序一般是打包好的固件程序的数据块。其中包含固件程序的数据长度和校验码,用于确定固件程序拷贝的结束和拷贝结束后的校验数据。
本步骤具体的实现过程如下:
需要进行固件更新时,上位机接收到将固件程序拷贝到嵌入式系统中的指令后,上位机按照扇区块操作的方式,将固件程序的数据块通过传输线传输;嵌入式系统通过其U盘系统,接收上位机发送过来的固件程序的数据块,并进行分析,剥离出固件程序后,将其存储到地址为0的嵌入式系统的存储空间。
当拷贝到数据区的长度达到了打包固件程序中包含的固件程序数据的长度时,固件程序的拷贝结束。所述U盘系统的数据区映射在嵌入式系统的存储空间中,本步骤实际上就是将固件程序从PC拷贝到了嵌入式系统的存储空间中。
对用户而言,本步骤的操作是在PC机的windows操作系统中,将其它磁盘中的固件程序拷贝到了嵌入式系统中的存储空间,其操作与将一磁盘的文件拷贝到另一磁盘的操作一样。
步骤404:校验数据,在U盘系统中生成状态反馈文件。
U盘系统接收固件程序时,将先根据固件程序中包含的数据长度和校验码进行固件程序数据的校验,校验成功,在U盘系统中生成表征正确的状态反馈文件,并将固件程序存储到嵌入式系统的存储空间;校验失败,则在U盘系统中生成表征错误的状态反馈文件,并将拷贝的固件程序数据丢存。
生成的状态反馈文件以字符串的形式填充在U盘系统中32字节的目录和文件名区。如校验成功,可以在目录和文件名区生成“success.txt”,校验失败,则可以在目录和文件名区生成“fail.txt”。
步骤405:通知PC端U盘系统内数据改变,PC端自动刷新。
校验数据和状态反馈文件生成后,U盘系统将根据新的数据重新改变虚拟FAT。然后向PC端通知U盘系统内的数据改变,PC端收到通知后,进行自动刷新,显示U盘系统的状态反馈文件。例如,PC端自动刷新后,在PC端上嵌入式系统的根目录下,可以看到文件名为“success.txt”或“fail.txt”的文件。用户可以根据PC显示的U盘系统的状态反馈文件解析固件更新成功或者失败的原因。