您的位置:首页 > 编程语言

把微软代码搬到BSP下调试的方法(作者:gooogleman@foxmail.com )

2010-01-15 09:31 337 查看
// Topic:把微软代码搬到BSP下调试的方法

// 作者:gooogleman@foxmail.com

// 论坛账号:gooogleman(经常在CSDN出没)

// 版权:gooogleman

// 平台:wince5.0.0 FL2440 5.0BSP
(飞凌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,搞定了!完工!好久不发博客了,虽然是入门级,但是多少有点帮助。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