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

上传人(卖家):三亚风情 文档编号:2877702 上传时间:2022-06-07 格式:PPTX 页数:43 大小:2.05MB
下载 相关 举报
通过-Windows-驱动程序框架编写驱动程序课件.pptx_第1页
第1页 / 共43页
通过-Windows-驱动程序框架编写驱动程序课件.pptx_第2页
第2页 / 共43页
通过-Windows-驱动程序框架编写驱动程序课件.pptx_第3页
第3页 / 共43页
通过-Windows-驱动程序框架编写驱动程序课件.pptx_第4页
第4页 / 共43页
通过-Windows-驱动程序框架编写驱动程序课件.pptx_第5页
第5页 / 共43页
点击查看更多>>
资源描述

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:驱动程序测试和调试

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(通过-Windows-驱动程序框架编写驱动程序课件.pptx)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

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


163文库-Www.163Wenku.Com |网站地图|