WINCE系统eboot在从SD卡读取stepldr.nb0时检测版本信息

WINCE系统eboot在从SD卡读取stepldr.nb0时检测版本信息

 

先来看《VS2005控制台程序修改nb0文件》

http://blog.csdn.net/loongembedded/article/details/29797783

 

接下来我们要实现的是如何在eboot从SD卡读取stepldr.nb0的时候检查stepldr的版本信息,根据版本信息来决定是否继续升级。

 

在实现过程中有两种方式,这两种方式的思路都是一样的,只是实现过程中一些具体细节的差别而已,先描述公共的实现部分:

 

1.     结构体IMG_CHECK_VERSION

 

<span style="font-size:14px;">typedef struct_IMG_CHECK_VERSION_
{
       char ImageVersion[VERSION_LEN];
}IMG_CHECK_VERSION,*PIMG_CHECK_VERSION;</span>

ImageVersion记录了版本信息,这个信息是由环境变量传递进来的。

 

2.     CheckImageVersion函数

 

此函数主要负责比较要升级的stepldr.nb0中的版本信息和当前在运行的stepldr.nb0版本信息对比。

<span style="font-size:14px;">BOOLCheckImageVersion(char *pCheckStr, char *pBuf)
{
       IMG_CHECK_VERSION ImgChk;
 
       memcpy((PBYTE)&ImgChk,pBuf,sizeof(IMG_CHECK_VERSION));
       if(strlen(pCheckStr) !=strlen(ImgChk.ImageVersion))
       {
              return FALSE;
       }
 
       if(strcmp(ImgChk.ImageVersion,pCheckStr)< 0)
       {
              return FALSE;
       }
       return TRUE;
}
 </span>


调用的代码如下:

CheckImageVersion(BSP_NBOOT_VERSION,((PBYTE)g_pDownPt- sizeof(IMG_CHECK_VERSION)))

 

这里第1个参数BSP_NBOOT_VERSION在sources.cmn和.bat文件有相关的定义

(1)   在sources.cmn文件定义如下:

!IF "$(BSP_C5000_SLC)" =="1"

CDEFINES=$(CDEFINES)-DBSP_NBOOT_VERSION=\"$(BSP_NBOOT_VERSION)\"

!ENDIF

 

(2)  bat文件定义如下:

if /i"%BSP_C5000_SLC%"=="1" set BSP_NBOOT_VERSION=3.50

 

BSP_NBOOT_VERSION的定义还有另外一种办法,直接在sources.cmn文件中定义,如下:

!IF"$(BSP_C5000_SLC)" == "1"

CDEFINES=$(CDEFINES)-DBSP_NBOOT_VERSION=350

!ENDIF

 

调用的代码改为

<span style="font-size:14px;">char NbootVersion[VERSION_LEN] ;
FormatString( NbootVersion, "%d.%d",BSP_NBOOT_VERSION/100, BSP_NBOOT_VERSION%100);
CheckImageVersion(NbootVersion,((PBYTE)g_pDownPt - sizeof(IMG_CHECK_VERSION)));
</span>

这里要注意如果BSP_NBOOT_VERSION=3.50,

FormatString( NbootVersion, "%d",BSP_NBOOT_VERSION); NbootVersion输出的0而不是3.50,不知道为什么,所以只能改为BSP_NBOOT_VERSION=350,但这种处理方式和我们定义的版本信息不是很一致,所以还是采用第1种。

 

3.     makefile.inc文件

为了在编译的时候自动根据环境变量BSP_NBOOT_VERSION的值来自动在stepldr.nb0最后添加版本信息,我们需要在stepldr\makefile.inc文件中增加下面的内容

copy $(_PLATFORMROOT)\$(_TGTPLAT)\target\$(_TGTCPU)\$(WINCEDEBUG)\Stepldr.*$(_FLATRELEASEDIR)

    call $(_TARGETPLATROOT)\Files\AddVersion.exe $(_FLATRELEASEDIR)\"Stepldr.nb0" $(BSP_NBOOT_VERSION)

 

 

你可能感兴趣的:(WINCE系统eboot在从SD卡读取stepldr.nb0时检测版本信息)