前段时间因为工作需要,需要将pubic下生成lib的代码重新生成Dll文件,由于直接修改Public下的文件编译要花很长的时间,因此想到把它Clone到BSP包下编译,这样既节约时间,又方便修改。下面以Clone C:/WINCE600/PUBLIC/COMMON/OAK/DRIVERS/USB/CLASS/USBSER下的代码为例介绍具体的实现过程:
PS:USBSER是微软提供的可以直接使用的USB转串口的设备驱动程序(本人测试过PL2303串口芯片是可行的)。
平台:s3c6410+Wince6.0
1、复制Public下的USBSER整个文件夹到C:/WINCE600/PLATFORM/SMDK6410/Src/Drivers/Usb;
2、在PB下打开命令行工具,并切换路径到当前USBSER文件夹所在的路径,使用命令 sysgen_capture -p common usbser 转换完成后,将在当前目录下会生成sources.xxx的文件,由于我们只需要生成usbser的目标文件,因此可以将其他sources.xxx文件删除。
3、下面的工作就是如何生成dll文件:
实现方式一:(使用LIB生成DLL)
(1)在当前目录下新建一个文件夹XXX(USBSERDLL),把sourcess.usbser拷贝到该新建文件夹并重命名为sources;
(2)打开该sources,将DEFFILE宏修改为DEFFILE=$(TARGETNAME).def;
(3)从USBSER文件夹将usbser.def文件和makefile文件复制一份到USBSERDLL,即USBSERDLL文件夹中现在只有Makefile、sources和.def文件;
(4)在USB文件夹下的dir文件中,加入USBSERDLL、USBSER的编译选项信息;
(5)在USBSER的sources文件中删除WINCETARGETFILE0=$(_COMMONOAKROOT)/lib/$(_CPUINDPATH)/$(TARGETDEFNAME).def;
(6)build Usb文件夹,把编译报错的头文件(主要是在pubic下未包含的文件,该例子主要是缺少usbserv.h、usbinstl.h和usbclientfunc.h)复制到USBSER文件夹下,rebuild Usb,OK!
实现方式二:(直接生成DLL)
(1)打开USBSER下的sources文件,将TARGETNAME修改为TARGETNAME = USBSER(DLL的名称,不修改也可,主要是以前是USBSER_LIB以免引起误解),同时将TARGETTYPE修改为动态链接库TARGETTYPE=DYNLINK;
(2)删除WINCETARGETFILE0=$(_COMMONOAKROOT)/lib/$(_CPUINDPATH)/$(TARGETDEFNAME).def;
(3)打开生成的sourcess.usbser,拷贝其中的DLLENTRY=_DllMainCRTStartup到USBSER下的sources文件,同时拷贝SOURCELIBS和TARGETLIBS下的内容到sources文件;
(4)删除SOURCELIBS和TARGETLIBS下要连接的usbser相关的静态库或res(因为现在是直接生成DLL不需要了),这里即是删除$(_PUBLICROOT)/common/oak/lib/$(_CPUINDPATH)/usbser_lib.lib /;
(5)将TARGETLIBS下的$(_SYSGENOAKROOT)/lib/$(_CPUINDPATH)/com_mdd2.lib 复制到SOURCELIBS下,否则会报error LNK2001:的错误;
(6)在USB文件夹下的dir文件中,加入USBSER的编译选项信息;
(7)build Usb文件夹,把编译报错的头文件(主要是在pubic下未包含的文件,该例子主要是缺少usbserv.h、usbinstl.h和usbclientfunc.h)复制到USBSER文件夹下,rebuild Usb,OK!
这里适合于对USBSER文件夹下的源文件进行比较小的修改,如果要对这个驱动的源码进行比较大的或全面的修改,建议将SOURCELIBS和TARGETLIBS下涉及到的lib库对应的源文件全部拷贝出来,重新编译生成所需的动态库,具体可参考以下网址:http://blog.csdn.net/gooogleman/archive/2010/01/15/5192356.aspx
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhaojuncq/archive/2010/07/23/5757376.aspx