WinCE驱动编写小结
回一个结构指针,用于区分哪个应用程序调用了驱动,这个值还作为参数传递给其他接口函数XXX_Read、XXX_Write、XXX_Seek、XXX_IOControl。
4)BOOL XXX_Close(DWORD hOpenContext);
hOpenContext:XXX_Open返回值。
关闭设备,释放资源。由CloseHandle函数间接调用。
5)DWORD XXX_Read(DWORD hOpenContext, LPVOID pBuffer, DWORD Count);
hOpenContext:XXX_Open返回值。
pBuffer:缓冲区指针,接收数据。
Count:缓冲区长度。
由ReadFile函数间接调用,用来读取设备上的数据。返回读取的实际数据字节数。
6)DWORD XXX_Write(DWORD hOpenContext, LPCVOID pBuffer, DWORD Count);
hOpenContext:XXX_Open返回值。
pBuffer:缓冲区指针,接收数据。
Count:缓冲区长度。
由WriteFile函数间接调用,把数据写到设备上,返回实际写入的数据数。
7)BOOL XXX_IOControl(DWORD hOpenContext, DWORD dwCode, PBYTE pBufIn, DWORD dwLenIn, PBYTE pBufOut, DWORD dwLenOut, PDWORD pdwActualOut);
hOpenContext:XXX_Open返回值。
dwCode:控制命令字。
pdwActualOut:实际输出数据长度。
用于向设备发送命令,应用程序通过DeviceIoControl调用来实现该功能。要调用这个接口还需要在应用层和驱动之间建立一套相同的命令,通过宏定义CTL_CODE(DeviceType, Function, Method, Access来实现。如:
#define IOCTL_INIT_PORTS \ CTL_CODE(FILE_DEVICE_UNKNOWN,0X801,METHOD_BUFFERED,FILE_ANY_ACCESS)
8)void XXX_PowerDown(DWORD hDeviceContext);
hDeviceContext:XXX_Init的返回值。
负责设备的上电控制。
9)void XXX_PowerUp(DWORD hDeviceContext);
hDeviceContext:XXX_Init的返回值。
负责设备的断电控制
10) DWORD IOC_Seek(DWORD hOpenContext, long Amount, WORD Type)
hOpenContext:XXX_Open返回值。
Amount:指针的偏移量。
Type:指针的偏移方式。
将设备的数据指针指向特定的位置,应用程序通过SetFilePointer函数间接调用。不是所有设备的属性上都支持这项功能。
5、流接口驱动的加载和注册表设置:
系统启动时启动设备管理程序,设备管理程序读取HKEY_LOCAL_MACHINE\Drivers\BuiltIn键的内容并加载已列出的流接口驱动程序。因此注册表对于驱动的加载有着关键作用。下面是一个例子:
“Prefix”=”XXX”
“Dll”=”drivername.dll”
其中,“Prefix”=“XXX”中的XXX要和XXX_Init等函数中的一样。CreateFile创建的驱动名前缀也必须和它们一致。
6、驱动程序的编写、编译及其相关目录、配置文件的格式和修改:
1)首先必须在PB相应平台的的driver目录下建立要创建的驱动所在的目录。如在x:\Wince420\platform\smdk2410\drivers目录下建立一个IOCtrol目录。
2)修改Drivers目录下的dirs文件。
3)创建驱动源文件XXX.c,在该文件中实现上述流接口函数。并且加入DLL入口函数:
BOOL DllEntry(HINSTANCE hinstDll, /*@parm Instance pointer. */
DWORD dwReason, /*@parm Reason routine is called. */
LPVOID lpReserved /*@parm system parameter. */
)
4)创建Makefile和Sources和.def文件,控制编译。
5)使用CEC Editor修改cec文件,编译添加的新特性。
6)复制新生成的4个文件到Release目录下,修改注册表文件platform.reg和platform.bib文件。
7)Make Image。
8)DownLoad Image。
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)
