开发wince驱动步骤

合集下载

WINCE 流接口驱动程序开发

WINCE 流接口驱动程序开发

Softeem Consultancy Service
BOOL XXX_Deinit(DWORD hDeviceContext); ; 参数: hDeviceContext 参数 由XXX_Init创建时生成的设备句柄 创建时生成的设备句柄 . 返回值:调用成功 返回TURE,调用失败 返回FALSE. 返回值 调用成功,返回 调用失败,返回 调用成功 返回 调用失败 返回 当用户需要卸载一个驱动程序时,设备管理器会调用这个 描 述:当用户需要卸载一个驱动程序时 设备管理器会调用这个 当用户需要卸载一个驱动程序时 函数来卸载这个驱动程序.应用程序不能直接调用这个函数 设备 函数来卸载这个驱动程序 应用程序不能直接调用这个函数,设备 应用程序不能直接调用这个函数 管理器通过DeactivateDevice()函数来调用这个函数 函数来调用这个函数. 管理器通过 函数来调用这个函数 DWORD XXX_Open(DWORD hDeviceContext, DWORD AccessCode , DWORD ShareMode); ; 参数:hDeviceContext XXX_Init的返回值. 的返回值. 参数 的返回值 AccessCode 访问模式标志,读,写或其他. 访问模式标志 读 写或其他. ShareMode:驱动的共享方式标志 例如串口通迅中将设备 :驱动的共享方式标志,例如串口通迅中将设备 设置为可读可写模式. 设置为可读可写模式. 返回值:返回驱动程序引用实例句柄 返回驱动程序引用实例句柄. 返回值 返回驱动程序引用实例句柄 描述:本函数用于打开一个设备驱动程序 当应用程序准备对某一 描述 本函数用于打开一个设备驱动程序,当应用程序准备对某一 本函数用于打开一个设备驱动程序 个设备进行读或写操作时,应用程序必须先执行 应用程序必须先执行CreateFile()函数 个设备进行读或写操作时 应用程序必须先执行 函数 用于打开这个设备.本函数执行了以后 系统才能执行读写操作. 本函数执行了以后,系统才能执行读写操作 用于打开这个设备 本函数执行了以后 系统才能执行读写操作

wince系统开发实验三

wince系统开发实验三

w i n c e系统开发实验三 Document number【AA80KGB-AA98YT-AAT8CB-2A6UT-A18GG】实验三、W i n d o w s C E驱动开发一、实验目的1、学会使用WinCE 操作系统开发工具2、熟悉开发环境3、了解嵌入式系统驱动开发的基本思想和开发过程二、实验内容学习使用Platform Builder 4.2 集成开发环境,建立流驱动程序。

了解WinCE 基本系统体系架构了解WINDOWS CE系统设备驱动基础知识和方法学习使用Platform Builder 4.2 集成开发环境,建立流驱动程序三、预备知识C 语言基本知识,设备驱动基础知识和方法,WinCE 基本系统体系架构。

四、实验设备及工具硬件:PC 一台P3 以上(内存不小于384MB,安装完工具硬盘空间不得小于600M)、ARM9实验箱(包含NETARM2410-S 实验板、JTAG 仿真器、各种串口线、并口线、网线、光盘等)一台。

软件:PC 操作系统Win2000 以上、ADS1.2 集成开发环境、Platform Builder 4.2 版本、Source Insight3.0。

五、实验原理及说明1、WinCE 驱动程序架构目前WinCE 拥有两种驱动架构模型,一种是本机设备驱动,另一种是流接口设备驱动。

其中本机设备驱动已经被Microsoft 开发并由系统直接支持,由GWES (图形窗口及事件子系统)统一管理和加载;流驱动则是由WinCE 设备管理器来管理的。

这种组织形式相对于UNIX体系来说是比较复杂的。

本机设备驱动适合于集成到CE 平台的设备。

例如电源驱动,它们已经成为了GWES 的一部分,不表现为单个的DLL 使用。

这些驱动程序通常和系统有着较为紧密的联系,所以通常是和系统一起加载的。

流设备驱动由于具有较好的可移植性和可扩展性,被设备管理器独立出来管理统筹。

在本实验中,将以一个示例的流驱动演示程序来讲述简单驱动的工作。

WINCE驱动程序快速入门

WINCE驱动程序快速入门

WINCE驱动程序快速入门有人也许和我一样比较心急,想尽快知道如何去写一个具体的驱动程序,这里,假设您对驱动程序已经有比较好的了解,告诉大家一个快速上路的方法。

