把微软代码搬到BSP下调试的方法(转)

// Topic:把微软代码搬到BSP下调试的方法

// 作者:wogoyixikexie@gliet.gooogleman

// 论坛账号:gooogleman (经常在CSDN、www.armce.com/bbs出没)

// 版权:桂林电子科技大学一系科协wogoyixikexie@gliet.gooogleman

// 平台:wince5.0.0 FL2440 5.0 BSP (飞凌FL2440开发板)

// 发布日期:2010-1-14

// 最后修改:

// 注意事项:未经作者同意,商业网站不能转载,并且不得在转载的时候擅自修改、删除文章的任何部分

//-------------------------------------------------------------------------------------------------

调试多层wince驱动的时候,通常要把微软代码(比如MDD层)搬到BSP调试,这样做有以下好处:

一、方便编译,在BSP好操作

二、MDD层一般是多个驱动公用,为了防止调试时候修改,影响其他驱动,搬到BSP下供我们要调试的驱动独立使用比较好。以前我就修改过串口MDD,没有想到同步软件也用到串口MDD,导致发生同步软件受干扰的现象。

今天需要重新移植串口驱动,那么我就记录下这个实际例子,以方便需要的人。呵呵,虽然简单,但是很多人问过这个问题。Come on!微软有自动修改sources的工具,我曾经用过,但是我觉得我们还是手动修改比较合适,这样能安全,也能加深对BSP结构,sources等的了解,呵呵。

先看sources吧

!if "$(BSP_NOSERIAL)" == "1"

SKIPBUILD=1

!endif

WINCEOEM=1

TARGETNAME=serial_smdk2440

TARGETTYPE=DYNLINK

RELEASETYPE=PLATFORM

TARGETLIBS=$(_COMMONSDKROOT)\lib\$(_CPUINDPATH)\coredll.lib \

           $(_SYSGENOAKROOT)\lib\$(_CPUINDPATH)\ceddk.lib

SOURCELIBS=$(_SYSGENOAKROOT)\lib\$(_CPUINDPATH)\serpddcm.lib \

           $(_SYSGENOAKROOT)\lib\$(_CPUINDPATH)\com_mdd2.lib

DEFFILE=serial.def

DLLENTRY=DllEntry

INCLUDES=$(_TARGETPLATROOT)\src\inc;

SOURCES= ser_smdk2440.cpp \

           pdds3c2440_ser.cpp

#xref VIGUID {549CAC8D_8AF0_4789_9ACF_2BB92599470D}

#xref VSGUID {0601CE65_BF4D_453A_966B_E20250AD2E8E}

和串口相关的lib有

TARGETLIBS=$(_COMMONSDKROOT)\lib\$(_CPUINDPATH)\coredll.lib \

           $(_SYSGENOAKROOT)\lib\$(_CPUINDPATH)\ceddk.lib

以及

SOURCELIBS=$(_SYSGENOAKROOT)\lib\$(_CPUINDPATH)\serpddcm.lib \

           $(_SYSGENOAKROOT)\lib\$(_CPUINDPATH)\com_mdd2.lib

呵呵,我们现在移植

SOURCELIBS=$(_SYSGENOAKROOT)\lib\$(_CPUINDPATH)\serpddcm.lib \

           $(_SYSGENOAKROOT)\lib\$(_CPUINDPATH)\com_mdd2.lib

就够了,TARGETLIBS没有必要。

       现在就是用PB的find in file 功能找到生成serpddcm.lib以及com_mdd2.lib的源码。

他们都在C:\WINCE500\PUBLIC\COMMON\OAK\DRIVERS\SERIAL下面,现在复制到BSP下。为了便于管理把COM_MDD2  SERPDDCM  SerialPDD(原BSP 下串口PDD)都放在serial文件夹下,并建立dirs

!if 0

Copyright (c) Microsoft Corporation.  All rights reserved.

!endif

!if 0

Use of this source code is subject to the terms of the Microsoft end-user

license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.

If you did not accept the terms of the EULA, you are not authorized to use

this source code. For a copy of the EULA, please see the LICENSE.RTF on your

install media.

!endif

DIRS= \   

    COM_MDD2 \

    SERPDDCM \

    SerialPDD

COM_MDD2 和 SERPDDCM到了BSP下,要修改一下sources,根据如下要求修改:

一、指定生成的lib放到到BSP的存放lib路径

二、BSP的lib会覆盖同名的微软的lib,为了该lib的唯一性,并保证不影响别的驱动,我们要把原lib名字改一下,保证被我们的驱动唯一可用。

以COM_MDD2为例子,原sources为:

TARGETNAME=com_mdd2

TARGETTYPE=LIBRARY

WINCEOEM=1

CONDITIONAL_INCLUDES=devemul.h nteser.h

CDEFINES=$(CDEFINES) -DUSE_NEW_SERIAL_MODEL

SOURCES=mdd.c

#xref VIGUID {eb1ce42a-8611-4374-9ab8-e8902cbabf50}

#xref VSGUID {920b93be-918b-40ea-abd8-26c99082eda4}

为了保证满足要求一,修改为:

RELEASETYPE=PLATFORM          #加入这句标明lib放在BSP lib路径下

TARGETNAME=com_mdd2BSP        #修改成这个名字是避免把微软的lib覆盖了

TARGETTYPE=LIBRARY

WINCEOEM=1

CONDITIONAL_INCLUDES=devemul.h nteser.h

CDEFINES=$(CDEFINES) -DUSE_NEW_SERIAL_MODEL

SOURCES=mdd.c

#xref VIGUID {eb1ce42a-8611-4374-9ab8-e8902cbabf50}

#xref VSGUID {920b93be-918b-40ea-abd8-26c99082eda4}

呵呵,SERPDDCM照样画葫芦即可。修改了,这两个lib的sources,那么SerialPDD的sources也要改变,就是这个两个lib的路径以及名字都要跟着修,如下:

!if "$(BSP_NOSERIAL)" == "1"

SKIPBUILD=1

!endif

WINCEOEM=1

TARGETNAME=serial_smdk2440

TARGETTYPE=DYNLINK

RELEASETYPE=PLATFORM

TARGETLIBS=$(_COMMONSDKROOT)\lib\$(_CPUINDPATH)\coredll.lib \

           $(_SYSGENOAKROOT)\lib\$(_CPUINDPATH)\ceddk.lib

!if 0

#SOURCELIBS=$(_SYSGENOAKROOT)\lib\$(_CPUINDPATH)\serpddcm.lib \

#           $(_SYSGENOAKROOT)\lib\$(_CPUINDPATH)\com_mdd2.lib

!endif

SOURCELIBS=$(_TARGETPLATROOT)\lib\$(_CPUINDPATH)\serpddcm_BSP.lib \

          $(_TARGETPLATROOT)\lib\$(_CPUINDPATH)\com_mdd2BSP.lib \

——注意修改的路径。

DEFFILE=serial.def

DLLENTRY=DllEntry

INCLUDES=$(_TARGETPLATROOT)\src\inc;

SOURCES= ser_smdk2440.cpp \

         pdds3c2440_ser.cpp

#xref VIGUID {549CAC8D_8AF0_4789_9ACF_2BB92599470D}

#xref VSGUID {0601CE65_BF4D_453A_966B_E20250AD2E8E}

编译ing……OK,搞定了!完工!好久不发博客了,虽然是入门级,但是多少有点帮助。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/gooogleman/archive/2010/01/15/5192356.aspx

posted @ 2010-09-13 14:32  gmh  阅读(718)  评论(0编辑  收藏  举报