您的位置:首页 > 其它

空格带来的郁闷---让Pxa270支持大容量SD卡

2009-05-14 10:59 127 查看
你小看什么,什么就会让你吃惊,让你从此不敢小看!

本来我们的pxa270的BSP是支持大容量SD卡的,我们这里的一位高人直接修改的public下面的代码然后把它移植到BSP下面实现的,这之前他还不知道MS的补丁已经解决了这个问题。这2天领导说要打上所有的CE5的补丁,说这样对系统的性能可能会有提升,比如稳定性啊以及对一些还没有发现的问题的解决。然后要我直接用MS提供的补丁来解决大容量SD卡的支持问题而不用移植public下面的代码来实现。

打完所有补丁后,按照release note的说明,我修改了bsp下的SD卡驱动中函数SDHBusRequestHandler()的一行代码:

在case ResponseR6:后面添加了一句case ResponseR7: //就是对cmd7的支持

然后打开PB,在platform->setting->environment 中添加环境变量IMGSDBUS2,并将其值设为1,设置这个环境变量是要使能SDBUS2这个dll,因为在common.bib中有如下声明:

#if defined IMGSDBUS2
; @CESYSGEN IF CE_MODULES_SDBUS2
sdbus.dll $(_FLATRELEASEDIR)/sdbus2.dll NK SH
; @CESYSGEN ENDIF CE_MODULES_SDBUS2
#else
; @CESYSGEN IF CE_MODULES_SDBUS
sdbus.dll $(_FLATRELEASEDIR)/sdbus.dll NK SH
; @CESYSGEN ENDIF CE_MODULES_SDBUS
#endif

最后sysgen整个project,完事。

本来上面的一切做完之后是成功实现了对大容量SD卡的支持的,但是测试的结果却相反,还是不能够支持大容量SD卡。难道MS在忽悠我???于是马上在Google上搜索,发现有很多blog上都有对这个的说明,做法也跟我上面的一样,但是为什么人家的可以OK,而我的不行呢???

开始郁闷了!!!

通过查看工程最终生成的ce.bib文件后发现如下代码:

; @CESYSGEN IF CE_MODULES_SDBUS

sdbus.dll D:/WINCE500/PBWorkspaces/Apollo/RelDir/Apollo_ARMV4I_Release/sdbus.dll NK SH

; @CESYSGEN ENDIF CE_MODULES_SDBUS

这说明最终link的sdbus.dll还是去link了sdbus.dll而不是sdbus2.dll,因为只要我们使能了IMGSDBUS2,common.bib中的下面这句话就应该起作用啊!

sdbus.dll $(_FLATRELEASEDIR)/sdbus2.dll NK SH

而最终ce.bib中应该是这个样子:

; @CESYSGEN IF CE_MODULES_SDBUS

sdbus.dll D:/WINCE500/PBWorkspaces/Apollo/RelDir/Apollo_ARMV4I_Release/sdbus2.dll NK SH

; @CESYSGEN ENDIF CE_MODULES_SDBUS

于是我怀疑这个宏IMGSDBUS2没有起作用,后来在cmd窗口查看这个环境变量的时候发现它是这样的:

IMGSDBUS2 =1

而不是

IMGSDBUS2=1

多了个空格!!!难道是空格搞的鬼,怎么会多了个空格呢?马上查看platform->setting->environment下这个宏的设置,发现它后面确实有一个空格,删掉空格,重新makimg,重新更新OS,验证,一切OK!!

原来是我copy这个宏的时候直接双击选中后copy的,没有发现它后面带了一个空格,这个空格导致这个环境变量设置不成功,从而没有使能sdbus2.dll。

后来我把这个宏直接设置在了平台的bat文件中,也故意加上空格试了一下,还是不行,去掉空格就ok了。

这样不行:set IMGSDBUS2 =1

这样才行:set IMGSDBUS2=1

呵呵。。。总算是搞清楚问题所在了,这个郁闷也是值得的。不过是由于自己疏忽导致的,这样也好,算是明白了这些环境变量设置的严格性了!

吃一堑长一智!!!

@Hzh 2009-05-14
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: