wince流式驱动编程1
来源:互联网 发布:java 参数有什么用 编辑:程序博客网 时间:2024/06/17 20:55
静态加载 直接编译进内核中
前奏 了解硬件平台 硬件的连接 查看相关的munual手册
1.写源文件
主要完成以下函数实现对硬件资源的控制
XXX_Close (Device Manager)
XXX_Deinit (Device Manager)
XXX_Init (Device Manager)
XXX_IOControl (Device Manager)
XXX_Open (Device Manager)
XXX_PowerDown (Device Manager)
XXX_PowerUp (Device Manager)
XXX_Read (Device Manager)
XXX_Seek (Device Manager)
XXX_Write (Device Manager)
以上函数不必全部实现只跟据需要完成需要的就行了
BOOL WINAPI
DllEntry(HANDLE hinstDLL,
DWORD dwReason,
LPVOID /* lpvReserved */)
{
switch(dwReason)
{
case DLL_PROCESS_ATTACH:
DEBUGREGISTER((HINSTANCE)hinstDLL);
return TRUE;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
break;
#ifdef UNDER_CE
case DLL_PROCESS_EXITING:
break;
case DLL_SYSTEM_STARTED:
break;
#endif
}
return TRUE;
}
BOOL MY_Deinit(DWORD hDeviceContext)
{
BOOL bRet = TRUE;
RETAILMSG(1,(TEXT("USERMY: MY_Deinit/r/n")));
return TRUE;
BOOL MYGpioInit()
{
RETAILMSG(1,(TEXT("MY_Gpio_Setting----/r/n")));
return TRUE;
}
DWORD MY_Init(DWORD dwContext)
{
RETAILMSG(1,(TEXT("MY_Init----/r/n")));
// 1. Virtual Alloc
Virtual_Alloc();
MYGpioInit();
mInitialized = TRUE;
return TRUE;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
BOOL MY_IOControl(DWORD hOpenContext,
DWORD dwCode,
PBYTE pBufIn,
DWORD dwLenIn,
PBYTE pBufOut,
DWORD dwLenOut,
PDWORD pdwActualOut)
{
switch(dwCode)
{
Case XXX:
{
………………
}
default:
break;
}
RETAILMSG(1,(TEXT("MY:Ioctl code = 0x%x/r/n"), dwCode));
return TRUE;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
DWORD MY_Open(DWORD hDeviceContext, DWORD AccessCode, DWORD ShareMode)
{
RETAILMSG(1,(TEXT("USERMY: MY_Open/r/n")));
return true;
}
BOOL MY_Close(DWORD hOpenContext)
{
RETAILMSG(1,(TEXT("USERMY: MY_Close/r/n")));
return TRUE;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void MY_PowerDown(DWORD hDeviceContext)
{
RETAILMSG(1,(TEXT("USERMY: MY_PowerDown/r/n")));
//RETAILMSG(1,(TEXT("CAMERA: MY_PowerDown, m_Dx = D%u, init %d /r/n"), m_Dx,
mInitialized));
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void MY_PowerUp(DWORD hDeviceContext)
{
RETAILMSG(1,(TEXT("USERMY: MY_PowerUp/r/n")));
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
DWORD MY_Read(DWORD hOpenContext, LPVOID pBuffer, DWORD Count)
{
RETAILMSG(1,(TEXT("USERMY: MY_Read/r/n")));
return TRUE;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
DWORD MY_Seek(DWORD hOpenContext, long Amount, DWORD Type)
{
RETAILMSG(1,(TEXT("USERMY: MY_Seek/r/n")));
return 0;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
DWORD MY_Write(DWORD hOpenContext, LPCVOID pSourceBytes, DWORD NumberOfBytes)
{
RETAILMSG(1,(TEXT("USERMY: MY_Write/r/n")));
return 0;
}
DWORD MY_Seek(DWORD hOpenContext, long Amount, DWORD Type)
{
RETAILMSG(1,(TEXT("USERMY: MY_Seek/r/n")));
return 0;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
DWORD MY_Write(DWORD hOpenContext, LPCVOID pSourceBytes, DWORD NumberOfBytes)
{
RETAILMSG(1,(TEXT("USERMY: MY_Write/r/n")));
return 0;
}
以上文件为经过编译,只供参考
2.source文件
!if 0
File: sources
Author: jeffmi
Copyright (c) 1995-2002 Microsoft Corporation. All rights reserved.
!endif
RELEASETYPE=PLATFORM
TARGETNAME=MYDriver
TARGETTYPE=DYNLINK
DLLENTRY=DllEntry
TARGETLIBS= /
$(_COMMONSDKROOT)/lib/$(_CPUINDPATH
RELEASETYPE=PLATFORM
TARGETNAME=MYDriver
TARGETTYPE=DYNLINK
DLLENTRY=DllEntry
TARGETLIBS= /
$(_COMMONSDKROOT)/lib/$(_CPUINDPATH)/coredll.lib /
MSC_WARNING_LEVEL = $(MSC_WARNING_LEVEL) /W3 /WX
INCLUDES= /
$(_TARGETPLATROOT)/inc; /
$(_COMMONOAKROOT)/inc;/
$(_PUBLICROOT)/common/oak/inc;$(_PUBLICROOT)/common/sdk/inc;$(_PUBLI
CROOT)/common/ddk/inc; /
../../inc
SOURCES= /
MYdriver.cpp /
3.makefile文件
#
# DO NOT EDIT THIS FILE!!! Edit ./sources. if you want to add a new source
# file to this component. This file merely indirects to the real make file
# that is shared by all the components of Peg
#
!INCLUDE $(_MAKEENVROOT)/makefile.def
4.def导出文件
;
; Windows CE MY Driver. Written by capbily
LIBRARY userMY
EXPORTS
MY_Close
MY_Deinit
MY_Init
MY_IOControl
MY_Open
5.修改 pb中platfrom.bib文件,加入如下内容
;mydriver
mydriver.dll $(_FLATRELEASEDIR)/mydriver.dll NK SH
6.修改注册表文件,在platform.reg中加入
[HKEY_LOCAL_MACHINE/Drivers/BuiltIn/MYdriver]
"Prefix"="mydriver"
"Dll"="mydriver.dll"
7.
重新编译内核,点PB5 的主菜单Build OS --> Sysgen 即可,这样就可以生成包含以
上my驱动的内核映象文件NK.bin 和NK.nb0 了。
8.evc编写测试应用程序
要在应用程序中调用驱动程序,Createfile()打开驱动程序,当调用craetefile时首先调用文件管理器,文件管理器对其进行判断,判断不是文件然后交给设备管理器,设备管理器把驱动程序映射到自己的内存空间。
HANDLE MYdriver=CreateFile(L"MY1:",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL );
ReadFile(MYdriver,………………..)
DeviceIoControl(MYdriver,IO_CTL_MY_CLEAR,NULL,0,NULL,0,NULL,NULL);
- wince流式驱动编程1
- WinCE LCD驱动编程分析
- WinCE流式接口驱动架构
- Wince 流接口驱动
- 【转载】WinCE 流驱动
- 【转载】WinCE 流驱动
- WinCE流驱动入门
- wince音频驱动---1
- 我的第一个WinCE驱动--流式驱动【转】
- WinCE下的流驱动
- WINCE 流驱动的xx_IOControl
- WinCE 流驱动一步一步来
- wince流驱动开发流程
- WinCE流驱动基础知识小结
- WinCE流驱动基础知识小结
- WinCE 流驱动一步一步来
- wince流驱动开发流程
- WinCE 流驱动一步一步来
- SQLserver2000中 针对查询结果中存在不固定字段时 如何排除固定字段只查询不固定字段
- js上传文件控制
- C#连接各类数据库的方法集合
- 编译期与运行期
- 浅谈程序员的数学修养
- wince流式驱动编程1
- Linux-是你玩他,还是他玩你
- QTP内部对象
- shezhi neicun
- SDRAM工作原理及S3C2410 SDRAM控制器配置方法(1)
- 人的一生,有三件事情不能等
- 三年之痒
- ExtJS调用WCF-----实现JSON传递
- 一点点编程心得