一种动态加载单板芯片firmware程序的实现方法

文档序号:6582361阅读:274来源:国知局
专利名称:一种动态加载单板芯片firmware程序的实现方法
技术领域
本发明涉及集成电路芯片的运行程序动态加载实现方法,更确切地说是涉及一种动态加载单板芯片FIRMWARE(目前无专门的中文名称)程序的实现方法。
路由器上有很多种单板,单板上的许多芯片都有自己的FIRMWARE程序,在路由器上电启动或单板异常复位的时候就需要进行单板芯片FIRMWARE程序的加载。由于有些芯片的FIRMWARE程序比较大,例如达到5M字节以上,这就产生了FIRMWARE程序的存储方式和加载速度的问题。同时,单板或FIRMWARE程序在运行过程中由于某种原因而出现故障,为了使出现异常的芯片重新工作而又不影响主机以及其它单板的正常运行,就必须对芯片进行动态FIRMWARE程序的加载。由于厂家提供的FIRMWARE程序可能还存在着很多的缺陷(BUG),在使用的过程中就需要对发现的缺陷(BUG)进行修改,那么在修改缺陷(BUG)后或在增加新功能时就需要对单板的FIRMWARE程序进行更新。
目前,实现单板芯片FIRMWARE程序加载的方案有如下几种
方案1将FIRMWARE程序存储在主机快闪存储器(FLASH)的固定地址中,在需要加载FIRMWARE程序的时候,从主机FLASH的该固定地址中读出,送到单板上并加载到芯片中。
该方案的缺点是FIRMWARE程序保存在主机FLASH的固定地址中,主机的程序和FIRMWARE程序是分离的,这将不利于程序版本的管理。同时,由于要占用主机FLASH的固定地址空间,在需要进行主机程序升级或要对主机FLASH地址空间进行重新分配的时候,就有可能要修改存储该FIRMWARE程序的固定地址,同时还需要修改相应的主机程序,还要对主机程序和FIRMWARE程序分别进行升级更新,很可能会出现主机版本和FIRMWARE程序版本不兼容的问题。
方案2将FIRMWARE程序存储在单板上的FLASH中,在需要加载的时候,从单板上的FLASH中读出进行加载。
该方案的缺点是将FIRMWARE程序存储在单板上的FLASH中,这就需要在单板上增加一个FLASH,将会增加产品的成本,同时也需要在软件和硬件上增加对FLASH处理的部分。
实现本发明目的的技术方案是这样的一种动态加载单板芯片FIRMWARE程序的实现方法,其特征在于包括以下处理步骤A.压缩单板芯片FIRMWARE程序,和转换成常量字符数组的C文件,再编译链接到主机程序中;B.在需要加载单板芯片FIRMWARE程序的时候,向主机内存申请一空间,该空间的大小等同于所述的单板芯片FIRMWARE程序;C.对该常量字符数组的C文件进行解压缩,并存储到主机内存中的该空间中;
D.将主机内存该空间中的单板芯片FIRMWARE程序动态加载到单板芯片中,并在加载结束后,释放所述主机内存中的该空间。
所述的步骤A,所述的压缩处理是用压缩软件ARJ(这是一个常用的名称为ARJ的软件)将单板芯片FIRMWARE程序压缩处理成压缩文件;所述的转换是利用编写的转换应用程序将压缩文件转换成所述的常量字符数组的C文件;所述的编译链接是在编译主机程序时将所述的常量字符数组的C文件链接到主机程序中。
所述的步骤B是在主机上电启动或在单板异常复位需要加载单板芯片FIRMWARE程序时进行的。
上述步骤B的执行进一步包括设置一个单板异常状态标志位,在定时检查到该异常状态标志位为表明单板处于异常状态的“真”时,需要进行复位重启、重新动态加载单板芯片FIRMWARE程序。
所述的步骤B进一步包括是从经步骤A压缩处理、转换生成的常量字符数组的C文件中读出单板芯片FIRMWARE程序文件的大小,再动态申请同样大小的主机内存。
所述的读出文件的大小包括在所述C文件的每个压缩文件的固定位置处存储压缩前FIRMWARE程序各被压缩文件的名称、大小和压缩后该被压缩文件的名称;加载单板芯片FIRMWARE程序时,在压缩文件的该固定位置处读出该被压缩文件的大小。
所述的步骤C中,还包括在解压缩时,对内存空间中解压缩后的FIRMWARE程序计算其校验和;所述的步骤D中,还包括对加载到单板芯片中的FIRMWARE程序进行校验和计算,在判断两校验结果不一致时,返回执行步骤A至D,在判断两校验结果一致时,结束加载,释放所述的主机内存中的该空间。
本发明的动态加载FIRMWARE的方法,先将FIRMWARE程序用压缩软件ARJ压缩,利用一个编写的转换程序,将FIRMWARE程序的压缩文件转换成一个常量字符数组的C语言程序,在编译主机程序时将压缩、转换后的FIRMWARE文件链接到主机程序中;在主机上电启动或单板异常复位等需要加载单板芯片FIRMWARE程序的时候,先根据FI RMWARE文件的大小在主机的存储区(MEMORY)中申请同样大小的空间,将该常量字符数组的C语言程序解压缩到主机的该存储区(MEMORY)中,然后对芯片进行动态加载,加载结束后再将该申请到的存储区(MEMORY)释放。
本发明动态加载单板芯片FIRMWARE的方法,是通过将压缩后的FIRMWARE程序转换成一个常量字符数组的C文件再编译链接到主机的程序中,不需要在单板上增加一个存储FIRMWARE程序的FLASH芯片,可以降低硬件的成本,降低单板的元件密度;由于FIRMWARE程序是和主机的程序合为一体的,可以很方便地进行版本的管理,对主机程序的修改不会影响FIRMWARE程序,同时FIRMWARE程序的升级也不会影响到主机的其它程序;FIRMWARE程序和主机程序虽然合为一体,但又相互独立,一旦单板检测到本单板处于异常状态时,重新加载该单板的FIRMWARE程序,使该单板重新正常工作,不会影响到主机及其它单板的正常工作。
参见

