wince驱动开发
微软培训 wince 6.0驱动开发
Windows Embedded从入门到精通系列课程Windows CE6.0的流驱动—I/O驱动刘立明FAE经理深圳市亿道电子技术有限公司市术本次课程内容包括收听本次课程需具备的条件Level 200本次课程内容包括•Windows CE6.0流驱动分析析驱动的开发工具•Platform BuilderVisual studio 2005•Visual studio2005•EVC流驱动的结构通用的流驱动设备文件名流驱动作为一个特殊的设备文件系统;三种不同的设备文件的命名方式:三种不同的设备文件的命名方式–传统方法:前缀+ 索引+ 冒号•例: “COM1:”,“FSD1:”例“”“”–前缀•三个大写字母•存储在驱动程序对应注册表键的”Prefix”子键中–索引•区分同一驱动程序管理的不同设备•缺省: 0~9; 可通过“index”的值指明起始索引数–适合大多数流式驱动,最大只能指定10个设备;设备文件名Device:\$device\+前缀+ 索引•例:“\$device\COM1”–命名方法与传统命名方法相似;–支持多于10个流设备名;支持多于个流设备名•例:“\$device\COM27”标准的流接口函数本次课程内容包括•驱动的硬件接口电路分析硬件接口电路分析PXA270的片选地址本次课程内容包括•I/O驱动分析Led驱动程序分析(1/5)#define LED_BASEADDR10x10200000 #define LED_BASEADDR20x10300000 #define LED BASEADDR2#define LED_BASEADDR30x10400000_#define LIGHT BASEADDR0x10500000Led驱动程序分析(2/5)驱动程序分析(/)DWORD LED_Init(DWORD dwContext)DWORD LED Init(DWORD dwContext){……PHYSICAL_ADDRESS ioPhysicalBase = { LED_BASEADDR1, 0 }; PHYSICAL ADDRESS i Ph i lB{LED BASEADDR10}v_pLEDBaseAddr[0]=MmMapIoSpace(ioPhysicalBase,0x400,FALSE); ioPhysicalBase.QuadPart = LED_BASEADDR2;v_pLEDBaseAddr[1]=MmMapIoSpace(ioPhysicalBase,0x400,FALSE); ioPhysicalBase.QuadPart = LED_BASEADDR3;v_pLEDBaseAddr[2]=MmMapIoSpace(ioPhysicalBase,0x400,FALSE);……return TRUE;}Led(3/5)驱动程序分析()该函数完成对系统资源的回收。
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系统开发实验三
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中的驱动程序开发一.实验目的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”)….)打开设备。
然后,文件系统判断打开的是文件还是设备。
最后,如果打开的是设备,就将控制权交回设备管理器。
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驱动程序开发及测试流程
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 触摸屏驱动程序的研究与开发摘要本文首先阐述了Windows 的体系结构及中断处理、驱动程序模型,在介绍触摸屏工作原理的基础上,以基于S3C2410触摸屏驱动程序为例,系统讲述了如何使用分层的驱动程序模型来实现Windows CE的驱动程序设计。
本文介绍了触摸屏驱动程序开发的软硬件细节,介绍的方法可移植性强,可方便的移植到其它的硬件设备中。
关键词Windows ; 驱动程序; 触摸屏; S3C24100 引言Windows 是一个抢先式多任务并具有强大通信能力的Windows 32位嵌入式操作系统,是微软专门为信息设备、移动应用、消费类电子产品、嵌入式应用等非PC领域而从头设计的战略性操作系统产品。
可以看出 Windows CE并不是Windows桌面操作系统的一部分或缩减版本。
CE系统与其它操作系统一样,也提供了设备驱动程序,以驱动内部或者外围硬件设备。
驱动程序将操作系统和设备链接起来,使得操作系统能够识别设备,并为应用程序提供相应的服务[1]。
要想真正了解驱动程序必须结合一些驱动程序的实际开发,本文以基于ARM9核心硬件平台的触摸屏驱动程序为例,讲解如何在不同的硬件设备上实现Windows CE的驱动开发。
1 Windows CE的体系结构Windows CE是由许多离散模块组成的,每一模块都提供特定的功能。
这些模块中的一部分被划分成组件。
组件使Windows CE变得非常紧凑,只占不到200KB 的RAM,因此只占用了运行设备所需的最小的ROM、RAM以及其它的硬件资源。
图1 Windows CE的体系结构Windows CE包含提供操作系统最关键功能的4个模块:内核模块;对象存储模块;图形、窗口和事件子系统(GWES)模块以及通信模块。
Windows CE还包含一些附加的可选择模块,这些模块可支持的任务有管理流设备驱动程序、支持COM等。
内核是OS的核心,通过Core Dll模块表示。
Wincenet系统定制与驱动开发
Windows 系统定制与驱动开发实验指导手册 Ver 3.1目录第一天实验内容2一、安装SamArmDvk9 II型开发板地 BSP2二、使用BSP在PB4.2中创建一个新地Platform并编译连接生成新地Image文件4三、将生成地Image烧录到FLASH中安装SamArmDvk9 II型开发板地 BSP9b5E2RGbCAP四、添加MFC特性,添加鼠标和U盘驱动19五、建立一个带kitl特性地系统镜像22六、导出SDK26七、通过KITL建立EVC地调试环境30第二天主要内容35一、开机logo地实现35二、通过地址映射操作外部IO,实现LED控制36三、中断地添加和响应36第三天主要内容38第四天主要内容42一、编译一个调试型地内核42二、触摸屏驱动校正实验43三、电源管理驱动实现节电管理43第一天实验内容一、安装SamArmDvk9 II型开发板地 BSP1. 在WINCE420\PLATFORM目录下新建一个名为“SMDK2410”地目录,如果该目录下已有名为SMDK2410地目录,将其改名备份.p1EanqFDPw2. 拷贝光盘中地2410WINCE\2410WINCE4.2BSP\SMDK2410目录中地内容到步骤一建立地SMDK2410目录.DXDiTa9E3d3. 去掉该目录中所有文件地只读属性.4. 将“SMDK2410\_for_Public\oak\drivers\NETCARD”目录下地CS8900R目录拷贝到“WINCE420\PUBLIC\COMMON\OAK\DRIVERS\NETCARD”目录下.RTCrpUDGiT5. 在“WINCE420\PUBLIC\COMMON\OAK\DRIVERS\NETCARD”目录下地dirs文件中添加cs8900r,示例如下.5PCzVD7HxADIRS=\cs8900r\dc21x46. 拷贝“SMDK2410\_for_Public\CESYSGEN”目录下地Makefile文件到“WINCE420\PUBLIC\COMMON\CESYSGEN”目录下.jLBHrnAILg7. 单击【File】>【ManageCatalogFeatures…】菜单项,如图1所示.图18. 在Catalog列表中单击选中“smdk2410.cec”文件,如图2所示,然后单击【Remove】按钮,删除PB4.2自带地smdk2410BSP.xHAQX74J0X图29. 单击【Import】按钮,导入“PLATFORM\SMDK2410\smdk2410.cec”文件,如图3所示.LDAYtRyKfE图310. 完成第9步操作后,系统将在Catalog地BSPs文件夹下自动添加“SamsungSMDK2410:ARMV4项”,如图4所示,此时BSP安装完成.Zzz6ZB2Ltk图4二、使用BSP在PB4.2中创建一个新地Platform并编译连接生成新地Image文件1. 单击【FILE】>【NewPaltform】菜单项,如图5所示.图52. 在弹出地【NewPlatformWizard–Step1】对话框中单击【Next】按钮,如图6所示.dvzfvkwMI1图63. 在弹出地【NewPlatformWizard–Step2】对话框中选择新安装地BSP,接着单击【Next】按钮,如图7所示.rqyn14ZNXI图74. 在【NewPlatformWizard–Step3】对话框中选中【Available configurations】单选按钮,在下面地列表框中选择一项Cofiguration<这里选择Mobile Handheld),接着在右侧地【Platformname】文本框中输入平台名称,如图8所示,最后单击【next】按钮.EmxvxOtOco图85. 在【NewPlatformWizard–Step4】对话框中选择需要地应用,如图9所示,接着单击【Next】按钮.SixE2yXPq5图96. 在【NewPlatformWizard–Step5】对话框中选择需要地网络设置,如图10所示,然后单击【Next】按钮.6ewMyirQFL图107. 这时进入图11所示地对话框,接着单击【Next】按钮.图118. 在【NewPlatformWizard–Step5】对话框中单击【Done】按钮,如图12所示,完成新平台地建立.kavU42VRUs图129. 右键单击SMDK2410features,在弹出地菜单中选择【Settings…】菜单项,如图13所示.y6v3ALoS89图1310. 这时将弹出【Platform Settings】对话框,在右侧地【Build Option】选项卡中,取消【EnableKITL】和【EnableCETargetControlSupport】复选框地选中状态,如图14所示.最后单击【OK】按钮完成平台设置.M2ub6vSTnP图1411. 单击【Buildplatform】按钮编译新平台,如图15所示.编译完成后,将得到“EBOOT.BIN”、“EBOOT.NB0”、“NK.BIN”以及“NK.NB0”等文件.0YujCfmUCw图15三、将生成地Image烧录到FLASH中安装SamArmDvk9 II型开发板地 BSPeUts8ZQVRd1. 将目标板和PC机器通过串口和Ethernet(要用交叉网线>相连.2. 用MultiJtag工具和并口电缆,连接PC地并口和目标板地JTAG口,将目标板上电,在PC机端地控制台,准备运行SJF程序.sQsAEJkW5T3. 将Nboot_Debug.bin文件烧录到FLASH中(该文件用于调用第2块地EBOOT>.在控制台下sjf2410.exe(在开发工具光盘中\Flash烧写工具所目录中,应将该程序复制到硬盘中,并将工具光盘2中地NBoot.bin,eboot.nb0文件复制到同一目录下>.键入“sjf2410/f:NBoot_Debug.bin”,如图16所示.GMsIasNXkA图16回车后进入程序后,如图17所示,接着键入“0”.图17回车后如图18所示.选择将文件烧录到第0号块,选择“0”.图18回车后,烧写地过程如图19所示.图19烧写完毕后,选择“2”并按回车返回到控制台.4. 烧录完成后,再次单击运行SJF,将通过PlatformBuilder4.2编译生成地EBOOT.NB0文件或是资料盘中附带地EBOOT.NB0文件烧入FLASH 地第二块,如图20所示.TIrRGchYzg图20烧录方法同上一步骤,但注意:因为需要将该文件烧在第二块,所以在地址选择中需要选择“2”后回车.该文件较大,烧录时间可能会稍长些.7EqZcWLZNX5. 烧录完成后,运行DNW,然后单击【SerialPort】>【Connect】菜单项,如图21所示.lzq7IGf02E图216. 按开发板上地复位键,复位开发板,DNW显示如图22所示.图227. 下载完成后按空格键,DNW显示如图23所示.图238. 将各选项设置如图24所示.IPaddress需要和PC机地IP地址在同一个子网内,如PC机为192.192.78.1则IPaddress可设为192.192.78.2~255.其他各项保持和上图一致即可.注意设置MAC地址.zvpgeqJ1hk图239. 键入“W”将设置保存.10. 接着键入“F”将NandFlash低级格式化,如图24所示.这里不会格式化NandFlash地前10块.NrpoJac3v1图2511. 键入“9“将SMC逻辑格式化为BINFS格式,如图26所示,这一步操作时间会比较长<大约5分钟左右).1nowfTG4KI图2612. 完成上一步操作后,键入“D“下载Image文件,如图27所示.图2713. 接下来需要进行PlatformBuilder4.2中【RemoteConnection】属性地设置.单击【Target】>【ConfigureRemoteConnection…】菜单项,如图28所示.fjnFLDa5Zo图2814. 这时将弹出【Configure Remote Connection】对话框,在【Download】下拉列表框中选择【Ethernet】项,如图29所示.tfnNhnE6e5图2915. 同样在【Services】选项卡地【Kernel】下拉列表框中也选择【Ethernet】项,如图30所示.HbmVN777sL图3016. 接着单击【Download】下拉列表框右侧地【Configure】按钮,这时将弹出【Configure Ethernet Download Service】对话框,该对话框地【Available Devices】文本框中将出现【SMDK2410????】项<注:此时目标板需要为等待下载状态),如图31所示.选中该项,然后单击【OK】按钮即可.V7l4jRB8Hs图3117. 回到PlatformBuilder4.2中,接着单击【Target】>【Download/Initlize】菜单项,通过Ethernet即可将NK.BIN下载到目标板中,如图32所示.83lcPA59W9图3218. 此时目标板需要在等待下载状态<D),通过DNW能看到反馈信息,如图33所示.图3319. 下载完后通过DNW可以看到程序正在将下载地Image烧录到NandFlash中,如图34所示.mZkklkzaaP图3420. 稍等一会儿后,WINCE开始初始化并运行时,烧录工作就已完成了,如图35所示.图3521. 烧录完成后,按目标板上地复位键,WINCE将自动运行.四、添加MFC特性,添加鼠标和U盘驱动1. 选中“Catalog/Core OS/Display Based Device/ApplicationsandServicesDevelopment”目录下地“MicrosoftFoundationClasses(MFC>”文件,然后单击鼠标右键,在弹出地快捷菜单中选择【Add To Platform】菜单项,如图36所示.AVktR43bpw图362. 选中“Catalog/Core OS/Display Based Device/CoreOSServices/USBHostSupport”目录下地“USBHumanInputDevice(HID>ClassDriver”和“USBStorageClassDriver”两个组件,分别单击鼠标右键,在弹出地快捷菜单中选择【Add To Platform】菜单项,如图37、图38所示.ORjBnOwcEd图37图383. 重新编译并下载,系统即可正常支持MFC程序、U盘和USB鼠标了.五、建立一个带kitl特性地系统镜像1. 在Platform Builder中打开刚才建立地工程,在工程上单击鼠标右键,在弹出地快捷菜单中选择【setting…】菜单项,如图39所示.2MiJTy0dTT图392. 这时将弹出【Platform Settings】对话框,接着单击切换到【Build Option】选项卡中,按照图40所示地完成【Build Option】属性地设置.gIiSpiue7A图403. 单击【OK】按钮完成平台设置,然后Rebuild系统镜像并下载,这样就建立了一个带有KITL特性地系统.uEh0U1Yfmh4. 如板子掉电重启后,带有KITL特性地系统不能自动启动,需要通过DNW和Platform Builder来实现引导启动.IAg9qLsgBX5. 首先启动Platform Builder,打开带有KITL特性地工程,如图41所示.图416. 接着启动DNW,然后给开发板上电,按两下空格进入命令菜单,如图42所示.图427. 接着在DNW界面中键入“l”.8. 回到Platform Builder中,单击【Target】>【Connect】菜单项,如图43所示.到此就实现了引导启动,带有KITL特性地系统正常启动了.WwghWvVhPE图43六、导出SDK1. 在Platform Builder中打开工程,然后单击【Platform】>【ConfigureSDK】菜单项,如图44所示.asfpsfpi4k图442. 这时将弹出【Export SDK Wizard】对话框,单击【下一步】按钮,进行生成地SDK地名称和提供者姓名地填写(可随意填写>,如图45所示.ooeyYZTjj1图453. 单击【下一步】按钮,按照图46所示地完成“development language”属性地设置<若系统已经加入MFC特性并编译,则MFC相关地两项为灰体必选项).BkeGuInkxI图464. 最后单击【下一步】按钮完成设定.在Platform Builder中打开工程,再次单击【Platform】>【ConfigureSDK】菜单项可以设定SDK文件地输出路径或更改SDK文件名称和提供者信息.PgdO0sRlMo5. 在Platform Builder中单击【Platform】>【BuildeSDK】菜单项开始创建SDK文件,如图47所示.3cdXwckm15图476. 完成SDK地创建后,双击生成地.msi文件进行SDK地安装.安装完成后重新启动,打开EVC就可以针对生成地SDK进行编译了.h8c52WOngM七、通过KITL建立EVC地调试环境1. 首先通过引导启动带KITL特性地系统,然后将资料光盘中地示范工程IntTest复制到硬盘上,在EVC中单击Open Work Space打开硬盘上刚刚复制过来地IntTest工程文件中地IntTest.vcw.v4bdyGious2. 在EVC环境下单击【Tools】>【Configure platform manager…】菜单项,如图48所示.J0bm4qMpJ9图483. 在弹出地【Windows CE Platform Manager Configuration】对话框中选择刚才导出地SDK文件,如图49所示,然后单击对话框右侧【Properties】按钮.XVauA9grYP图494. 这时将弹出【Device Properties】对话框,按照图50所示地完成设备属性地设置,最后单击【OK】按钮.bR9C6TJscw5. 确认编译地目标SDK地名称和刚才选定地SDK一致,如图51所示.图516. 单击【Build】按钮进行编译.如果在编译过程中出现头文件无法找到地错误,应在电脑中进行搜索,然后将找到地文件地路径复制下来.接着在EVC中单击【Tool】>【Options】菜单项,在弹出地对话框中切换到【Directory】选项卡中,将刚才找到地文件地路径填入<注意,不可将找到地文件复制到当前工程目录下,否则可能会出现错误),如图52所示.最后单击【OK】按钮.pN9LBDdtrd图527. 完成编译成功后,EVC会自动通过KITL和开发板建立联机,至此就可以进行联机调试了.第二天主要内容一、开机logo地实现1. 找到\WINCE420\PLATFORM\SMDK2410\KERNEL\HAL\cfw.c文件,找到staticvoidInitDisplay(>这个函数地实现部分.DJ8T7nHuGT2. 下面这段代码即为开机logo地实现,其意义为将已经转化为C数组地BMP文件数据拷贝到显示缓冲区中.QF81D7bvUAmemcpy((void*>FRAMEBUF_BASE,ScreenBitmap,ARRAY_SIZE_TFT_16BIT>。
第13章:WinCE驱动开发与设备管理
讨论:这些是驱动程序吗?
国家ASIC系统工程技术研究中心
(一)驱动程序背景知识
关于驱动程序的认识误区
– 驱动程序的“技术含量”高于应用程序
– 驱动程序没啥“技术含量”,无非是配配寄存器
• 这两种看法都是片面的,无论是驱动程序还是应用程序, 都是算法+数据结构,设计好的程序对开发者都是挑战 • 然而对开发者的要求的确有所不同,设计时考虑的角度 也有所区别,程序功能面向的对象也不一样
国家ASIC系统工程技术研究中心
(二)WinCE 5.0的驱动程序
WinCE 5.0驱动的宿主
– WinCE 5.0中驱动程序表现形式为Dll,因此不能独立运行,必须被 加载到某个进程空间
Device.exe
PCI
GWES.exe
鼠标驱动
FileSys.exe
网卡 电池 声卡 串口 NLED
USB HOST HID
– 了解驱动程序所“驱动”的硬件
• • • • • • • • • • • USB Drivers SDIO Drivers Networking Drivers Storage Drivers Display Drivers User Input Drivers (keypad, touch) Audio Drivers Serial Drivers Battery Drivers Bluetooth Drivers …
(一)驱动程序背景知识
编写驱动程序应具备的基本知识
– 了解中断、DMA、内存管理等与硬件操作相关 的基础机制
• 如果是前后台系统,需要由程序员自己设计中断服务 程序、完成DMA操作、分配内存 • 如果在操作系统中,需要采用操作系统提供的相关机 制进行操作
WinCE .NET驱动开发
IST的中断处理
• 注意:InterruptInitialize只是把SYSINTR变 量跟一个事件相关联 • 系统并不关心也不知道是哪一个线程等待 这个事件 • 这样是为了方便移植
§5.3 开发流接口驱动程序
• 流接口驱动程序是以动态链接库形式存在 的,由设备管理器统一加载、管理和卸载。 所有的流接口驱动程序都是用同一组接口 并调用同一个函数集的,将这个函数集称 作流接口函数 • 流接口驱动程序的主要任务是把外设的使 用传递给应用程序,这是通过把设备表示 为文件系统的一个特殊文件实现的。这一 点和UNIX的设备管理很相似
单访问和多访问
• 生成一个流接口驱动程序的时候,由于外围设备 是以特殊文件形式供应用程序使用的,因此很容 易出现多个应用程序同时访问同一个设备的情况。 这时要考虑用户驱动程序对它的服务设备是否有 多次打开文件处理的功能。 • 在中一个流接口驱动程序可以通过使 用hopenContext参数来实现单访问和多访问。如 果是实现单访问,则第一次对XXX_open的调用 返回一个合法值,保持该值的合法性,后来的调 用都返回空值;若是实现多访问,对于 XXX_open的调用每次都返回不同的值。
流接口驱动程序的实现步骤(4/9)
• 再次选择“file”菜单。如下图选择:
流接口驱动程序的实现步骤(5/9)
• 在建立的工程中创建一个“Mydriver.cpp”。
流接口驱动程序的实现步骤(6/9)
• 编写驱动程序代码。首先选择一个设备文 件名前缀用于表示这个流接口程序的类别。 • 编译出来DLL函数还不能够叫做流驱动程序, 还应该将它的接口函数导出。 • 编写驱动程序的注册表部分。向 的内核里面添加注册表项的方 法有两种:直接修改PB下面的reg文件;自 己写一个注册表文件通过添加组件的方式 添加到内核中。
基于VS2005平台开发wince驱动步骤
1. 下载并安装好BSP安装包(里边包含有各类已编译的驱动程序及其他必要配置文件等)。
2.打开VS2005,在目录F:/WINCE600/OSDesigns/S3C6410_DEMO/下找到所安装BSP包下的.sln文件,选中打开。
3.在/WINCE600/PLA TFORM/SRC/DRIVER/目录下新建一个驱动工程Subproject2,里边含空文件,如下图:
4. 在include files文件夹下添加.h头文件,在source files文件夹下添加.c源文件,如上图所示,新建驱动工程后,系统自动生成.def文件和makefile文件以及source文件,最终编写好.c 源文件以及.h头文件后,需要对.def文件、source文件进行相应的编辑修改,如下图:在VS2005环境中可看到下图所示:
进入我的电脑F:/WINCE600/PLA TFORM/mybsp1/SRC/DRIVERS/目录中则可看到
5.在目录F:/WINCE600/PLA TFORM/mybsp1/Parameter Files/下编辑修改.bib二进制镜像文件构建文件和.reg注册表文件,如图所示:
6.编译新建的驱动工程,然后编译整个mybsp1包,则生成的CE系统镜像文件就包含所写驱动。
编译单个驱动工程如图所示:。
Windows CE 驱动程序开发
使用Platform Builder开发驱动 程序的不足之处
许多芯片开发商对此开发环境并不熟悉。 不能调试基于Microsoft Pocket PC的设备。 硬件的使用或者测试平台支持可能会很 昂贵或难以找到。 很难把一个驱动程序移植到Visual Studio 里去。
Platform Builder 4.0介绍(1)
驱动程序实例分析(2)
串口驱动程序需要实现的DLL接口函数名描述 :
XXX_Close在驱动程序关闭时由应用程序通过Clos ehandle函数调用 XXX_Deinit设备管理器在卸载一个实体设备时调用 XXX_Init设备管理器在初始化一个实体装置时调用 XXX_IOControl在发送命令时由应用程序通过 DeviceIoControl函数调用 XXX_Open在打开一个设备驱动程序时由应用程序 通过CreateFile函数调用
驱动程序的汇出(1)
将驱动程序导出为msi文件,步骤如下:
1) 在Platform菜单下选择汇出指导手册。 2) 在对应目录下选择需要汇出的驱动程序。 3) 填写一些描述信息并为汇出的文件命名。 4) 点选完成按钮即可产生msi文件,该文件 可以直接在目标环境下安装使用。
驱动程序的汇出(2)
将驱动程序汇出为cab档案,步骤如下:
微软的Platform Builder 4.0是一个基于 Windows CE操作系统的嵌入式平台的集 成开发环境(IDE)。 Platform Builder同时包括了设计、建立供了一个单独的集成工作区,在工 作区内可以在平台和工程中进行开发。
驱动程序实例分析(3)
其中电源管理的部分是可选的,在实际开发中, 接口名称中的XXX三个字母由设备驱动的前缀 所代替,同时在声明这些接口时,需要在函数 原型的前面加上__declspec(dllexport),表示 这些函数是这个DLL提供的界面函数,例如:
wince驱动开发
GWES加载驱动
Keyboard Mouse
Touch Screen
Display Battery Notification LED
设备管理器加载的驱动
本地驱动:PCMCIA Host Controller
USB Host Controller driver NDIS.DLL 流接口驱动:Audio driver Serial port driver Parallel port driver Port Monitor
样本串行口驱动程
功能:串行D驱动程序处理和串行口工
作类似的任何I/O设备,包括那些基于 16450和16550 通用异步接收传送器(UART)芯片的设 备和那些使用直接内存访问(DMA)的 设各、许 多基于WndoWW CE的平台都有这种类 型的设备,包括普通9针串行口、红外线 I/O D和PC卡串行设备如调制解调器 位置:Public\Common\Oak\ Driver\Serial
在样本模型设备驱动程序(MDD)中, 键盘 驱动程序的中断服务线程IST的名字是 KeybdDriverThread。这个线程调用函数 Intenfljntlnltlallze注册 SYSINTR_KEYBOARD中断,然后等待系统 发出SYSINTR_KEYBOARD信号,在收到信 号后中断处理程序调用函数 KeybdPdd_GetEvent.把从设备依赖驱动程 序(PDD)返回的键盘事件发送到输入系统 。输入系统对它们进行排队以分发给相应的 应用程序
Registering an Interrupt Handler
After a device driver is loaded, the
Windows CE设备驱动程序开发
4—o 文献标识 l_ 3 码t A
中 圈分类号t Fl5  ̄12 T .
Wid w E设备驱动程序 开发 no s C
胡军辉 ,王友刨
( 浙江大学仪器系 ,杭州 3 0 2 ) 0 7 1
囊
要 :Wi o s E操作系统标准设计的一个重要方面 ,就是原始设备制造商( E ) n w d C O Ms 和独立硬件开发商( V ) 以自主开发设备驱动程 I s H 可
已经越来越走近普通人 的生活, 随之而来 的就 是对嵌入式软 、
2 n o s E的中断处理 dw Wi C
就其 中断处理而言 ,Wid wsC 采用了一种独特 的方 no E 法 。它将 中断处理分为 两步 :中断服 务例程( R 和 中断服务 I ) S 线 程( T 。具体来讲就 是把 每个硬件 的设 备 中断请 求(R I ) S IQ) 和一个 IR联系起来 , S ,当一个中断发生并未被屏蔽时 ,内核
h y tm tu tr fW n o te s se srcu e o id wsCE d te p o e so e eo ig d vc rv r o id ws CE.I r vd sa v r e o e iedi e n a r c s fd v lpn e ie die sf rW n o h tp o ie o eviw fd vc — rv r n r ht tr , lb rtst n o e iedi e d l ner p a l. n o ac i cu e ea o ae eW id wsCE d vc -rv rm o esa d itru th de W i d wsCE u p r h olwig fu rv rmo es a v e h n n s p t tef l o s o n o rd ie d l:n t e i
带你认识WinCE Display驱动开发
带你认识WinCE Display驱动开发在WinCE中,Display驱动由GWES模块来管理。
WinCE提供了两种架构的Display 驱动模型,可以满足不同的硬件需求。
一种是基于WinCE DDI的Display驱动模型,另一种是基于DirectDraw的Display驱动模型。
下面将对两种架构作简单介绍。
1. Display驱动模型WinCE下的Display驱动直接由GWES模块管理,它会直接被GWES模块管理和调用。
Display驱动实际上也是分层的,其中包括GPE库,该库处理一些默认的绘图,相当于驱动的MDD层。
用户只需要开发和硬件相关的PDD层驱动就可以了。
在WinCE中,整个架构如图:如图,Application为一个应用程序,该程序会调用图形设备接口函数(GDI),而GDI函数是由Coredll.dll模块导出的。
Coredll.dll会将函数调用的参数打包,然后触发对另一个进程的本地过程调用(LPC),所有的绘图和开窗口的工作被传给内核中GWES模块。
GWES模块被称为图形,窗口和事件子系统,专门处理图形输出和用户输入等事件及相关的所有交互。
GWES模块会调用Display驱动完成对显示硬件的操作。
Display驱动由GPE和DDL.dll组成,GPE 完成基本的默认绘图工作,而DDI.dll实际上从GPE类上继承而来的,并实现了相关的显示硬件的操作。
2. DirectDraw Display驱动模型DirectDraw提供了独立于硬件的直接访问显示设备的能力。
它可以通过直接访问硬件抽象层(HAL)中的一些函数来达到直接操作显示设备的目的,在这个过程中,不再需要图形设备接口(GDI)的转换。
这种直接的方法可以使图像更加连贯,也提高了显示的性能。
为了实现这样的功能,需要在显示驱动上扩展能够直接访问相关硬件的函数。
这些函数会被DirectDraw模块调用,并形成DirectDraw的硬件抽象层(DDHAL)。
wince简单驱动开发
3.2 IIC总线驱动实验一、实验目的1.了解IIC传输协议及控制方法。
2.理解总线驱动和设备驱动的关系。
3.掌握总线驱动编写的一般思路和方法。
二、实验内容1.实现对IIC功能的控制。
2.编写总线驱动。
3.了解驱动程序中常见Windows核心对象的基本用法。
三、预备知识1.C语言基本知识,设备驱动基础知识和方法,WinCE基本系统体系架构。
2.能够使用Platform Builder 4.2集成开发环境建立流驱动程序。
四、实验设备及工具硬件:PC一台P3以上(内存不小于384MB,安装完工具硬盘空间不得小于600M)、ARM9实验箱(包含NETARM2410-S实验板、JTAG仿真器、各种串口线、并口线、网线、光盘等)一台。
软件:PC操作系统Win2000以上、ADS1.2集成开发环境、Platform Builder 4.2版本、Source Insight3.0。
五、实验原理1、IIC总线接口S3C2410A IIC总线接口具有四种操作模式:— 主机发送模式— 主机接收模式— 从机发送模式— 从机接收模式这几种操作模式之间的关系如下所示:起始条件和停止条件当IIC总线接口未激活时,通常处于从机状态。
换句话说,在检测到SDA线上的起始条件之前接口应该配置为从机模式。
当接口改变状态为主机模式时,必须初始化SDA线上的数据,并且SDL开始生成时钟信号。
开始条件可以在数据线上传输一字节的数据,终止条件可以终止数据的传输。
终止条件可以描述为当时钟信号为高时数据线由低电平转换为高电平,其实信号与其相反。
起始信号和终止信号总是由主机生成。
在开始信号发送完毕后,IIC总线处于忙状态。
终止条件将释放IIC总线。
当主机初始化一个起始条件时,同时发送一个从机地址来通知从机设备,一个字节的地址段包含七位的地址信息和一位的发送方向指示(读或者写)。
如果第八位是零,预示着一个写操作(发送),相反为请求读取数据(接收)。
WinCE系统下的驱动开发知识
WinCE第三方驱动安装之二——CAB安装包制作Microsoft Windows CE是紧凑的,高效的操作系统,它被广泛的应用在从手持电脑到专门的工业控制器或消费用电子产品等各种嵌入工业产品中。
英创公司ARM9系列工控主板预装了正版Windows CE5.0操作系统,并对板上所有硬件资源提供了完备的驱动支持。
随着WinCE操作系统的广泛应用,越来越多的在PC上使用的硬件设备提供了对WinCE系统的支持,如3G模块,Wi-Fi等。
第三方驱动一般以两种形式提供,一是动态链接库(*.dll)加对应的注册表文件(*.reg),另一种是可直接安装的CAB文件(*.cab)。
与动态链接库加注册表文件形式的驱动相比,CAB文件安装十分方便,不需要了解繁杂的WinCE INF文件格式或REG文件格式。
本文介绍通过WinCE CAB Manager工具将以动态链接库usbser.dll和注册表文件usbser.reg 形式提供的USB转串口驱动程序压缩为可直接在英创主板上安装的CAB压缩包的方法。
1、打开WinCE CAB Manager,选择File->New,运行New Cabinet wizard(CAB新建向导),选择“next”直至完成如图1。
2、在CAB Information上点击右键,选择Properties(属性)选项(如图2),打开CAB 包属性设置对话框,如图3。
3、在CAB Properties对话框中(如图3),填写Company Name(公司名称)和Application Name(CAB包名称)。
4、切换至CAB Properties->Installation Directory对话框,设置CAB包默认安装路径,此处设置为NandFlash\USBDriverDll目录,如图4。
5、切换至CAB Properties->Cabinet对话框,设置处理器类型,Processor可直接选择为ALL/CEF,如图5。
WinCE驱动开发问题精华集锦
如何让系统加载自己写的驱动程序?两种办法:1、在[HKEY_LOCAL_MACHINE\Drivers\BuiltIn]下添加注册键。
2、在应用程序中调用ActivateDeviceEx。
在一些文件中用分号来表示注释,例如下面的内容。
@CESYSGEN IF SERVERS_MODULES_HTTPD。
@CESYSGEN ENDIF在“CESYSGEN...”前加了“@”,有没有什么特别的含义?在WINCE的一些文件中,用“。
”作为注释并在注释文字中用@CESYSGEN作为标记,后面接条件语句。
Cefilter.exe 工具负责按照条件来筛选文件内容,所以不要轻易地删除包含@CESYSGEN的注释语句。
通过串口建立ActiveSync联接,串口线用三线的可以吗?不可以,因为用串口同步时要用到其余口的状态。
WINCE是否支持MAPI?不支持。
WINCE自带的pmail.exe软件也不是很好用。
建议自开发邮件收发软件。
如果需要购买WINCE下邮件收发软件可以联系我。
如何旋转屏幕显示的内容?例子代码如下<前提是显示驱动程序支持旋转):DEVMODE devmode = {0}。
devmode.dmSize = sizeof(DEVMODE>。
devmode.dmDisplayOrientation = DMDO_90。
///垂直模式devmode.dmFields = DM_DISPLAYORIENTATION。
ChangeDisplaySettingsEx(NULL, &devmode, NULL, 0, NULL>。
///改变显示的设置CRect rcWorkArea(0, 0, 320, 240>。
///整个屏幕尺寸///设置客户区大小并广播消息,这样所有软件也就随之更改显示SystemParametersInfo(SPI_SETWORKAREA, 0, (void*>&rcWorkArea, SPIF_SENDCHANGE>。
wince4.2系统定制与驱动开发
Windows 系统定制与驱动开发实验指导手册Ver3.1目录For personal use only in study and research; not for commercial use一、安装基于2410开发板的 BSP .................. 错误!未定义书签。
二、Wince系统工程的定制与编译....................................... 错误!未定义书签。
For personal use only in study and research; not for commercial use三、Wince的烧写(基于Edukit-iii+2410平台). .............. 错误!未定义书签。
四、系统特性的添加MFC特性,添加鼠标和U盘驱动... 错误!未定义书签。
五、导出SDK......................................................................... 错误!未定义书签。
六、虚拟地址的映射(操作外设IO 蜂鸣器) (33)七、通过开机Demo的显示了解平台配置文件 .................. 错误!未定义书签。
八、触摸屏驱动中断的添加和响应...................................... 错误!未定义书签。
九、LED驱动的添加............................................................. 错误!未定义书签。
十、LED应用程序控制实验 ................................................. 错误!未定义书签。
十一、串口通信实验.............................................................. 错误!未定义书签。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CE驱动程序
本机驱动程序
流接口驱动程序
GWES加载驱动
设备管理器加载的驱动
需要时加载驱动
中断处理
Registering an Interrupt Handler
Deregistering an Interrupt Handler
Processing an Interrupt
1.
2.
3.
4.
5.
6.
7.
中断处理
本机驱动程序
嵌套的中断
驱动程序的安装
本地驱动程序模型
MDD执行任务
MDD特点
PDD
本机驱动程序实例
电池驱动程序例子
键盘驱动程例子
KeybdDriverGetInfo KeybdDriverSetMode KeybdDriverInitialize KeybdDriverVKeyToUnicode KeybdDriverInitStates KeybdEventCallback KeybdDriverPowerHandler
样本串行口驱动程
GetSerialObject HWGetModemStatus HWPutBytes HWClearBreak HWGetRxBufferSize HWReset
HWClearDTR HWGetRxStart HWSetBreak
HWClearRTS HWGetStatus
HWSetCommTimeouts HWClose
HWInit HWSetDCB HWDeinit HWIoctl
HWLineIntrHandler
HWGetBytes
电源管理
流接口驱动程序
流接口驱动程序模型
PC Card 客户端设备流程图
设备管理程序
设备管理程序使用的注册键
加载流接口驱动程
卸载流接口驱动
流接口驱动程序入口点XXX_Close XXX_Deinit
XXX_IOControl
XXX_PowerDown XXX_PowerUp
单访问和多访问
XXX_Open
串行设备驱动设计
串行设备驱动的考虑因素
安装流接口驱动程序
流接口驱动程序例子
NDIS网络驱动程序
网络驱动程序模型
CE支持的NDIS功能
CE不支持的NDIS功能
Windows CE Miniport Driver
NdisMRegisterMiniport
NDIS驱动的注册和初始化
Implementing DMA for NDIS Miniport Drivers
Slave DMA。