当然,如果您有足够的时间我建议在动手之前还是深入了解一下CE整个系统架构。

在CE中,最简单的一个驱动程序莫过于一个内置(Built-in)设备的流接口驱动。

对于一个不支持热拔插的设备,最快捷的方法就是为其实现一个内置的流接口的驱动。

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

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

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

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

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

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

DWORD XXX_Init(LPCTSTR pContext,LPCVOID lpvBusContext);它是驱动程序的动态库被成功装载以后第一个被调用的函数。

实验五WinCE中的驱动程序开发

实验五WinCE中的驱动程序开发

WinCE中的驱动程序开发一.实验目的1、熟悉WinCE中流式接口驱动程序的12个接口的功能。

2、掌握流式驱动程序的工作过程。

3、能够编写出流式接口的驱动程序。

二.实验内容使用VS2005的智能设备应用程序开发方法,进行网络通信的编程,并通信多线程技术实现服务器与客户端之间的文件传输。

三.实验设备及工具硬件:PC机一台;软件:Windows XP操作系统,VS2005开发环境,WinCE 6.0开发环境,或Windows Mobile 5.0 SDK四.实验步骤及说明(1)写出流式接口驱动程序的12个接口,及每个接口的功能。

答:见教材515页(2)写出流式驱动程序的工作过程。

答:第一步:加载驱动程序,主要有两种加载方式:(1)当系统启动时,设备管理器搜寻注册表的HKEY_LOCAL_MACHINE\Drivers\BuiltIn键下面的子键,并逐一加载该子键下的每一个驱动,此过程称为BusEnum;(2)应用程序可调用ActivateDeviceEx()函数动态地加载驱动程序。

第二步:设备管理器从注册表的dll键值中获取驱动程序所在的DLL文件名。

第三步:设备管理器调用LoadDriver()函数把该DLL加载到自己的虚拟地址空间中。

第四步:设备管理器在注册表的HKEY_LOCAL_MACHINE\Drivers\Active下,记录所有已经加载的驱动程序。

第五步:设备管理器调用驱动程序中的COM_Init函数,并把上一步中添加的注册表项的完整路径作为COM_Init函数的第1个参数传入驱动程序内。

第六步:在COM_Init中,通常须对硬件进行一些最基本的初始化操作。

通过以上的操作完成流式驱动程序的加载任务。

对驱动程序的操作:第一步:应用程序使用该设备。

首先,应用程序调用CreateFile(TEXT(“COM1”)….)打开设备。

然后,文件系统判断打开的是文件还是设备。

最后,如果打开的是设备,就将控制权交回设备管理器。

实验3-驱动程序开发实验指导书

实验3-驱动程序开发实验指导书

Wince驱动开发实验1实验1:Wince驱动开发实验1.1 目标:在这个实验中,您将学会使用Platform Builder开发环境开发wince驱动程序,开发出来的驱动程序会编译成dll形式,加载进操作系统以后,会随着上层应用程序的触发而执行相应动作。

●创建并编译驱动程序●加载进系统内核●创建应用程序触发驱动程序动作1.2 预备知识:●熟悉Windows CE的内核定制,pb下最简单的应用程序开发(console类型)。

1.3 实验预计时间:80-120分钟1.4 实验步骤:1.4.1使用New Platform Wizard创建平台(如果以前建立过内核,此步骤可略过。

注意:一定要定制成中文的,否则驱动里面会显示乱码)1.打开Platform Builder。

2.选择“File”菜单中的“New Platform…”,弹出“New Platform Wizard”向导。

3.“New Platform Wizard - Step1”:选择“Next”。

4.“New Platform Wizard - Step2”:选择“EMULATOR:X86” BSP,按“Next”按钮继续。

5.“New Platform Wizard - Step3”:在“Available configurations”中选择“internet appliance”,在Location中输入“D:\”,在“Platform name”中输入工程名,比如“MyPlatform”,按“Next”继续。

6.“New Platform Wizard – Step4”:按“Next”继续。

7.“New Platform Wizard – Step5”:按“Finish”结束平台创建。

1.4.2配置和编译平台(如果pc机上面已经编译过平台并能启动起来,此项略过)1.选择“target”菜单的“connectivity option…”项。

Wince6.0驱动开发

Wince6.0驱动开发

