书签 分享 收藏 举报 版权申诉 / 43
上传文档赚钱

类型通过-Windows-驱动程序框架编写驱动程序课件.pptx

  • 上传人(卖家):三亚风情
  • 文档编号:2877702
  • 上传时间:2022-06-07
  • 格式:PPTX
  • 页数:43
  • 大小:2.05MB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《通过-Windows-驱动程序框架编写驱动程序课件.pptx》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    通过 Windows 驱动程序 框架 编写 课件
    资源描述:

    1、议程IO 处理硬件交互即插即用和电源交互WDF 究竟是什么? 概括了底层操作系统内部的复杂情况实现了代码少于 20 行的驱动程序在不同的设备类上保持一致如 GPIO、UART、I2C、NFC、传感器驱动程序内置框架活动日志记录驱动程序分析专用工具支持用户模式和内核模式跨大多数设备类的 1000 个驱动程序原始 UMDF v1 基于 C+ COM崩溃的驱动程序仅影响托管进程,而不影响整个系统重启策略可以恢复已崩溃的 UMDF 驱动程序WDF 可在整个通用平台上使用驱动程序工作流驱动程序初始化硬件准备I/O 请求处理硬件交互驱动程序清理即插即用/电源交互驱动程序工作流驱动程序初始化硬件准备I/O

    2、请求处理硬件交互驱动程序清理即插即用/电源交互对象是 WDF 的基础框架中的一切都由对象表示(驱动程序、设备、队列等)对象具有方法、事件和属性对象通过 WdfDeviceGetDriver 等方法中的句柄访问WDFOBJECT方法属性事件在对象上运行的 WDF 函数可以从中注册回调可通过 get/set 方法访问的单个值自动对象生命期管理WDF 管理对象的分配和释放维持父/子层次结构如,当客户端完成 WDF 请求时,它会自动删除 WdfRequestCompleteWithInformation( Request, STATUS_INVALID_DEVICE_REQUEST, (ULONG_P

    3、TR) 0 );驱动程序(WDFDRIVER)设备(WDFDEVICE)设备(WDFDEVICE)队列(WDFQUEUE)队列(WDFQUEUE)对象上下文驱动程序工作流驱动程序初始化硬件准备I/O 请求处理硬件交互驱动程序清理即插即用/电源交互硬件准备事件获取硬件资源、进行一些静态配置(PrepareHardware)实现中断(InterruptEnable)进入通电状态(D0Entry)准备硬件NTSTATUS OnPrepareHardware( WDFDEVICE Device, WDFCMRESLIST ResourcesRaw, WDFCMRESLIST ResourcesTran

    4、slated ) int ResourceCount = WdfCmResourceListGetCount( ResourcesTranslated ); for (i=0; i Type) case CmResourceTypePort: case CmResourceTypeMemory: case CmResourceTypeInterrupt: default: break; return STATUS_SUCCESS;获取硬件资源、进行一些静态配置(PrepareHardware)实现中断(InterruptEnable)进入通电状态(D0Entry)设备通电NTSTATUSOnD

    5、0Entry( IN WDFDEVICE Device, IN WDF_POWER_DEVICE_STATE RecentPowerState ) PADXL345AccDevice pAccDevice = nullptr pAccDevice = GetContext(Device); WdfWaitLockAcquire(pAccDevice-m_WaitLock); I2CSensorWriteRegister(pAccDevice-m_I2CIoTarget, MY_REGISTER, MY_VALUE, sizeof(MY_VALUE) ); WdfWaitLockRelease(

    6、pAccDevice-m_WaitLock); pAccDevice-m_PoweredOn = true; return STATUS_SUCCESS;获取硬件资源、进行一些静态配置(PrepareHardware)实现中断(InterruptEnable)进入通电状态(D0Entry)实现中断NTSTATUS OnInterruptEnable( IN WDFINTERRUPT Interrupt, IN WDFDEVICE Device) PDEVICE_EXTENSION devExt; ULONG regUlong; PULONG intCsr; devExt = GetDevice

    7、Context(WdfInterruptGetDevice(Interrupt) ); intCsr = &devExt-Regs-Int_Csr regUlong = READ_REGISTER_ULONG( intCsr ); WRITE_REGISTER_ULONG( intCsr, regUlong ); return STATUS_SUCCESS;获取硬件资源、进行一些静态配置(PrepareHardware)实现中断(InterruptEnable)进入通电状态(D0Entry)按需扩展EvtIoResumeEvtDMAEnablerFillEvtDeviceSelfManaged

    8、IoInitEvtDeviceDisarmWakeFromSxEventChildListScanForChildrenEvtDeviceRemoveAddedResources获取硬件资源、进行一些静态配置(PrepareHardware)实现中断(InterruptEnable)进入通电状态(D0Entry)驱动程序工作流驱动程序初始化硬件准备I/O 请求处理硬件交互驱动程序清理即插即用/电源交互通过框架进行 I/O 传递I/O 调度程序队列选择执行级别和同步范围 驱动程序的 OnReadIRP电源管理WDFREQUESTWDFREQUEST队列选择有序:一次传递一个请求并行:请求到达时即

    9、传递给驱动程序手动:驱动程序按其自身速度从 WDFQUEUE 检索请求I/O 调度程序队列选择执行级别和同步范围 驱动程序的 OnReadI/O电源管理I/O 调度程序并行有序手动IRPWDFREQUESTWDFREQUESTWDFREQUEST读取写入IOCTL执行级别和同步范围IRQL:中断请求级别 (PASSIVE_LEVEL、DISPATCH_LEVEL)执行级别:事件回调在调用时所在的 IRQL同步范围:通过管理锁强制使回调执行序列化的机制I/O 调度程序队列选择执行级别和同步范围 驱动程序的 OnReadI/O电源管理设备范围:同步设备队列和文件对象的回调 队列范围:同步队列的回调

    10、无:无同步电源管理WDF 队列可由“电源管理”仅当给设备供电时才传递请求帮助驱动程序避免在设备断电时接触硬件EvtIoStop:在电源中断时调用了已传递给驱动程序的所有请求EvtIoResume:在通电时调用了所有发送中的请求I/O 调度程序队列选择执行级别和同步范围 驱动程序的 OnReadI/O电源管理请求取消在以下情况下,应将请求创建为可取消的请求:I/O 将花费大量时间完成对硬件的 I/O 操作是可中止的 WdfRequestMarkCancelable ( Request, OnRequestCancel );驱动程序工作流驱动程序初始化硬件准备I/O 请求处理硬件交互驱动程序清理即

    11、插即用/电源交互使用 I/O 目标与硬件交互需要堆栈中其他驱动程序的协助I/O 目标可以是堆栈中的下一个驱动程序可以是堆栈之外的外部驱动程序I/O 目标充当框架和目标设备对象之间的转换器默认 I/O 目标和远程 I/O 目标对比驱动程序堆栈中较低的下一个设备对象WDFIOTARGET ioTarget = WdfDeviceGetIoTarget(Device);远程目标表示一个由某个其他驱动程序创建的设备对象将请求发送到 I/O 目标Sync - WdfIoTargetSendReadSynchronouslyAsync - WdfIoTargetFormatRequestForRead 后

    12、跟 WdfRequestSend 驱动程序可以将请求配置为在超时后取消为了避免驱动程序挂起,建议使用此方法WdfIoTargetSendIoctlSynchronously( ioTarget, NULL,IOCTL_ACPI_ASYNC_EVAL_METHOD,&inputBufDesc, &outputBufDesc,NULL, NULL); 驱动程序工作流驱动程序初始化硬件准备I/O 请求处理硬件交互驱动程序清理即插即用/电源交互即插即用和电源交互设备电源已拔出。驱动程序已手动禁用。系统挂起。设备长时间空闲。用户按下鼠标按钮来唤醒系统。选择加入行为模型硬件状态不稳定的设备(电源开/关)D

    13、0Entry、D0Exit、具有唤醒信号的设备ArmWakeFrom、DisarmWakeFrom、如果事件不含为其注册的驱动程序回调,则该事件由 WDF 处理设备电源已拔出/禁用WDF 停止电源管理的队列和顶层驱动程序最终不会发送对不存在的设备的请求框架为已传递的请求调用 OnIoStop 回调 驱动程序可以正常停止 I/O WDF_DEVICE_POWER_POLICY_WAKE_SETTINGS_INIT(&wakeSettings); WdfDeviceAssignSxWakeSettings( device, &wakeSettings );系统进入睡眠驱动程序可以要求 WDF 在系

    14、统睡眠时自动中断设备电源驱动程序可以将其设备设置为在输入时唤醒系统驱动程序工作流驱动程序初始化硬件准备I/O 请求处理硬件交互驱动程序清理即插即用/电源交互GitHub 上的 WDF!在 GitHub 提供包括 KMDF 和 UMDF v2在 MIT 许可证下发布包含私有符号开源范围驱动程序崩溃使用 WDF 编写更好的驱动程序仅实现其需要自定义的事件回调的驱动程序提供功能强大的实用工具对象,管理对象生命期自动化框架日志记录(WPP 记录器)Windows 调试器 (WinDbg) 的自定义扩展 Windows 性能分析器 (WPA) 的新增加载项延伸阅读和文档以 Windows 驱动程序为基础

    15、开发驱动程序,由 Orwick 和 Smith 编写 内核模式驱动程序框架设计指南用户模式驱动程序框架设计指南 选择驱动程序模型 一个基本的“Toaster”示例 (UMDF2)回显驱动程序示例,显示队列和 IOCTL (KMDF)USB FX2 函数驱动程序 (UMDF2)3 号大宴会厅8 号楼12:30硬件生命周期简介13:40Windows 驱动程序开发工具15:00Windows 驱动程序开发简介16:10通过 WDF 编写驱动程序10:30实验 1:驱动程序开发入门11:30午餐午餐12:30访问 GPIO、I2C 和 UART 设备实验 3:驱动程序测试和调试13:40驱动程序测试和调试实验 2:Sharks Cove 上的传感器驱动程序15:00通过 Hardware Lab Kit 进行测试实验 2:Sharks Cove 上的传感器驱动程序16:10驱动程序签名、分发、维护简介实验 4:通过 Hardware Lab Kit 进行测试17:20实验 4:通过 Hardware Lab Kit 进行测试 09:00实验 1:驱动程序开发入门10:10实验 3:驱动程序测试和调试

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:通过-Windows-驱动程序框架编写驱动程序课件.pptx
    链接地址:https://www.163wenku.com/p-2877702.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库