图1,是按本发明的方案动态加载单板芯片FIRMWARE的总体流程框图。
步骤11,将单板芯片的FIRMWARE程序用压缩软件ARJ进行压缩(压缩成ARJ文件),得到压缩后的文件FIRMWARE.ARJ,对单板芯片的FIRMWARE程序进行压缩的目的是为了节省单板芯片FIRMWARE程序在主机程序中所占的空间;步骤12,编写一个转换应用程序(可采用专门的技术实现,这是一个特定的转换,将一个文件转换成专门格式的文件,是一种常规技术),将FIRMWARE.ARJ文件转换成一个C文件FIRMWARE.C,该C文件就是一个常量字符数组,其转换后的常量字符数组文件的组成形式如下
cons t char FIRMWARE[]={0x60,0xea,0x25,0x0,0x1e,0x7,0x1,0x0,0x10,0x0,0x2,0x54,0x54,0x95,0x76,0x2b,...............
0x2a,0xcd,0x9e,0xc3,0xfa,0xb3,0x10,0x60,0xea,0x0,0x0}通过将FIRMWARE程序转换成常量字符数组的C文件,可以将比较大(如1.5M左右)的FIRMWARE压缩文件链接到主机程序中,并得到相应的地址,供主机程序在其它函数中使用。同时,一次编译成功后就不用再对该文件进行编译了,除非文件升级时(但如果转换成*.h文件,那么在包含该*.h的文件一旦修改时,就要重新进行编译,由于FIRMWARE文件比较大,会导致编译链接的时间很长);步骤13,修改主机程序的工程文件,将FIRMWARE.C文件添加到主机工程文件中,进行编译链接,即将FIRMWARE.C文件编译链接进主机程序中;步骤14,在主机上电启动或单板异常复位等需要加载单板芯片FIRMWARE程序的时候,要将FIRMWARE的压缩文件解压缩并加载到单板上的芯片中,在解压缩的时候,先从单板芯片程序FIRMWARE的压缩、转换后的FIRMWARE.C中读出该文件的大小,然后向主机申请相应大小的内存空间,将FIRMWARE.C文件解压缩并存储到所申请的该内存空间地址中;步骤15,运行加载流程,将FIRMWARE程序加载到单板芯片中,加载完毕后释放该申请到的内存空间,在每个ARJ压缩文件中各相应的位置,都存储着压缩前FIRMWARE程序中各被压缩文件的名称、大小和压缩后该被压缩文件的名称。运行加载流程时,在压缩文件的相应位置处先将被压缩文件的大小读出,该相应位置可以是压缩文件中压缩文件名称之后从第29字节开始的前四个字节。由于FIRMWARE文件比较大,而且进行FIRMWARE程序升级后文件的大小还会发生变化,根据其大小动态申请主机的内存,可以避免申请到的主机内存和FIRMWARE程序文件的大小不匹配,若中请的内存小则会导致解压缩不成功,若申请的主机内存太大则又会浪费主机的资源;步骤16,FIRMWARE程序加载结束后要对加载到芯片SDRAM中的FIRMWARE程序进行校验,进行校验的方法是在解压缩时,对内存空间中解压缩后的FIRMWARE程序计算其校验和,在加载结束后,再读出加载到芯片SDRAM中的FIRMWARE程序并计算其校验和,如果二者的校验和相等,表示加载成功,运行FIRMWARE程序,启动程序使芯片正常工作,如果校验和不相等,表示加载失败,返回步骤11,重新进行FIRMWARE的加载流程。
在FIRMWARE程序动态加载的实现过程中,可在主机程序中设置一个表征单板异常状态的标志位,当单板处于正常状态的时候该标志位为“假”,当单板异常的时候设置该标志位为“真”,定时检查该标志位,如果该标志位为“真”,则表明单板处于异常状态,对单板复位,重新执行步骤11至15的过程,加载单板芯片FIRMWARE程序,使单板重新恢复正常的工作状态。
整个动态加载过程不会影响主机和其它单板的正常工作。
本发明经在路由器的单板中实验性使用,证明可靠可行。
权利要求
1.一种动态加载单板芯片FIRMWARE程序的实现方法,其特征在于包括以下处理步骤A.压缩单板芯片FIRMWARE程序,和转换成常量字符数组的C文件,再编译链接到主机程序中;B.在需要加载单板芯片FIRMWARE程序的时候,向主机内存申请一空间,该空间的大小等同于所述的单板芯片FIRMWARE程序;C.对该常量字符数组的C文件进行解压缩,并存储到主机内存中的该空间中;D.将主机内存该空间中的单板芯片FIRMWARE程序动态加载到单板芯片中,并在加载结束后,释放所述主机内存中的该空间。
2.根据权利要求1所述的一种动态加载单板芯片FIRMWARE程序的实现方法,其特征在于所述的步骤A,所述的压缩处理是用压缩软件ARJ将单板芯片FIRMWARE程序压缩处理成压缩文件;所述的转换是利用编写的转换应用程序将压缩文件转换成所述的常量字符数组的C文件;所述的编译链接是在编译主机程序时将所述的常量字符数组的C文件链接到主机程序中。
3.根据权利要求1所述的一种动态加载单板芯片FIRMWARE程序的实现方法,其特征在于所述的步骤B是在主机上电启动或在单板异常复位需要加载单板芯片FIRMWARE程序时进行的。
4.根据权利要求3所述的一种动态加载单板芯片FIRMWARE程序的实现方法,其特征在于所述步骤B的执行进一步包括设置一个单板异常状态标志位,在定时检查到该异常状态标志位为表明单板处于异常状态的“真”时,需要进行复位重启、重新动态加载单板芯片FIRMWARE程序。
5.根据权利要求1所述的一种动态加载单板芯片FIRMWARE程序的实现方法,其特征在于所述的步骤B进一步包括是从经步骤A压缩处理、转换生成的常量字符数组的C文件中读出单板芯片FIRMWARE程序文件的大小,再动态申请同样大小的主机内存。
6.根据权利要求5所述的一种动态加载单板芯片FIRMWARE程序的实现方法,其特征在于所述的读出文件的大小包括在所述C文件的每个压缩文件的固定位置处存储压缩前FIRMWARE程序各被压缩文件的名称、大小和压缩后该被压缩文件的名称;加载单板芯片FIRMWARE程序时,在压缩文件的该固定位置处读出该被压缩文件的大小。
7.根据权利要求1所述的一种动态加载单板芯片FIRMWARE程序的实现方法,其特征在于所述的步骤C中,还包括在解压缩时,对内存空间中解压缩后的FIRMWARE程序计算其校验和;所述的步骤D中,还包括对加载到单板芯片中的FIRMWARE程序进行校验和计算,在判断两校验结果不一致时,返回执行步骤A至D,在判断两校验结果一致时,结束加载,释放所述的主机内存中的该空间。
全文摘要
本发明涉及一种动态加载单板芯片FIRMWARE程序的实现方法,包括将单板芯片FIRMWARE程序压缩、转换成常量字符数组的C文件,再编译链接到主机程序中;在需要加载单板芯片FIRMWARE程序的时候,在主机内存中先申请一大小等同于单板芯片FIRMWARE程序的空间;再对该常量字符数组的C文件进行解压缩,并存储到主机内存中的该空间中;将主机内存该空间中的单板芯片FIRMWARE程序动态加载到单板芯片中,并在加载结束后,释放所述主机内存中的该空间。通过分别计算解压缩后的FIRMWARE程序和加载到芯片中的FIRMWARE程序的校验和,并比较两者间的一致性,可判断加载是否成功。本发明让主机程序与单板芯片FIRMWARE程序既合为一体又互相独立,便于两者的版本管理,且在执行动态加载时互不影响工作。
文档编号G06F9/445GK1467629SQ02123679
公开日2004年1月14日 申请日期2002年7月8日 优先权日2002年7月8日
发明者陈建慧 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1