
Windows驱动开发
文章平均质量分 81
YFJYJFY
这个作者很懒,什么都没留下…
展开
-
驱动程序(1) win10下Visual Studio 2017的安装以及双机调试搭建
前言:毕业上班以来,现在这个项目比较缺一个做windows下驱动程序开发的,所以本人就顶上来了。之前没有接触过,完全萌新,全靠一本武安河编著的《Windows设备驱动程序WDF开发》和各路网上大神们的博客。现在把这段时间来的一些经历和体会写下来,如有错误还请各位请点,轻喷 QAQwin10下Visual Studio安装 本人用的是windows10教育版,首先去微软官网下载VS Comm...原创 2018-09-07 10:27:26 · 5581 阅读 · 3 评论 -
驱动程序(12) Windriver下访问虚拟设备内存资源的方法
前言在驱动程序(10)里曾经讲过有一种方法,可以把电脑端的一部分内存保留下来制成类似于虚拟设备,只提供给windriver使用,从而作为DMA传输的目的地址。现在讲一下当DMA传输完成之后,如何去访问这块内存资源。实际上,我们就可以将这部分内存资源看成挂载在了虚拟设备上,可以通过访问真实外部设备一样去访问虚拟设备。虚拟设备制作#define ReservedMemBase 0x42f0000...原创 2019-01-16 15:35:52 · 1651 阅读 · 5 评论 -
驱动程序(11) Windriver下读写外部设备BAR内存资源的方法
前言在利用windriver生成外部设备的驱动程序的时候,我们往往需要去访问外部设备上的内存资源,windriver提供了几种API接口(以下都以32位来介绍),只需要提供一些参数就可以访问到外部设备的内存资源了。WDC_WriteAddr32/WDC_ReadAddr32这两个API函数的定义如下:hDev:被访问的外部设备的句柄dwAddrSpace:外部设备上的某个地址空间段,也就...原创 2019-01-16 14:32:42 · 2409 阅读 · 0 评论 -
驱动程序(10) Windriver实现DMA传输时分配超大内存Buffer的办法
前言利用windriver做DMA传输的时候,尤其是将数据从板卡传输到PC端时,往往需要分配内存buffer。windriver给了两种方法,Contiguous buffer模式(WDC_DNAContigBufLock)和Scatter/Gather(WDC_DMASGBufLock)模式。PC内存比较小的情况下可以使用Scatter/Gather模式,分配到的内存buffer就是每页固定、...原创 2018-12-24 15:06:09 · 4662 阅读 · 14 评论 -
驱动程序(8) Windriver初步使用和快速生成驱动程序代码
Windriver简介之前使用微软WDF框架下的WDK开发Windows驱动程序,使用起来调试速度太慢了,同时需要对内核态驱动程序有一定了解,就转到使用Windriver来开发驱动程序。就我个人而言,这款软件最大好处就在于它屏蔽了内核态下驱动程序的细节,所有的开发工作都建立在用户态下,你不必担心因为某些操作导致电脑蓝屏死机(当然有些特殊操作同样会蓝屏);开发代码也像写C语言一样,调试起来非常方...原创 2018-12-17 11:34:33 · 3910 阅读 · 7 评论 -
驱动程序(9) 利用Windriver修改代码实现DMA传输定制功能的驱动程序
前言前一篇文章讲到了利用windriver来生成一个对应使用的板卡的驱动程序,并且有相对应的INF文件给板卡安装上。这个生成的驱动程序代码包含了基本的访问板卡的功能,甚至可以实现DMA传输等功能(需要你的板卡支持DMA操作),但是这个驱动程序是基于交互式的,将程序编译生成exe文件运行后,还需要操作者输入访问的寄存器偏移地址或者数据等,没法做到自动执行。所以,我们在得到这份驱动代码后,基于这个框...原创 2018-12-21 15:13:53 · 4637 阅读 · 9 评论 -
驱动程序(2) Win10+VS2017驱动程序在双机通信下的内核态调试
上一篇内容里已经讲到了如何搭建双机通信,这也是为内核态下的调试做准备。众所周知,KMDF驱动程序主要分为两个部分的代码,一个是包含DriverEntry、DeviceAdd和一些对于触发事件的回调函数,下面我会统一称为驱动程序;另一部分则是从用户态上发出一些IO指令请求,需要驱动程序来做出应答,通常使用的是CreteFile或者IoDeviceControl这些函数,这部分我叫它应用程序。 无论...原创 2018-09-07 10:47:28 · 1332 阅读 · 2 评论 -
驱动程序(7) WDF下DMA传输的驱动程序代码详细说明之应用程序
这一篇主要说明应用程序怎么去和驱动程序通信的,包括识别打开驱动程序,传递数据到驱动程序,同时接收驱动程序返回的数据。application.c首先是应用程序的创建,WDF里利用模板生成驱动程序时时不带有应用程序的源文件的,需要我们自己手动生成,其实就是和创建一个C语言文件一样。找到驱动程序的解决方案,右键选择‘添加’->‘新建项目’->‘测试’->‘Applications...原创 2018-12-14 15:01:29 · 1371 阅读 · 1 评论 -
驱动程序(6) WDF下DMA传输的驱动程序代码详细说明之queue.c
这一篇主要讲queue.c里对于消息请求队列的处理,涉及到了和应用程序的通信,同时为了以后的项目需求,也加入了DMA传输和传输完成后的MSI中断处理。queue.c/*++Module Name: queue.cAbstract:This file contains the queue entry points and callbacks.And it includes DeviceIoC...原创 2018-12-14 15:01:12 · 2350 阅读 · 7 评论 -
驱动程序(5) WDF下DMA传输的驱动程序代码详细说明之device.c
这一篇文章说明了在device.c文件里,驱动程序怎样枚举设备,然后获得设备资源,并将其显示出来供开发者使用。device.c/*++Module Name: device.c - Device handling events for example driver.Abstract: This file contains the device entry points and callba...原创 2018-12-14 15:00:51 · 2160 阅读 · 10 评论 -
驱动程序(4) WDF下DMA传输的驱动程序代码详细说明之driver.c
从这一篇开始介绍几个比较重要的源文件和应用程序,并且会对其中一些关键代码进行说明。这些代码流程都是本人亲身测试可行的,但是由于当时调试时杂七杂八的东西加的太多,现在看起来有的地方的代码风马牛不相及,如果完全照搬的话可能行不通的,还是需要各位读者自行理解然后加以改进的。当然如果有问题也欢迎各位读者指出更正,谢谢!driver.c/*++Module Name: driver.cAbstrac...原创 2018-12-14 14:54:03 · 2707 阅读 · 1 评论 -
驱动程序(3) WDF下DMA传输的驱动程序代码详细说明之头文件
之前提到根据KMDF模板生成的程序里主要有5个头文件和3个源文件,接下来的几篇文章则会对这些文件详细说明,一个驱动程序是怎样写成的。这一篇主要说明几个头文件。1. device.h/*++Module Name: device.hAbstract: This file contains the device definitions.Environment: Kernel-mode ...原创 2018-12-14 14:53:45 · 1674 阅读 · 0 评论 -
驱动程序(13) 将Windriver编写的程序制成DLL供其他程序调用
制作动态链接库(DLL)之前的操作里,我通常是将写好的程序生成exe文件,运行来看结果如何;但是实际中往往驱动程序需要被上层软件调用,比如我现在利用windriver来完成DMA传输后,传输好的数据需要提供给上层软件继续使用,这时候将我们写好的程序做成DLL就会方便很多。1. 改变主程序的配置类型第一步我们需要改变主程序的配置类型,选择主程序的“项目->配置属性->常规->...原创 2019-05-21 11:27:05 · 1869 阅读 · 9 评论