Wince6.0驱动开发(1) 在WINCE600\PLATFORM\LPC32XX \SRC\DRIVERS目录下新建一个目录MyDriver.(2) 在MyDriver目录下新建5个文件。

a) MyDriver.c 实现流接口函数的具体代码。

b) MyDriver.h 为MyDriver.h的头文件。

c) MyDriver.def 定义导出的函数名称。

d) makefile 与其它驱动的相同,不用改。

e) sources 链接和编绎文件。

(3) 前缀定义为MYD(4)文件内容完成后,在平台的“解决方案”的界面下,寻找FLATFORM\LPC32XX\src\drivers\MyDriver,然后单击鼠标右键,在弹出的菜单中选择“Build”,开始编绎驱动,完成后,在WINCE600\PLATFORM\LPC321XX\target\ARMV4I\retail下可找到MyDriver.dll.(5) 驱动加载的方法:手动,自动。

这里介绍自动加载的方法:a) 在MyDriver目录的位置找到dirs文件,在该文件中插入一行mydriver (都为小写),并在上一行后加“\”。

b) 在平台的“解决方案”的界面下,寻找FLATFORM\LPC32XX\Parameter Files\platform.bib.打开此文件,在相关位置添加mydriver(_FLATRELEASEDIR)\mydriver.dll NK SHK SHK指明该文件的属性,S—系统文件,H—隐藏文件,K—在内核中的位置固定。

c) 在Platform.req文件中相关位置添加程序如下:;MyDriver[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\MYD]“Prefix”=”MYD”“Dll”=”MyDriver.dll”“FriendlyName”=”Wangcong’s Driver”“Index”=dword:1“order”=dword:0d) 选择菜单“生成”“生成解决方案”,生成新的操作系统镜像。

Win CE驱动程序开发及测试流程

Win CE驱动程序开发及测试流程

