WinDriver Kernel Plugin开发
PCIE 快速仿真
- 前言
- 工具准备
- 开发流程
前言
在Windows下开发PCIe驱动通常会用到winDriver这种第三方工具,对于实时要求高的应用就得利用winDriver Kernel Plugin,实测在这种方式的PCIE MSI中断处理在Windows下可以保证2ms(和硬件平台有关系)以内的实时响应,如果是Leagcy 中断处理会慢一些。如果此时的响应速度依然达不到要求,就得自己开发内核驱动来优化。
工具准备
dseo13b.exe
ddk_make.bat (winDriver\util 文件夹下)
Driver_Wizard 生成Kernel_Plugin的工程
开发流程
winDriver提供的Kernel Plugin的开发方式可以理解为一系列的内核回调函数,最终用户是来编写这些回调函数的具体内容。当你在用户层调用某些WDC_XX的函数,就会触发这些在内核执行的回调函数。
编写完成后利用ddk_make.bat 后会生成 xxx.sys文件,在windows7下对于sys的文件安装是需要数字签名的,如果没有签名就得利用这个dseo13b.exe工具签名后,在测试模式下安装。
以kp_pci为例,在winDriver\samples\pci_diag
这些函数是用户需要编写的内核回调函数的函数声明。
BOOL __cdecl KP_PCI_Open(KP_OPEN_CALL *kpOpenCall, HANDLE hWD, PVOID pOpenData,PVOID *ppDrvContext);
void __cdecl KP_PCI_Close(PVOID pDrvContext);
void __cdecl KP_PCI_Call(PVOID pDrvContext, WD_KERNEL_PLUGIN_CALL *kpCall,BOOL fIsKernelMode);
BOOL __cdecl KP_PCI_IntEnable(PVOID pDrvContext, WD_KERNEL_PLUGIN_CALL *kpCall,PVOID *ppIntContext);
void __cdecl KP_PCI_IntDisable(PVOID pIntContext);BOOL __cdecl KP_PCI_IntAtIrqlMSI(PVOID pIntContext, ULONG dwLastMessage,DWORD dwReserved);
DWORD __cdecl KP_PCI_IntAtDpcMSI(PVOID pIntContext, DWORD dwCount,ULONG dwLastMessage, DWORD dwReserved);
其中最重要的两个回调函数,函数的具体使用请参考Windriver手册
- KP_PCI_Call,用来user和kernel数据交互的重要函数
- KP_PCI_IntAtIrqlMSI 用来处理MSI的高优先级中断函数,在此函数内,实测能够保证2ms的实时性。
如果不想触发KP_PCI_IntAtDpcMSI函数只需要在 KP_PCI_IntAtIrqlMSI 内 return FALSE 就可以了,这样你的所有中断代码都只在KP_PCI_IntAtIrqlMSI 高优先级中断处理,(从而保证实时性),也就没有KP_PCI_IntAtDpcMSI以及WDC_IntEnable函数在User层使能中断回调函数的返回了
WinDriver Kernel Plugin开发相关推荐
- CRM中Plugin开发如何将功能放入多个模块
近期做CRM的Plugin开发,发现Plugin中的功能必须全部放在一个DLL里,感觉不爽,如果我要用的功能在别人提供的DLL里,或有些功能需要在多个地方使用岂不是很难过? 用了VS2012的Dyna ...
- Flutter Plugin开发流程
这篇文章主要介绍了Flutter Plugin开发流程,包括如何利用Android Studio开发以及发布等. 本文主要给大家介绍如何开发Flutter Plugin中Android的部分.有关Fl ...
- 通用流量录制回放工具 jvm-sandbox-repeater 尝鲜 (三)—— repeater plugin 开发
本文作者陈恒捷是TesterHome社区主编,第十届MTSC大会上海站-开源专场出品人.先后在PP助手.PPmoney.荔枝等公司从事测试效能提升相关工作,在测试技术及效率提升方面有丰富的经验积累. ...
- Kernel 社区 开发准备工作mutt 邮件使用
前言 Rust 的引入 对社区来说 是个 长期 且 可以从头 构建 kernel 的过程,这是一个很好的机会 日常的驱动开发,对工作有很大的好处,尤其是,最新的硬件抽象接口,和硬件协议 安装 mutt ...
- YUI3下widget的plugin开发
最近在尝试使用YUI3重建ExtFrame框架,使用YUI3做为更佳的UI和JS支持 和ExtJS比,YUI3的UI看起来缺少了足够的UI控件,但是,YUI3的widget开发更灵活(也更难掌握),Y ...
- skywalking plugin 开发初探 ONS plugin 实践
最近支持一下 ONS 内部skywalking 增强支持,RocketMQ 开源版本支持skywalking ,阿里云上的skywalking不支持 简单的实现一下,了解整个实现的逻辑. 一.开发指南 ...
- Flutter插件(Plugin)开发 - Android视角,flutter安装视频
// 上报播放器的状态的EventChannel EventChannel status_channel = new EventChannel(registrar.messenger(), " ...
- 搭建maya2015 API C++ plugin开发环境
1.从maya2015安装路径下复制安装包和工程向导到VisualStudio对应的目录. (根据maya版本最好选择对应版本的VisualStudio环境,这样能确保编译的插件能在项目要求的maya ...
- 搭建maya2015 maya2017 API C++ plugin开发环境
第一步:从maya2015安装路径复制开发需要的文件到Visual Studio对应的目录. (根据Maya版本最好选择对应的vs版本,才能保证编译的插件不出差,具有良好的兼容性.当然高手可以修改一些 ...
- jQuery plugin 开发的一个例子
测试代码: <html> <script src="jquery_1.7.1.js"> </script> <script>jQue ...
最新文章
- 【Live555】live555源码详解(七):GenericMediaServer、RTSPServer、RTSPClient
- C# 仿金山毒霸启动和关闭淡入淡出效果
- PowerShell2.0之维护网络(一)查看网络设置
- 云炬随笔20171213
- android+静态密钥,Android - 更安全地保存静态密钥
- 前端知识点梳理(二)
- 荣耀6plus+android5.1,荣耀66Plus EMUI3.0开发版5.5.1版本发布说明
- cstring移除指定字符串_从String中移除空白字符的多种方式!?差别竟然这么大!...
- 使用phpqrcode来生成二维码/thinkphp
- L3-011 直捣黄龙 (30 分)-PAT 团体程序设计天梯赛 GPLT
- (转)金融信息服务业的国际国内竞争格局及新动向
- Linux中/etc/rc开头文件详细解释
- PAT Basic Level 1072 开学寄语 (20 分)
- 内录音频(Windows系统)
- 17种最重要的项目管理方法
- matlab 打开文件bin
- TIFF图像文件格式与实例分析
- 互联网“诸神”的排位赛,2016年会是转折点?
- ROS2编程基础课程--库
- python--format
热门文章
- QT学习记录:编译错误“no matching function for call toXXX“
- BIM标准化系列写作思路
- PSX 610G 使用说明书
- AutoCAD 命令定义
- 罗辑思维:怎么样成为一个高手 文字版
- 7,Matlab实现末端轨迹跟踪
- Cisco Packet Tracer中配置链路聚合
- mysql5.6卸载干净_Mysql完全干净卸载教程
- 桌面计算机系统安装系统文件,电脑重装系统后还原桌面文件步骤
- Python爬取淘宝商品附加cookie修改