把微软代码搬到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,搞定了!完工!好久不发博客了,虽然是入门级,但是多少有点帮助。
// 作者: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,搞定了!完工!好久不发博客了,虽然是入门级,但是多少有点帮助。
相关文章推荐
- wince驱动异常调试方法(作者:gooogleman@foxmail.com)
- 把微软代码搬到BSP下调试的方法(转)
- 把微软代码搬到BSP下调试的方法(转)
- 关于VirtualAlloc和VirtualCopy的奇怪问题(作者:gooogleman@foxmail.com)
- 2440 定时器(PWM)学习(作者:gooogleman@foxmail.com)
- 如何实现2440 背光控制(作者:gooogleman@foxmail.com)
- 需要2410 标准5.0 BSP的请发邮件给我——gooogleman@foxmail.com
- serialusbfn.dll这个罪魁祸首搞得我郁闷之极(作者:gooogleman@foxmail.com)
- 一个嵌入式产品的从研发到量产的流程(作者:gooogleman@foxmail.com)
- 一个嵌入式产品的从研发到量产的流程(作者:gooogleman@foxmail.com)
- 2440 中断优先级问题(作者gooogleman@foxmail.com)
- 【原创】触摸屏点击几下或者几百下无法响应的原因分析(作者:gooogleman@www.gooogleman.com )
- 【原创】中国嵌入式高端ARM开发板的江湖故事——详细分析国内各家ARM11 S3C6410 开发板的选型以及竞争格局(作者:gooogleman @www.gooogleman.com)
- 2440支持大容量SD卡的解决办法(作者:www.gooogleman.com 站长gooogleman)
- 让S5pv210 android2.3 系统支持USB鼠标的方法(作者:gooogleman)
- wince驱动异常调试方法(作者:wogoyixikexie@gliet)
- 第三方登录、支付接口本地代码调试方法
- ReactNative 代码调试方法
- Python调试代码的4种方法:print、log、pdb、PyCharm的debug
- VS调试异常代码 HRESULT:0x80070057 (E_INVALIDARG)解决方法