当前位置:华创抄板公司 >> 新闻中心 >> 行业动态 >> 深圳pcb抄板嵌入式WinCE开发中可能遇到若干的问题

深圳pcb抄板嵌入式WinCE开发中可能遇到若干的问题

    因此,如果我们在。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的定义: