CE开发中可能遇到的问题 偏执的太偏执、 2022-05-14 01:21 283阅读 0赞 我会在blog中将开发CE5.0时遇到的问题总结出来,供有遇到相同问题的朋友参考。因为我在解决这些问题时,也是参考了网上很多朋友的文章或帖子,在这里对他们表示一下感谢呵呵。 我对问题的解释如果有不对的地方还请高手指正,免得误人子弟哈。 1. 如何加入或删除BSP中的模块。 这里以display驱动为例来讲解。 BSP的根目录下有一个$(platform name).bat文件。里面定义了一系列的开关,比如: set BSP\_NODISPLAY= 或 set BSP\_NODISPLAY=1 我们可以在workspace下的platform.bib中可以看到有这么一段定义: IF BSP\_NODISPLAY ! S3C2440DISP.dll $(\_FLATRELEASEDIR)/S3C2440DISP.dll NK SH ENDIF BSP\_NODISPLAY ! 因此,如果我们在.bat中定义了BSP\_NODISPLAY为1,则S3C2440DISP.dll不会被加入到NK中。反之,则在生成NK的时候需要加入S3C2440DISP.dll。 而如何将display驱动加入编译列表呢。这就要看WINCE500/PLATFORM/$(platform name)/Src/Drivers下的dirs文件了。文件里枚举了要参与编译的子文件夹。display驱动在Display文件夹内。因此,如果要将display驱动加入编译,则要在dirs文件中加入Display文件夹,反之则去掉。 再看Display文件夹内的内容,看到有一个sources文件,里面有这么一段: TARGETNAME=S3C2440DISP TARGETTYPE=DYNLINK 表示将会生成一个名为S3C2440DISP的动态链接库。 看到这里就明白了,如果要加入或删除BSP中的驱动,要改动文件有: $(platform name).bat:添加或修改开关 dirs:决定驱动代码是否参与编译 platform.bib:如果在加入新的驱动时,需要修改这里,把新的驱动加入NK中。 2. 在build自己配置的OS时,可能遇到的几个错误及其解决方法 我曾经遇到过这个错误: BUILD: \[01:0000000341:ERRORE\] PowerButton.obj : error LNK2019: unresolved external symbol SetSystemPowerState referenced in function PWR\_IST BUILD: \[01:0000000342:ERRORE\] PowerButton.obj : error LNK2019: unresolved external symbol GetSystemPowerState referenced in function PWR\_IST BUILD: \[01:0000000343:ERRORE\] C:/WINCE500/platform/smdk2440a/target/ARMV4I/debug/PowerButton.dll : fatal error LNK1120: 2 unresolved externals 根据信息,看出是在生成driver里的power button时,找不到两个函数。我查了文档,这两个函数都是声明在coredll.lib中的,然后我又去看了我生成的coredll.lib,发现的确找不到这两个函数。检查了一下OS的组件,发现原来是因为没有把power management组件添加进来。 而下面这个错误就明显了: BUILD: \[01:0000000445:ERRORE\] NMAKE : U1073: don't know how to make 'C:/WINCE500/PBWorkspaces/tiny\_kernel/WINCE500/smdk2440a\_ARMV4I/cesysgen/sdk/lib/ARMV4I/debug/ndis.lib' BUILD: \[01:0000000447:ERRORE\] NMAKE.EXE -i -c BUILDMSG=Stop. LINKONLY=1 NOPASS0=1 MAKEDLL=1 failed - rc = 2 这个就是因为没有添加NDIS相关组件,导致在编译BSP里网络相关的driver时,找不到相应的lib而报错。 3. 没有生成stepldr.bin和eboot.bin 检查一下是不是在debug模式下,如果是,切换到release模式下就可以了。 4. 遇到Error - cannot open input file <...> /postproc/nlscfg.inf 运行Build OS下的Copy Files to Release Directory 5. BLDDEMO: There were errors building (projectname),但error为0 把clean before building勾上,再sysgen一次。 6. 在编译BSP的内容时,出现: NMAKE : U1073: don't know how to make 'C:/WINCE500/public/common/sdk/lib/ARMV4I/retail/coredll.lib' 我检查了log,发现在此之前是一句 Linking /WINCE500/PLATFORM/SMDK2440A/Src/Common/Smartmedia/Dll/ directory. 因此看出是在smartmedia/dll文件夹里面出了问题。打开这个文件夹,打开里面的sources文件,可以看到coredll.lib被定义为 $(\_COMMONSDKROOT)/lib/$(\_CPUINDPATH)/coredll.lib 而error信息为C:/WINCE500/public/common/sdk/lib/ARMV4I/retail/coredll.lib 说明\_COMMONSDKROOT等于C:/WINCE500/public/common/sdk,而此时\_COMMONSDKROOT应该跟\_SYSGENSDKROOT一样才是对的。 在WINCE500/PUBLIC/COMMON/OAK/MISC/sources.default中,有如下定义 \_COMMONSDKROOT=$(\_COMMONPUBROOT)/sdk \_COMMONOAKROOT=$(\_COMMONPUBROOT)/oak \_COMMONDDKROOT=$(\_COMMONPUBROOT)/ddk \_SYSGENSDKROOT=$(\_PROJECTROOT)/cesysgen/sdk \_SYSGENOAKROOT=$(\_PROJECTROOT)/cesysgen/oak \_SYSGENDDKROOT=$(\_PROJECTROOT)/cesysgen/ddk 我又参看了makefile.def中对\_ COMMONPUBROOT的定义: 比较长,共分了四种情况 (1) OS projects during sysgen (2) OS projects during compile (3) WINCEPROJ projects (4) Other projects. 其中,在build BSP的时候,应该是属于第四种。 为了便于理解,我去掉了log和注释。 !if "$(\_IN\_CESYSGEN)" != "" \_COMMONPUBROOT=$(\_PUBLICROOT)/common \_\_PROJROOT = $(\_PROJECTROOT)/cesysgen !else if ("$(WINCETREE)" == "winceos") || EXIST($(\_PUBLICROOT)/$(WINCETREE)/cesysgen/makefile) \_COMMONPUBROOT=$(\_PUBLICROOT)/common \_\_PROJROOT = $(\_PUBLICROOT)/$(WINCEPROJ) !else if "$(WINCEPROJ)" != "" \_COMMONPUBROOT=$(\_PROJECTROOT)/cesysgen \_\_PROJROOT = $(\_PUBLICROOT)/$(WINCEPROJ) !else \_COMMONPUBROOT=$(\_PROJECTROOT)/cesysgen \_\_PROJROOT = $(\_PROJECTROOT) !endif 为了搞清楚是怎么回事,我修改了makefile.def,加入MESSAGE语句,看看在build的时候到底跑到了哪个分支里。 修改完后,进入控制台,进入smartmedia/dll文件夹下,输入build。运行完后,打开文件夹下的build.log,发现跑到了第二种情况里。 原来是因为EXIST($(\_PUBLICROOT)/$(WINCETREE)/cesysgen/makefile这个条件满足了。 其中\_PUBLICROOT即WINCE500/public,而WINCETREE在makefile.def中定义为WINCETREE=$(\_CURSLMTREE),从set命令中可以查到,\_CURSLMTREE是项目名,我的项目名是voip。则整个路径就成了 WINCE500/public/voip/cesysgen/makefile,结果这个路径恰好存在,囧。 看来以后给项目起名字要复杂点,避免这个冲突,不然真是搞死人啊。 7. Warning: Image exceeds specified memory size by 4012 bytes and may not run. 内核组件加多了,超出了config.bib原有的定义。因此修改config.bib,增加RAMIMAGE的大小。注意,修改的是workspace下的config.bib而不是PLATFORM下的。我之前直接在platform builder的parameter view里面修改,结果改的config.bib根本就不会被工程访问到。 另外,最好把ROMSIZE也改成RAMIMAGE一样的大小,这样NK.nb0就可以装下整个NK了,否则会生成NK.nb1甚至更多。 但有可能在下载NK.bin的时候会发生错误,原因是eboot中有两个宏定义要和config.bib保持一致。ROM\_RAMIMAGE\_START和ROM\_RAMIMAGE\_SIZE。这两个宏要和config.bib中的RAMIMAGE的相关定义保持一致。 这样改完后,就可以正常运行了。 8. 直接用DNW将.nb0下载到RAM中无法运行 检查一下DNW的configuration中的download address,要和你下载的.nb0对应的.bib中RAMIMAGE的起始地址保持一致,但RAMIMAGE规定的是虚拟地址,而DNW的download address是物理地址,要通过查找MMU映射表,将其转换为物理地址。CE5.0上的映射表在oemaddrtab\_cfg.inc文件中。 9.要使用ActiveSync除了SYSGEN\_AS\_BASE之外,还需要哪些其他组件才能使用 SYSGEN\_USBFN\_SERIAL和SYSGEN\_PPP。当然,如果你想使用EVC上的远程调试工具,还需要加入Platform Manager组件。 10.修改OAL中的编译开关 log.c中,定义了: UINT32 g\_oalLogMask = OAL\_LOG\_ERROR|OAL\_LOG\_WARN|OAL\_LOG\_INFO; oal\_log.h中,定义了 \#define OAL\_LOG\_ERROR (0) \#define OAL\_LOG\_WARN (1) \#define OAL\_LOG\_FUNC (2) \#define OAL\_LOG\_INFO (3) 然后\#define OALZONE(n) (g\_oalLogMask&(1<<n)) 那我就觉得奇怪了,为啥在定义g\_oalLogMask的时候,不是移位了再或呢? 我先尝试了一下,将定义修改为UINT32 g\_oalLogMask = OAL\_LOG\_ERROR|OAL\_LOG\_WARN|OAL\_LOG\_INFO|OAL\_LOG\_IO|OAL\_LOG\_FUNC; 但发现Trace并没有什么变化。看来对g\_oalLogMask的修改是无效的,所以最好的方法是在OEMInit的一开始中,调用OALLogSetZones来设置要打开的ZONE。 11. 修改了微软的代码如何编译 第一步,进入命令行模式 第二步,进入要编译的文件的目录,build 第三步,sysgen 模块名 第四步,makeimg 12. 按下开发板复位键内存不会掉电,所以如果出现奇怪的情况,最好断电再次上电看看。 from : [http://blog.csdn.net/liuvictor2005/article/details/2581207][http_blog.csdn.net_liuvictor2005_article_details_2581207] [http_blog.csdn.net_liuvictor2005_article_details_2581207]: http://blog.csdn.net/liuvictor2005/article/details/2581207
相关 Java反射机制在开发中可能遇到的问题 Java反射机制是Java语言提供的一种能力,允许程序在运行时检查类信息、对象状态等。然而,反射机制也可能带来一些问题,如下所示: 1. 性能开销:反射操作通常比直接调用方法 「爱情、让人受尽委屈。」/ 2024年09月18日 04:15/ 0 赞/ 12 阅读
相关 Java反射机制在实际开发中可能遇到的问题 Java反射机制是Java语言强大的特性之一,它允许程序在运行时检查类、接口、方法和属性等信息。然而,在实际开发中,反射机制可能会带来以下问题: 1. 性能开销:反射通常需要 快来打我*/ 2024年09月12日 01:27/ 0 赞/ 22 阅读
相关 Java多态性在实际开发中可能遇到的问题实例 多态性是面向对象编程的一个重要特性,它允许使用同一个接口处理不同的对象。但在实际开发中,多态性可能会遇到以下问题: 1. **类型不匹配**: 当子类的方法签名与父类的 Love The Way You Lie/ 2024年09月10日 17:09/ 0 赞/ 22 阅读
相关 开发中可能碰到的问题 1、负责模块中有什么技术亮点? 1.表单数据重复提交,是通过接口幂等性的思路来解决的,首先是: 1. 从数据库方面考虑,数据设计的时候,如果有唯一性,考虑建立唯一 淡淡的烟草味﹌/ 2023年10月03日 21:10/ 0 赞/ 13 阅读
相关 Android开发过程中可能遇到的问题 一、导入项目时,提示 “invalid project description” 无效的项目描述,应该与ADT版本不同有关。 出错背景:外来源码放在工作区,然后导入Ecli 末蓝、/ 2022年07月17日 00:59/ 0 赞/ 417 阅读
相关 vue开发中遇到的问题 1、(1)Cannot find module 'electron’ 解决方案:cmd中输入:`npm install --save-dev electron`。 (2 た 入场券/ 2022年06月04日 00:05/ 0 赞/ 1094 阅读
相关 CE开发中可能遇到的问题 我会在blog中将开发CE5.0时遇到的问题总结出来,供有遇到相同问题的朋友参考。因为我在解决这些问题时,也是参考了网上很多朋友的文章或帖子,在这里对他们表示一下感谢呵呵。 我 偏执的太偏执、/ 2022年05月14日 01:21/ 0 赞/ 284 阅读
相关 React开发中遇到的问题 一.细节 React的核心思想就是组件化思想,页面会被切分成一些独立的、可复用的组件。 1.React中state和props分别是什么? props理解为从外 忘是亡心i/ 2021年09月15日 23:38/ 0 赞/ 688 阅读
相关 UITableView使用过程中可能遇到的问题 前言:记录一些UITableView使用过程中可能遇到的问题 环境:Xcode9 解决UITableViewStyleGrouped类型的TableView的cell... 你的名字/ 2021年03月26日 14:53/ 0 赞/ 707 阅读
还没有评论,来说两句吧...