有关platform builder 5.0编写流接口驱动程序,高手指点!!!
首先,在platform builder 5.0环境中,打开一个成功编译后的系统工程,执行file——New Project or file——project选项卡:WCE Dynamic-Link Library,这样是不是要写一个流驱动呢?
我之前手工填加过一个GPIO的流驱动,用来驱动IO口上的LED,这次我基本上是把代码按位粘贴过来的,可编译不能通过,说找不到VirtualCopy函数,我很纳闷,VirtualAlloc和VirtualFree不报错,为什么单单VirtualCopy报错找不到呢,我已经济包含了头文件windows.h了啊……
这三个函数的使用顺序是先VirtualAlloc,然后VirtualCopy,最后VirtualFree
于是我把调用VirtualCopy的语句给删了,我想只要能编译通过,那怕是驱动不能用,最起码看看能不能编译通过?
但结果还是没成功,还是编译成功不了,最后说:
Warning: Found duplicate entry 'ndis.dll NK E:\WINCE500\PBWorkspaces\study_catalog\RelDir\smdk2440_ARMV4I_Release\ndis.dll 00000007' ... skipping
Warning: Found duplicate entry 'binfs.dll NK E:\WINCE500\PBWorkspaces\study_catalog\RelDir\smdk2440_ARMV4I_Release\binfs.dll 00000007' ... skipping
Warning: Found duplicate entry 'gpiodriver.dll NK E:\WINCE500\PBWorkspaces\study_catalog\RelDir\smdk2440_ARMV4I_Release\gpiodriver.dll 00000001' ... skipping
Error: Could not find file 'E:\WINCE500\PBWorkspaces\study_catalog\RelDir\smdk2440_ARMV4I_Release\GPIO.dll' on disk
GPIO.dll E:\WINCE500\PBWorkspaces\study_catalog\RelDir\smdk2440_ARMV4I_Release\GPIO.dll NK
Error: failed setting line
makeimg: FATAL ERROR: Command returned non-zero exit code 1 (dec).
makeimg: FATAL ERROR: Command returned non-zero exit code 1 (dec).
这到底是什么错误啊?有碰到过类似错误的吗?
以前写过GPIO的流驱动,是手工在BSP文件夹下一个文件一个文件建立的,但我看了一下书,好像可以按开始我说的那样编流驱动的,但为什么不能成功呢?
我参考的书是:人民邮电出版社,华清远见写的《Windows CE嵌入式开发标准教程》的第十三章
[解决办法]
GPIO.dll没有生成
[解决办法]
帮顶,还不如手动来做呢~
[解决办法]
楼主请参考:
http://blog.csdn.net/JNU_kinke/archive/2009/11/05/4772518.aspx
[解决办法]
没觉得这样很高啊~~手动我觉得挺快的~
[解决办法]
PB编译流驱动很好用啊,
从你的错误信息来看应该是GPIO.DLL没有找到。首先在增加驱动之前确保你的整个工程能够顺利通过,然后再增加你的驱动,然后每次只BULID你的新增的驱动文件夹。然后再来慢慢排错。
1、SOURCES文件的结构:
首先我们来看一个SOURCES文件,如下所示,SOURCES主要包括了一些用户的宏定义,这些宏会被MAKEFILE和NMAKE使用,来编译项目的源代码。
!if "$(BSP_NOHSMMC_CH0)"=="1" ##如果SMDK6410.BAT中SET BSP_NOHSMMC_CH0=1那么这个项目将不被编译。
SKIPBUILD=1
!endif
SYNCHRONIZE_DRAIN=1
RELEASETYPE=PLATFORM##生成文件存放的位置
TARGETDEFNAME=s3c6410_hsmmc
DEFFILE=$(TARGETDEFNAME).def##指定DLL文件导出接口函数
TARGETNAME=s3c6410_hsmmc0 ##DLL文件名称
TARGETTYPE=DYNLINK ##表示生成DLL文件
DLLENTRY=DllEntry ##DLL入口地址
##以下是源文件里用的到宏的定义
CDEFINES=$(CDEFINES) # -D_SMDK6410_CH0_EXTCD_ # -D_SMDK6410_CH0_WP_
##以下是头文件的路径列表
INCLUDES=$(INCLUDES);..\s3c6410_hsmmc_lib
##以下是要动态链接的库文件
TARGETLIBS= \
$(_COMMONOAKROOT)\lib\$(_CPUINDPATH)\ceddk.lib \
$(_COMMONSDKROOT)\lib\$(_CPUINDPATH)\coredll.lib \
$(_TARGETPLATROOT)\lib\$(_CPUINDPATH)\DriverLib.lib
##以下是要静态链接到目标文件中的库文件列表
SOURCELIBS= \
$(_COMMONOAKROOT)\lib\$(_CPUINDPATH)\sdcardlib.lib \
$(_COMMONOAKROOT)\lib\$(_CPUINDPATH)\sdbus2.lib \
$(_TARGETPLATROOT)\lib\$(_CPUINDPATH)\s3c6410_hsmmc0_lib.lib
SOURCES=s3c6410_hsmmc.cpp##要编译的源文件。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/macrozhang001/archive/2010/05/01/5547846.aspx
[解决办法]
可以参考别人的流驱动的做法。
源码中需要包含需要的头文件
source文件中的 INCLUDE TARGETLIBS等中也需写入头文件,库文件的路径
最后,如果不知道某个函数该对应哪个头文件,可以求助于vs2005活pb里面的帮助文档,它会告诉你API函数所需要的头文件。
[解决办法]
source 没觉得很复杂~,楼主好好看看source的每一项,其实很简单。