把微軟程式碼搬到BSP下除錯的方法 作者 gooogleman foxmail com
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
// Topic:把微軟程式碼搬到BSP下除錯的方法
// 作者:[email protected]
// 論壇賬號:gooogleman
// 版權: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,搞定了!完工!好久不發部落格了,雖然是入門級,但是多少有點幫助。