6、ห้องสมุดไป่ตู้模拟器下面调试驱动程序
内核编译完毕后就可以在模拟器下面调试的驱动程序了, 首先单击菜单中的 “Target”并在弹出的菜单中选择“Configure Remote connection” ,弹出“Remote connection”设置对话框如图 9.8 所示。
图 9.8 “Remote Connection”属性对话框 在“Download”和“Kernel”下面都选择“Emulator”选项,设置完毕后单 击“确定”按钮,这个时候就可以使用模拟器来启动编译的内核了。单击菜单中 的“Target” ,在弹出的菜单中选择“Download Initialize” ,启动模拟器运行编 译的内核,这个时候就可以在 Debug 窗体内看到流接口驱动程序加载的情况 了。 打开 Remote Process Viewer, 定位到 device.exe, 从图 9.9 可以看到 mydriver.dll 已经在 device.exe 的模块列表中了。这说明 mydriver.dll 已经被作为一个驱动加 载了。
增加对驱动程序进行操作的函数,代码如下:
void WriteToDriver( ) { DWORD dwWritten; TCHAR *tcString=L"Demo String..."; HANDLE hDrv=CreateFile(L"DEM1:",GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ ATTRIBUTE_NORMAL,NULL); if (INVALID_HANDLE_VALUE == hDrv) { OutputDebugString(L"Failed to open Driver...\n"); } else { WriteFile(hDrv,(LPVOID)tcString,lstrlen(tcString)*sizeof(TCHAR ),&dwWritten,NULL); } CloseHandle(hDrv); } void ReadFromDriver( ) { DWORD dwRead; TCHAR tcTemp[30]; HANDLE hDrv=CreateFile(L"DEM1:",GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_A TTRIBUTE_NORMAL,NULL); if (INVALID_HANDLE_VALUE == hDrv) { OutputDebugString(L"Failed to open Driver...\n"); } else { memset(tcTemp,0x00,30*sizeof(TCHAR)); ReadFile(hDrv,tcTemp,30,&dwRead,NULL); MessageBox(NULL,tcTemp,L"Demo Data",MB_OK); } CloseHandle(hDrv); } void HandleIOCTL( ) { HANDLE hDrv=CreateFile(L"DEM1:",GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ ATTRIBUTE_NORMAL,NULL); TCHAR tcBuffer[10];

wince流驱动的编写

wince流驱动的编写

wince流驱动的编写驱动程序:就WINCE来讲,驱动程序抽象后的本质:向一定规则的框架中添加相应的代码,框架是指留给操作系统的一个接口;代码是指针对正确的硬件在正确的时间向正确的寄存器写入正确的值。

接口函数的调用顺序:XXX_Init()XXX_Open()XXX_IOControl()XXX_Read()XXX_Write()…..XXX_Close()流驱动的建立:一个流驱动程序至少需要包含.cpp、.def 、Makefile 、sourse、.reg、.bib.cpp是驱动源码,其中包含了所需要的头文件的调用、驱动代码和驱动接口。

.def提供驱动接口,内容大致如下:LIBRARY GPIOdriverEXPORTSxxx_Closexxx_Deinitxxx_Initxxx_IOControlxxx_Openxxx_PowerDownxxx_PowerUpxxx_Readxxx_Seekxxx_Writemakefile的内容大致如下:!INCLUDE $(_MAKEENVROOT)\makefile.def。

sources的内容包含:RELEASETYPE=PLATFORMTARGETNAME=生成动态库的名称TARGETTYPE=DYNLINKTARGETLIBS= $(_COMMONSDKROOT)\lib\$(_CPUINDPATH)\coredll.lib \INCLUDES= $(_TARGETPLATROOT)\src\inc; \$(_COMMONOAKROOT)\inc; \$(_PUBLICROOT)\common\oak\inc;$(_PUBLICROOT)\common\sdk\inc;$(_PUBLICROOT)\common\ddk\inc; \..\..\incSOURCES= \xxxDriver.cpp.reg文件,包含如下代码:[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\驱动名]"Prefix"="前缀""Dll"="xxxdriver.dll".bib文件,包含以下代码:驱动动态库文件$(_FLATRELEASEDIR)\ 驱动动态库文件NK SH我做mydrivers GPIO驱动的过程:1.在BSP包的Drivers目录下新建一个名为“mydrivers”的目录,并进入到该目录下。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

开发wince驱动步骤:
software:VS20005+wince6.0+BSP
hardware:AT91SAM9261开发板(MCUZONE)1在vs2005新建一个驱动工程DemoDrv。

2编写好所有DemoDrv的源文件,例如“.cpp”or“.c”or“.REG”文件,特别注意source文件编写,然后单独编译DemoDrv看有无错误,这样避免全部编译NK导致时间太久。

然后立即看到编译结果。

若编译成功,会在$:\WINCE600\PLATFORM\AT91SAM9261EK\target目录有相应的DemoDrv.dll文件。

(在实现文件“.c”需添加串口抛出信息以便调试)在如图所示:
3在目录$:\WINCE600\PLATFORM\AT91SAM9261EK\FILES找到配置文件:platform.reg 和platform.bib文件。

platform.bib文件添加:
IF BSP_AT91SAM9261EK_DemoDrv
DemoDrv.dll$(_FLATRELEASEDIR)\DemoDrv.dll NK SHK
ENDIF BSP_AT91SAM9261EK_LED
platform.reg文件添加:
IF BSP_AT91SAM9261EK_DemoDrv
#include"$(_TARGETPLATROOT)\SRC\DRIVERS\DemoDrv\DemoDrv.reg"
ENDIF BSP_AT91SAM9261EK_LED
添加后分别保存。

4在$:\WINCE600\PLATFORM\AT91SAM9261EK\CATALOG目录下at91sam9261ek.PbcXml 文件打开:
添加文件:
<BspItemId>Item:ADENEO:BSP_AT91SAM9261EK_</BspItemId>
<Item Id="Item:ADENEO:BSP_AT91SAM9261EK_DemoDrv">
<Title>DemoDrv Driver</Title>
<Description>DemoDrv Driver for AT91SAM9261EK boards</Description>
<Comment>DemoDrv Driver for AT91SAM9261EK boards</Comment>
<Type>BspSpecific</Type>
<Variable>BSP_AT91SAM9261EK_DemoDrv</Variable>
<SupportedCpuId>Cpu:ARMV4I</SupportedCpuId>
<Module>DemoDrv.dll</Module>
<Location>Device Drivers\DemoDrv</Location>
</Item>
保存文件
5新建NK工程文件或者手动方式更改之前NK工程文件,例如之前工程文件:E:\BSP\BSP\trunk\sample9261\Wince600\AT91SAM9261EK_ARMV4I\PBInitEnv.bat添加
set BSP_AT91SAM9261EK_DemoDrv=1
6最后编译NK,最后生成的NK就带DemoDrv驱动,可以通过注册表软件ceregedt.exe,看DemoDrv.reg有无起作用或者查看嵌入式wince的文件系统\windows目录下有无DemoDrv.dll.。

相关文档
最新文档