一个驱动至少包括: 这里我们建立驱动的名字为:FlowLED
.cpp .def MakeFile sources (驱动里面写)
.reg .bib (在对应的下面修改)
创建Makefile和Sources和.def文件
这三个文件主要是来控制编译的:
Makefile 只需要这样一行(所有流式驱动都一样): !INCLUDE $(_MAKEENVROOT)/makefile.def
作用:负责帮助开发人员简化代码的编译、链接等构建工作。
(参考)http://www.cnblogs.com/AndyGe/archive/2009/12/02/1615433.html
sources 也是一个文本文件,它为子目录中的源代码设置了不少宏定义
RELEASETYPE=PLATFORM
TARGETNAME=FlowLED(指定要生成动态库的名称(FlowLED)就是与你建立驱动文件夹里面函数的名字一样,记住不是文件夹哦,)
DLLENTRY=DllEntry (指定动态库的入口函数)
DEFFILE=$(TARGETNAME).def (它指定模块定义文件(.def)的名称,这里指定了模块定义文件的名称为FlowLED.def)
TARGETLIBS= /
$(_COMMONSDKROOT)/lib/$(_CPUINDPATH)/coredll.lib /
MSC_WARNING_LEVEL = $(MSC_WARNING_LEVEL) /W3 /WX
INCLUDES= /
$(_TARGETPLATROOT)/src/inc; /
$(_COMMONOAKROOT)/inc; /
$(_PUBLICROOT)/common/oak/inc;$(_PUBLICROOT)/common/sdk/inc;$(_PUBLICROOT)/common/ddk/inc; /
../../inc
//一下一般用第一个就足够了。
SOURCES= /
FlowLED.cpp (请在这写上你所有源文件的名字,它们将会被编译)
TARGETTYPE=DYNLINK (指定要生成的是一个动态库)
.def文件 这里应该是FlowLED.def
.def文件定义了DLL的导出函数列表。文件定义需要输出的函数,这些函数能够被其它代码用动态加载的方法调用
这里包括的内容如下:
LIBRARY FlowLED
EXPORTS
LED_Init
LED_Deinit
LED_Open
LED_Close
LED_Read
LED_Write
LED_Seek
LED_IOControl
LED_PowerDown
LED_PowerUp
注册表的设置
系统启动时启动设备管理程序,设备管理程序读取HKEY_LOCAL_MACHINE/Drivers/BuiltIn键的
内容并加载已列出的流接口驱动程序。因此注册表对于驱动的加载有着关键作用。
1。在F:/WINCE500/PLATFORM/S3C2440/Src/Drivers目录下面的dir文件下,添加你新增设的驱动,
DIRS=/
FlowLED/ (这个是我们新添加的,写的那个驱动久添加那个驱动)
DRVLIB/
ceddk/
·····
2。在F:/WINCE500/PLATFORM/S3C2440/Files下修改两个注册信息。
第一个是:platform.reg, 在最后天添加:
;FlowLED
[HKEY_LOCAL_MACHINE/Drivers/BuiltIn/FlowLED]
"Prefix"="LED"
"Dll"="FlowLED.dll"
"FriendlyName"="FlowLED"
"Index"=dword:0
"Order"=dword:0
详细解释:
"Prefix"="LED" :表示流接口的前缀,我们以后可以通过Creatfile 函数来实现对这
个流接口的操作(LED就是.def文件下的相对应,也就是说都是流接口端)。
"Dll"="FlowLED.dll":指的是“FlowLED(文件名)”设备调用的驱动程序 DLL。
"FriendlyName"="FlowLED":就是驱动的名字。
第二个是:platform.bib下面添加一句话:FLowLED.dll $(_FLATRELEASEDIR)/FlowLED.dll NK SH
FLowLED.dll(驱动动态库文件) $(_FLATRELEASEDIR)/FlowLED.dll(驱动动态库文件) NK SH
意思:内核映像(NK.nb0或NK.bin文件)中的FLowLED.dll模块来自该目录下的FLowLED.dll文件,
SH指明文件属性: S为系统文件 H指明为:隐藏文件
Order为0的时候表示存在多个前缀为LED的驱动的时候,该驱动最先加载。
index为1的时候表示设备驱动名从LED1,开始,
比如:
hFile=CreateFile(TEXT("LED0:"),GENERIC_READ | GENERIC_WRITE,0, NULL,OPEN_EXISTING,0,0);
这里是从0开始的。