1. 程式人生 > >把微軟程式碼搬到BSP下除錯的方法 作者 gooogleman foxmail com

把微軟程式碼搬到BSP下除錯的方法 作者 gooogleman foxmail com

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

      
// Topic
:把微軟程式碼搬到BSP下除錯的方法

//
作者:[email protected]

//
論壇賬號: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沒有必要。

      現在就是用PBfind 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路徑

二、BSPlib會覆蓋同名的微軟的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照樣畫葫蘆即可。修改了,這兩個libsources,那麼SerialPDDsources也要改變,就是這個兩個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,搞定了!完工!好久不發部落格了,雖然是入門級,但是多少有點幫助。

           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述