版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、嵌入式系统开发技术导论7-设备驱动程序开发北京理工大学计算机学院2006Windows Embedded主要内容概述流驱动接口设备驱动程序架构 USB mouse驱动开发示例 Windows CE系统服务设备驱动程序是与硬件设备进行通信的系统 程序。一个设备可以是物理设备,也可以是 一个逻辑实体。通常,这些实体需要操作系 统对其进行控制,资源管理。设备驱动程序 就是管理这些物理设备或者虚拟设备,协议 或者系统服务的软件模块。对于每一个基于Windows CE的设备,设备驱动程序都是必不可少。“译自MSDN般”驱动程序开发的理解必须使用汇编语言对端口进行读写设备驱动程序是操作系统的一部分,难于
2、开发专'谕就。设备驱动程序控制硬件中断比较难于处理必须使用汇编语言读写端口 CEDDK.dll提供APIs与硬件进行通信> HalGetBusData> READ_PORT_UCHAR> WRITE_REGISTER_ULONG对于逻辑设备驱动程序,采用Win32 APIs从硬件获取数据Windows* W Embedded刪设备驱动程序是操作系统的一 部分,难于开发与调试对于UNIX或者是Windows 9x5设备驱动程 序是与操作系统映像连接的,并运行于系 统内核态。对于windows CE,大多数的设备驱动程序运行于用户态,简单的来说就是一个DLL文件。Wind
3、ows* W Embedded设备驱动程序控制硬件h sib大多数的设备驱动程序用来控制硬件。对于某些硬件,是没有驱动的。 CPU内存对于虚拟设备驱动程序,没有物理设备。 文件系统驱动程序> RAM disk Windows CE提供逻辑中断(SYSINTRs)中断由一个用户态的线程进行处理(1ST)譌翳硬件时'就需要提供这一硬件硬件OEM厂商不提供基于Windows CE的 硬件驱动,但是提供硬件的规格说明。对于一个现有硬件驱动的功能进行扩展。Windows* W Embeddedi动分类一整体 Windows CE整体上将设备驱动分为三种:内置驱动总线流接口黠罄辭霸'
4、席驱动程序通如:键盘,触摸屏,音频设备。可能不支持一般的驱动接口,也有可能带鸚谿接口或者完全提供-个用户自定内置驱动通常需要针对具体的操作系统进 行小幅改动。Windows* W EmbeddedIPCMCIA 与管理系统总线如PCI总线等。CompactFlash 也在其列。负责处理总线上硬件的询问,以及资源的 分配。同时也请求设备管理器为总线上的硬件安 装适当驱动程序。Windows* W Embedded!3| II :动分类-详细Audio DriversBattery DriversBlock Drivers参见文档:Bluetooth HCI Transport Driver Di
5、rect3D Device Driver InterfaceWindows* W Embedded!3| II DirectDraw Display Drivers Display Drivers DVD-Video Renderer IEEE 1394 Drivers Keyboard Drivers Notification LED Drivers Parallel Port Drivers PC Card Drivers Printer Drivers Serial Port Drivers Smart Card Drivers Stream Interface Drivers Touc
6、h Screen Drivers USB DriversDriver Development -> Driver CategoriesWindows* W Embedded驱动的加载过程奋熬廳行加载。加醫饗鑑翳豔豐示器驱动(DDI.dll)、键盘驱动、鼠标驱动、 触摸屏驱动等。1.当Device.exe对设备驱动程序进行安装时将在注册表的HKEY_LOCAL_ MACHINEDrivers<T 检查一个字符串, 其值为RoofKey,传统地,其名字为 Builtln o然后设备管理器在进行初始化时使用注册 信息检查器为它需要安装的各个驱动读取 RootKeyj 犍。Windows*
7、 W Embedded驱动的加载过程Windows* W Embedded驱动的加载过程gf Windows CE Remote Registry Editor,|n|x|xQs s B- 白HKEY_LOSACHIMEO Audio£j Comm口 ControlP-anelCl Driversra-CO ActiveB-Q Builtln Q afd 11 BatteryQ CODEC .GSM610 ( DMM 卜 DMA5£ DMA6 h £ DMft7I | £ EM5 h £ EthmanO G5M610 rl ipv6hlp 囱亡
8、IrCOMMi £ NDI5£ NDI5UI0由 £ PendantBuss SSI£?£ 5erial2£ 5IPL £ TAPINamedefDeOLT*rordeprtoriData(value not set)20101680COMComl6550.Dll00ReadyWindows* W Embedded驱动的加载过程2. 安装DLL,给每一个驱动创建一个;键, 然后调用ActivateDevice或者 ActivateDeviceExDLL注疵为系统中的 一个设备驱动程序。ActivateDevice在 HKEY
9、_LOCAL_MACHINEDriversActi ve下创建一个新的键值。Windows* W Embedded驱动的加载过程Windows* W Embedded驱动的加载过程gf Windows CE Remote Registry Editor钿気|聽|刪_H駅瞻|日 口 HKE仁LOCAL_MACHINEFlT'l AudioFlT'l Comm FlT'l ControlP-anelhT'1 DriversEJ- Q Activek £ oiQ 02£ 03k Q 04n o osI 卜 £ 07 ; ; ; ;?_ 0
10、8“ ri 09i P C ioi £ ui to 12“ C1 13i i o k15;,"I I 16i 卜 17; CZJ 18I |- £ 19i C 1 20Ready(Default) 旦Hnd 3 Name 囤Key .D Interface TypeDdtd(value not set)201776COM2!Driver5BuiltInSenal24294967295V vW.AfWindows* W Embedded驱动加载API'吐;I /I L设备驱动程序也能通过应用程序进行手动 的安装,这是Activate Device Ex的一个
11、首 选的功能。安装驱动一个更老的方法是使用Register Device 与 Deregister De vice主要内容流驱动接口设备驱动程序架构 USB mouse驱动开发示例 Windows CE系统服务WindowsEmbedded什么是流接口流接口驱动包括所有提供流接口函数的驱 动程序,不管由这个驱动控制的设备是什 么类型。典型的流接口驱动程序有:> 文件系统驱动(iostream, fstream)> COM, LPThSer = CreateFile(TEXT(ttC0M1:,)J GENERIC_READ,0, NULL,OPEN_EXSITING5 05 NULL
12、);rc= ReadFile(hSer, &ch513 &eBytes, NULL); TransmitCommChar(hSer, ca5);CloseHandle(hSer);直接使用Win32文件系统API。Windows* W Embedded1. 写一个导出具体流接口的DLL2. 编译设备驱动程序3. 对注册表进行配置函数名说明XXX Close关闭以/? Open CoEexf标识的设备上下文。XXX Deinit由设备管理器调用来删除对某一设备的初始化信息。XXX Init由设备管理器调用来对某一设备进行初始化。XXX lOControl向设备发送命令XXX Op
13、en打开一个设备以进行读、写或者既读又写。当应用调用 CreateFile来打开某一个设备文件乞时将间接地调用这 一个函数。XXX PowerDown停止向设备供电。只有在软件控制下关机的设备上才町用。XXX PowerUD恢复向设备供电XXX Read从设备读取数据XXX Seek在设备中移动数据指针XXX Write向设备写数据聲设备驱动程序与构建一个DLL-样简可以使用Platform Builder与EVC+。只需创建一个Windows CE DLL项目,输出适当的入口点,然后编写代码。常犯的一个错误是没有将入口点声明为 extern C,庾必C+编惺器就不能处理输 出的函数名。Win
14、dows* W Embedded 在 Project.reg 中:Windows* W EmbeddedWindows* W EmbeddedHKEY_LOCAL_MACHINEDriversBuiltlnSampleMDIIM = ffmydriver.Dir"Prefix11 = ,fDEMMf,lndex,f = dword:1f,OrderM = dword:0f,FriendlyNameM = "Demo Driver11Mloctrf = dword:0Windows* W EmbeddedWindows* W Embedded Order给所有的驱动设置相对安
15、装顺序。Order为0 的驱动先安装,依次安装Order为4,2,的驱 动。Oder可以让开发者保证有相到依赖关系 的多个驱动以适当的顺序进行安装。 Index指定在文件系统中的驱动名的数字部分。在默认情况下,带有前缀COM的驱动在文件系统中分配名字为C0M1,下一个即为COM2o为 了保证驱动总是安装成COM2,必须提供In dex = 2OWindows* W Embedded驱动是如何工作的1. When CE启动时,Device.exe根据注册表中 的设置安装所有的驱动程序。2. 当安装mydriver.dll时,device.exe 调用 DEM1Application程序调用Cre
16、ateFile(“DEM俨)Windows* W Embedded b4. Coredll.dll处理API调用并切换到 device.exe3. Device.exe 调用mydriver.dll 的 DEM1_0penoCreateFileM回DEM1 _Open的retvalWindowsEmbeddedWindowsEmbeddedWindowsEmbeddedI U!I能栈应用程序设备驱动程序Rdows 廁件*> Windows* W Embedded主要内容概述Windows* W EmbeddedWindows* W Embedded流驱动接口设备驱动程序架构 USB mo
17、use驱动开发示例 Windows CE系统服务Windows* W Embedded/WindowsEmbeddedGWESDisplayTouchMouseNotificationLED/WindowsEmbedded*ir Windows Embedded &Bus DriversrUSB HCD PCMCIA HosNDIS >Client DEYiu:已USB Clients ( Block Device PC Card CIientiyy-NDIS Mini"jj Serial DeviceNative Device占tream InterfaceDrive
18、rsDrivers设备管理器总线驱动由Device.exe根据键值进行安装可安装的流驱动或其它驱动由Device.exe内置与流安装机制I 離轿峯和Ji IHHI « V通常内置驱动程序根据注册键值安装在GWES进程空间根据总线驱动或注册检查器进行安装o用户级进程继续运行与内核、注册表交互的单独应用程序,以 及流接口驱动DLL。提供 Activate Device 与 DeactivateDevice APIO包括10资源管理器安装注册表检查器(RegEnum.dll),并由 这一个注册表检查器根据注册表进行驱动 的安装提供电源通知回调函数跟踪所有已安装的驱动程序,给设备接口发出 拉
19、入或删除的通知Windows* W Embedded设备管理器设备驱动程序的安装过程Kernel -lQ-dsloadsWindows* W Embedded注册枚举器是RegEnum.dll越 Oovico awa卡且HKEY_LOCAL_MACHINEDriversRootKey 安装注册枚举器-注册枚举器给每一个要安装的驱动程序扫描表项注册枚举器是可重入的,并支持分级使用当注册枚举器卸载时,同时也御载它安装的所有信息注册枚举器根据Order,检查紧挨着传给它的键的 下一级键值。注册枚举器对每一个找到的子键调用ActivateDeviceExActivateDeviceExf?. j由 D
20、evice.exe 提供总线驱动程序当安装设备驱动时调用ActivateDeviceEx ActivateDeviceEx也在RAM工作区锁定流接口驱 动程浄这可以防止代码页被丢弃注册检查器对找到的每一个内置子键调用ActivateDeviceEx ActivateDeviceEx安装驱动并更新注册表驱动程序的接口有以下特征每一个Iclass有一个GUID, 个名字 GUID描述类设备接口 Name描述接口的实例-C0M1:, DSK1:等等提供一个驱动接口在注册表中的Iclass子键驱动程序发布接口 - Advertiselnterface应用程序访问接口- RequestDeviceNot
21、ifications每个已有的接口的预定义GUID> A32942B7-920C-486b-B0E6-92A702A99B35IORM是设备管理器必备的部分跟踪可用I/O资源(IRQ与I/O基地址) OEM为内置设备预分配的资源当在总线上安装一个客户驱动时,总线驱动请求资源> ResourceRelease> ResourceRequest> ResourceCreateList当存在冲突时IORM调用ResourceRequest 失败Windows* W Embedded洱九”FgFn “fflil81Windows* W EmbeddedWindows* W Em
22、bedded从注册表中读取资源初始化信息> OpenDeviceKeya DDKReg_Getlsrlnfoa DDKReg_GetWindowlnfo> DDKReg_GetPci Info> 在COREDLL的APIa 在<devload.h> and <ddkreg.h> 的函数原型在 publiccommonoakckivers 中的例子wavedevpddes1371 wavepdd.cpp -> GetRegistryConfigWindows* W Embedded电源管理电源管理器灵活的系统级与外设级电源管理使设备智能化地管理它们
23、的电源在设备与系统或应用之间充当协调者使OEM修改调用PowerOffSystem()的相关代Windows* W EmbeddedWindows* W EmbeddedWindows* W Embedded系统级电源状态打开系统空闲用户空闲挂起设备(外设)级电源状态DO全供电D3睡眠D1降级模式D4关闭D2备用模式Windows* W Embedded电源管理器架构iitwbWindows Embedded物理内存内核虚拟地址/"WindowsEmbedded/"WindowsEmbeddedReservedcooooooo/"WindowsEmbedded/&
24、quot;WindowsEmbedded512 MBUncachedA0000000512 MBCached64 MB RAM80000000G BU/"WindowsEmbedded4GBVirtual address space3 GB2 GB64 MB32 MB64 KBNot UsedAccessable viaMmMapiloSpace512M Hon-Cscrjsd512JVJ CaicrjsclSlotOSlot32SlotlNULLpoi nters0x80000000Above 2G-3GMapped to physical memoryWindows* W Emb
25、edded内存管理函数设备驱动程序是用户态模块>必须将物理内存映射成虚拟内存 VirtualAlloc, VirtualFree:预留,释放虚拟 内存> MEM_RESERVE VirtualCopy:将一个物理内存区域映射到 一个虚拟内存氐域> PAGE_NOCACHE> PAGE_PHYSICAL汕Windows* H EmbeddedWindows* W Embedded驱动的内存访问与映射 MapPtrToProcess将一个地址空间的指针映射成另外一个指针 GetCurrentProcess / SetProcPermissions重新找回进程ID用于MapP
26、trToProcess函数 MmMaploSpace将一个物理地址空间映射成一个不分页的,由 进程决定的地址空间 CEv2.1x以及后来的版本支持独立于平台的I/O 配置让OEM以及驱动开发人员使用它们 CEDDK.DLL总线管理内存管理 I/O管理从 NTDDK 拿来的 CEDDKAPI直到V2.12以后的版本才有文档但在大多数V2.00版中都有Windows* W Embedded简介Windows* W EmbeddedWindows* W Embedded设备管理器设备驱动使用CEDDK正常开发的驱动是跨平 台二进制兼容的Windows* W Embedded设备驱动跨CPU的源代码兼
27、容CEDDKDLL硬件Windows* W EmbeddedWindowsEmbedded部分 总线管理内存管理函示例HalGetBusDataByoffset() HalGetBusData()HalsetBu sDataByoffset()HalsetBusData()HalTrans1ateBusAddress OHalTrans!atesystemAddress() MmMaplOSpace- MmU nmaplOSpace HalAllocateCommonBufferWindowsEmbeddedI/O存取xxxx =>UCHAR/USHORT/ULONGREAD_REGIS
28、TER_XXXX WRITE_REGISTER_XXXX READ_PORT_XXXX WRITE_PORT_XXXXWindowsEmbeddedWindowsEmbedded中断只是异常处理的一部分在内核代码中被获取Windows* W Embedded在恢复到用户态之间进行处理 但是硬件是独立于操作系统的 CE使用二阶段中断服务模式少量的代码进行中断的记录调度中断服务程序代码进行处理讎鑲供眯使能咙信号'设置中与硬件育关的操作在OAL,以及设备驱动 代码中进仃。Windows* H EmbeddedIU关于ISR与1ST的一些解释 1ST是老的用户模式代码有完整的CE.NET AP
29、I与CRT库 CENET调度程序根据线程的优先级控制1ST 的执行运行态绑定到SYSINTR从异常处理函数调用ISR没有操作系统服务堆栈空间大小有限可设置为可重入的(在OAL进行设置)> MIPS, SHx汇编语言 IRQ优先级的设定依赖于不同CPU的系统架构在X86上由PIC硬件进行设置 在MIPS上用OAL的IntrPriority, IntrMask 进行设置通过让1ST进程推断ISR服务,OAL能够增加实时 性。在CE3.0中,所有的ISR代码都是OAL的一部分没有特殊的扩展 IRQ绑定到0EMInit的事件ID没有支持PNP,共享IRQ (PCI总线)CE .NET通过IRS(
30、IISR)链解决了这些限制。Windows* W Embedded可安装ISR CE 3.0 ISR架构的首选扩展 DLL代码,在运行时进行绑定源代码可以是独立于CPU的Windows* W Embedded 一般用C编写有一些限制 不能调用CRT, Windows API,或其它的DLL不可推断的ISR,或1ST发布支持硬件共IRQ共享从同一个IRQ关联的不同SYSINTR IDWindows* W EmbeddedI存断处理1STSYSINTR CHAINIISR TISF%IISRnSY SINTR_x%SYSINTR NOPPSR!NKCalllntChai n(IRQSYSINTR
31、IDISR二SR 内核 OAL无中断更高优先级的屮断被屏蔽的IRQ硬at :.乍 ahfw Windows Embeddeda. 中断服务线皤是内置设备的驱动程序的作户态线程进行实际的中断处理调用CreateEvent创建一个与逻辑中断相 关联的事件对象 1ST在大多数时间里都是处于空闲状态,以 内核用信号通知事件对象时被唤醒1ST通常运行的优先级高于普通优先级,其 优先级由CeSetThreadPriority函数丧定a. 中断服务线; Interruptl nitialize调用Interruptlnitialize将事件与ISR的中断标 預符矣联起来 WaitForSingleObjec
32、t用来等待一个用信号通知的事件理时,1ST可以回到这一个调用筛下一个要处 理的中断 InterruptD one中断数据处理完以后,1ST必须调用 InterruptDone函薮復丙核使能£送一个线程相 关的中断Windows* H Embeddedstruct ISTDataHANDLE hThread;DWORD syslntr;HANDLE hEvent;/ Declare the Strucure to pass to the 1ST/ 1ST Handle/ Logical ID/ handle to the event to wait for interruptvolat
33、ile BOOL mbort;/ flag to test to exit the 1STISTData g_KeypadISTData;/ Create event to link to 1STg_KeypadISTData.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL); / Translate IRQ to an logical ID (x86 CEPC)g_KeypadISTDatasyslntr =Mapirq2Sysintr(5);/ start the threadg_KeypadISTData.hThread = CreateThr
34、ead(NULL,0r &KeypadISTr&g_KeypadISTDataz 0r NULL);I UV IU l型的1ST启动/Change the threads priority CeSetThreadPriority(g_KeypadISTData hThread 0);/disconnect any previous event from logical ID InterruptDisable(g_KeypadISTDatasyslntr);/ Connect Logical ID with EventInterruptInitialize(g_KeypadIST
35、Data.syslntrf g_KeypadISTData. hEventrNULL,0);设置1ST的优先级与以前的事件断开与ISR关联Windows* W EmbeddedDWORD KeypadlST(void *dat)ISTData* pData= (ISTData*)dat;/ loop until told to stop While(!pData->abo rt)/ wait for the interrupt event.WaitForSingleObj ect(pData->hEventf INFINITE) if(pData->abort)break;/
36、 Handle the interrupt./ Let OS know the interrupt processing is done InterruptDone(pData->sysIntr);Return 0;Windows* W EmbeddedWindows* W EmbeddedWindows* W Embedded/ set abort flag to true to let thread know/ that it should exit g_KeypadISTData< abort =TRUE;turn/disconnect event from logical
37、ID/this internally sets g_KeypadISTDatasyslntr which /sets g_Keyp adlST Da t ahEvent through the kernel InterruptDisable(g_KeypadISTData.syslntr);/wait for thread to exitWaitForSingleObj ect(g_KeypadlSTData.hEvent?INFINITE);CloseHandle(g_KeypadISTData.hEvent); CloseHandle(g_Keyp adlSTData.hThread);设
38、置一个会导致1ST退出的标志Windows* W Embedded PCMCIA> 182365 (ISA)A TI-1250 (PCI) USB Host>多主控制器 OHCI 与 UHCI (PCI) PCMCIA总线驱动有三个主要的线程状态改变线程(卡的插入与移除)中断线程(处理卡的功能性中断请求)回调线程(通知事件相关的设备卡)总线驱动支持Card Serv消息的一个子集,从回调 线程中用回调函数发送中断以回调的形式发送到客户端驱动对新插入的卡进行扫描以确定是否PnP元组,并 与注册表中的相关项进行比较如果没有发现相匹配的信息,则候选的驱动程序 觥运行E卡箱矣的“detec
39、t”初禮舟卡鏈行识别.可能显示出一个对话框询问DLL的名字兼容USB 1/1版 完全支持OHCI与UHCI支持所有的传输类型> Isoch, bulk, interrupt, controlUSBD支持多个HC的复用使用USBD操作与HC进行通信总线设备驱动典型地采用Load Driver进行安装,iii»twrvateDeviceEx()检测并识别新装设备按照注册表中的描述安装驱动可能显示一个对话框询问DLL的名字USB体系架构USBD 按打印机大容量 存储器II ID总线设备驱动功能USBDUSB逻辑设备Windows EmbeddedHCD 接口USB总线接口OEM硬件USB电缆IHCDPDDHC接口011C
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二四年度上海房产买卖合同智能家居系统配套范本3篇
- 2024版郑州玻璃岗亭生产与供应链管理合同
- 2025年智能电网建设项目资金投入合同3篇
- 二零二五版豆腐品牌连锁加盟合同3篇
- 二零二五年度企业商业信用贷款还款合同3篇
- 二零二四年医疗器械生产许可合同
- 2025年绿色建筑项目瓦工力工劳务分包及节能减排合同3篇
- 2025年度大型活动临时演员招募服务合同4篇
- 年度豆浆粉战略市场规划报告
- 年度电子厨房秤竞争策略分析报告
- 毕淑敏心理咨询手记在线阅读
- 亚硝酸钠安全标签
- pcs-985ts-x说明书国内中文版
- GB 11887-2012首饰贵金属纯度的规定及命名方法
- 小品《天宫贺岁》台词剧本手稿
- 医院患者伤口换药操作课件
- 欠薪强制执行申请书
- 矿山年中期开采重点规划
- 资源库建设项目技术规范汇编0716印刷版
- GC2级压力管道安装质量保证体系文件编写提纲
- 预应力混凝土简支小箱梁大作业计算书
评论
0/150
提交评论