WinCE 流驱动一步一步来(转载)

本文详细介绍如何为WinCE.net中的内置设备开发流接口驱动,包括动态链接库的实现、必要的注册表设置以及Makefile、Sources和.def文件的创建。

 WinCE 流驱动一步一步来(理论基础)

在WinCE.net中,最简单的一个驱动程序莫过于一个内置(Built-in)设备的流接口驱动。对于一个不支持热拔插的设备,最快捷的方法就是为其实现一个内置的流接口的驱动。

对于这样一类驱动程序,我们只需要按一种特定的规则实现一个动态库,其中实现对所有的硬件功能的调用,再将这个动态库加入系统中,然后设置相关的注册表项,使得在系统启动时设备管理器能识别并且加载这个设备即可。

1.  实现动态链接库

此动态链接库与应用程序层所用的库并不很大差别,源文件可以是C、C++、甚至汇编,只是它要实现以下函数。

u       DllEntry(HINSTANCE DllInstance, INT Reason, LPVOID Reserved )

这个函数是动态链接库的入口,每个动态链接库都需要输出这个函数,它只在动态库被加载和卸载时被调用,也就是设备管理器调用LoadLibrary而引起它被装入内存和调用UnloadLibrary将其从内存释放时被调用,因而它是每个动态链接库最早被调用的函数,一般用它做一些全局变量的初始化。

参数:

DllInstance:DLL的句柄,与一个EXE文件的句柄功能类似,一般可以通过它在得到DLL中的一些资源,例如对话框,除此之外一般没什么用处。

Reason:

一般我们只关心两个值:DLL_PROCESS_ATTACH与DLL_PROCESS_DETACH,Reason等于前者是动态库被加载,等于后者是动态库被释放。

所以,我们可以在Reason等于前者是初始化一些资源,等于后者时将其释放。

u       
u       
u       
u       
u       
u       
u       

2.    注册表的设置

系统启动时启动设备管理程序,设备管理程序读取HKEY_LOCAL_MACHINE\Drivers\BuiltIn键的内容并加载已列出的流接口驱动程序。因此注册表对于驱动的加载有着关键作用。下面我们以设备名是“STR”来举一个例子:

[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\STR]
  "Prefix"="STR"
  "Dll"="MyDev.Dll"
  "Order"=dword:1

        

其中  "Prefix"="STR" 表示流接口的前缀,我们以后可以通过Creatfile 函数来实现对这个流接口的操作,实现如下:HANDLE hStr = CreateFile(TEXT("str1:"), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0) 。其中“str1:”中的表示设备好“1”是必需的,不管你的设备当中是不是刚好只有一个,不然的话会出现打开不了这个设备的情况。

"Dll"="MyDev.Dll" 指的是“STR”设备调用的驱动程序 DLL

HKEY_LOCAL_MACHINE\Drivers\BuiltIn\SampleDev 表示该注册表存在于CE系统注册表的 HKEY_LOCAL_MACHINE\Drivers\BuiltIn\SampleDev 目录下。

3.    创建Makefile和Sources和.def文件

这三个文件主要是来控制编译的,Makefile .def 文件实现比较简单,Sources 文件相对比较复杂。

Makefile 只需要这样一行!INCLUDE $(_MAKEENVROOT)\makefile.def ,具体的实现什么任务还不知道。

.def 文件定义需要输出的函数,这些函数能够被其它代码用动态加载的方法调用。

Sources 这个文件很重要,内容也多,最基本的一个文件该有如下内容。

 

TARGETNAME=MyDev(指定要生成的动态库的名称)

TARGETTYPE=DYNLINK(指定要生成的是一个动态库)

TARGETLIBS=$(_COMMONSDKROOT)\lib\$(_CPUINDPATH)\coredll.lib \

              $(_COMMONOAKROOT)\lib\$(_CPUINDPATH)\ceddk.lib

(下面两项指定需要与哪些动态库链接,一般要第一项就足够了)

DLLENTRY=DllEntry(指定动态库的入口函数)

SOURCES= (请在这写上你所有源文件的名字,它们将会被编译)

转载于:https://www.cnblogs.com/gmh915/archive/2009/01/08/1945444.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值