
驱动设计
文章平均质量分 86
乄失忆丶雨
要想立于不败之地,就得不断学习和努力!
展开
-
PCI驱动框架简单分析
一、PCI 概念介绍 PCI是CPU和外围设备通信的高速传输总线。PCI规范能够实现32位并行数据传输,工作频率为 33MHz 或 66MHz ,最大吞吐率高达266MB/s,PCI的衍生物包括 CardBus、mini-PCI、PCI-Express、cPCI等。 PCI总线体系结构是一种层次式的体系结构。在这种层次体系结构中,PCI桥设备占据着重要的地位,它将父总线与子总线...转载 2019-02-15 17:09:47 · 940 阅读 · 0 评论 -
在VC6.0+WDM开发的错误异常
在VC6.0+WDM开发的错误异常9054DMA_WDMDriver.cppe:\WorkPlace\9054DMA_WDM\driver\9054DMA_WDMDriver.h(14) : error C2059: syntax error : 'bad suffix on number'e:\WorkPlace\9054DMA_WDM\driver\9054DMA_WD原创 2017-02-24 15:06:09 · 533 阅读 · 0 评论 -
线程绑定CPU核
Linux系统提供API函数sched_setaffinity和sched_getaffinity用于设置或获取线程的可以使用的CPU核。int sched_setaffinity(pid_t pid, unsigned int cpusetsize, cpu_set_t *mask);这个函数中pid表示需要设置或获取绑定信息的线程id(或进程id),如果为0,表示对当前调用的线转载 2017-03-03 14:59:18 · 1355 阅读 · 0 评论 -
DriverStudio开发PCI设备DMA数据传输
DriverWizard向导可以创建基本的wDM驱动程序框架,包括总线类型,地址空间,中断源,DMA资源,以及IOCTL(i/o控制代码)的定义等等。详细情况可参看DriverStudio的帮助文档,以下主要介绍如何用DriverWorks编写DMA方式的驱动程序。 DriverWorks关于DMA操作。封装了三个类:KDmaAdapter, KDmaTransfer和KC转载 2017-02-24 10:14:54 · 728 阅读 · 0 评论 -
关于调试PLX9054的一些总结和经验
语言:Verilog HDL & C软件环境:Win7 & ISE 14.7硬件:工控机 & PC & Xilinx FPGA & PLX9054调试目的:PLX9054的Local端有3个工作模式:C, J , M。在本次项目中,我们选择了C模式(pin157与pin156接地)。在C模式下有两种数据传输方式,DMA和直接数据传输。我们要往FPGA里先写入一组转载 2017-02-23 14:28:45 · 1354 阅读 · 0 评论 -
DMA原理和实验
最近忙于驱动这块,于是我自己整理了有关S3C2410的DMA的基本编程及DMA的相关寄存器操作。一.DMA访问的原理 1.DMA(Driect Memory Access)访问的概述 当系统内存想要与高速外设或者内存的不同区域之间进行大数据的快速传送时,查询和中断这两种方式不能满足要求:DMA就是为解决这样的问题提出来的。(中断方式较之查询方式来说,可以提高CPU的利用转载 2017-02-13 17:31:08 · 6016 阅读 · 0 评论 -
INF文件详解
INF文件格式要求一个INF文件是以段组织的简单的文本文件。一些段油系统定义(System-Defined)的名称,而另一些段由INF文件的编写者命名。每个段包含特定的条目和命名,这些命名用于引用INF文件其它地方定义的附加段。INF文件的语法规则:1、要求的内容:在特定的INF文件中所要求的必选段和可选段、条目及命令依赖于所要安装的设备组件。端点顺序可以是任意的,大多数的INF文件安转载 2017-01-20 16:38:23 · 872 阅读 · 0 评论 -
解决 安装驱动程序后设备管理器中显示黄色问号
其实很简单,在inf中有中设置图表索引显示黄色问号肯定说明 你是这样填写的HKR,,Icon,,"-18" PCI设备要改成 -5 数值如下Computer 0 Display 2 Mouse 5 Keyboard 6 FDC 9 HDC 9 Ports 10 Net 15 System 0 Sound 8转载 2017-01-20 10:36:53 · 3512 阅读 · 0 评论 -
编译驱动时出现的错误Error translating C:\Documents and Settings\Administrator\桌面\PLX9054_DMA_LVDS\Driver\objfr
--------------------Configuration: PLX9054_DMA_LVDS - Win32 Free--------------------Compiling resources with DDK resource compiler...Compiling with DDK compiler...PLX9054_DMA_LVDSDevice.cppPLX原创 2017-01-19 11:46:18 · 809 阅读 · 0 评论 -
驱动模块静态编译到 Linux 内核
一、准备好可以正常引导开发板的源码二、在内核源码kernel文件夹的driver目录下,创建led_arm文件夹 mkdir drivers/led_arm三、将“LED驱动实验”的驱动程序拷贝到led_arm目录下(详情见上一次LED驱动博客) 将led.c拷贝在该文件夹下面Kconfig就是对应着内核的配置菜单。假如要想添加新的转载 2017-03-30 13:45:30 · 492 阅读 · 0 评论 -
[Kernel] Linux 4.10.0+ 下编译安装内核模块(Hello World为例)
所用的发行版为 Ubuntu 16.04 LTS,使用内核 4.10.0+Step1. 在某个目录(比如~/workspace)下创建以下两个文件/*hello.c*/#include #include int init_module(void){ printk(KERN_INFO "init_module() called\n"); return 0;}void转载 2017-03-30 14:17:19 · 2915 阅读 · 0 评论 -
WDM驱动程序开发之PCI设备的配置空间:KPciConfiguration, KPciSlot类
KPciConfiguration, KPciSlot类:一、Overview KPciSlot类和KPciConfiguration类用于在驱动开发过程中协助支持基于PCI总线的设备。KDevice的派生类可以包含KPciConfiguration类的一个实例来存取设备配置空间的内容。为了满足这些需要,驱动编写人员需要提供PCI vendor ID和device ID给它的构造转载 2017-03-15 16:36:11 · 970 阅读 · 0 评论 -
解决WinDbg调试VMWare虚拟机连接不上
/*设定端口*/在VMware建立系统Windows XP SP3,并正确设定了端口号:增加"串行端口","\\.\pipe\com_1""该端是服务器。""另一端是应用程序。"选中 "已连接"选中 "启动时连接"设置虚拟机Windows XP SP3系统中的 boot.ini文件multi(0)disk(0)rdisk(0)partition(1)\W原创 2017-09-11 11:43:53 · 3320 阅读 · 0 评论 -
记录windows驱动开发inf文件详解
Windows驱动程序开发相关1. 驱动的注册表位置:1. 硬件子键:HKEY_LOCATION_MACHINE\SYSTEM\ControlSet001\Enum指明硬件的HID,VID,DID等跟硬件和硬件厂商相关的信息。2. 服务子健:HKEY_LOCATION_MACHINE\SYSTEM\ControlSet001\Services它主要是跟转载 2017-08-29 10:28:08 · 1415 阅读 · 1 评论 -
DPC(延迟过程调用)的技术细节
-DPC(延迟过程调用)的细节NTINSIDER,16卷,1期,1至2月2009延迟过程调用(DPC)是一种Windows常用功能。用途是广泛和多样的,但最常用的是我们通常所说的“ISR完成”和WindowsTimer底层技术。 如果DPC常用,为什么还要写此篇?我们发现,大多数人并不真正了解DPC工作的底层实现细节。并且,事实证明,一个深入的理解,在选择选项创建D转载 2017-09-04 11:47:29 · 2167 阅读 · 0 评论 -
Windows 驱动机制-定时、DPC及延时
1、定义Timer及DPCtypedef struct _DEVICE_EXTENSION { . . . KDPC Dpc; KTIMER Timer; } DEVICE_EXTENSION, *PDEVICE_EXTENSION;转载 2017-09-04 11:46:27 · 4115 阅读 · 0 评论 -
PagedPool 和 NoPagedPool的区别
PoolType在 MSDN的介绍上有 N 种, 其实常用的只有 2 种:PagedPool 和NonPagedPool。PagedPool是分页内存,简单来说就是物理内存不够时,会把这片内存移动到硬盘上,而NonPagedPool是无论物理内存如何紧缺,都绝对不把这片内存的内容移动到硬盘上。 在往下讲之前,先补充一个知识, 就是我们操作的内存,都是虚拟内存,和物理内存是两码事。 但虚转载 2017-09-04 11:10:05 · 2021 阅读 · 1 评论 -
赛普拉斯 cypress Cyapi使用心得
Cyapi使用心得(1)--USB连接2009-11-07 19:23 用Cyapi也有一阵了,这个确实比EZusb的api好用,简单说下Cyapi的使用心得,在编程中应该注意的一些问题,毕竟,说起来,那个CYapi的说明文档讲的实在太简单了点,好多东西都讲得不明白,只能在使用中自己慢慢积累了。 首先说下前提,固件架构是EZ-转载 2017-04-01 10:56:59 · 2980 阅读 · 1 评论 -
WDM驱动程序开发之读写设备存储器:KMemoryRange类
KMemoryRange类:一、Overview KMemoryRange类将一系列特殊的外围总线的地址映射到CPU总线的地址空间。考虑到可移植性,所有对memory周期(memory cycle)进行译码的设备驱动程序必须用这个类对memory的位置(location)进行正确的访问(access)。KMemoryRange是KPeripheralAddress类的派生类。转载 2017-03-15 16:40:11 · 1283 阅读 · 0 评论 -
WDM驱动程序开发之读写设备寄存器:KIoRange类
KIoRange类:一、Overview KIoRange类将一系列特殊的外围总线的地址映射到CPU总线的地址空间。CPU总线上的地址即可能在CPU的I/O空间,也可能在CPU的内存空间,这取决于平台和外围总线的控制方式。考虑到可移植性,所有对I/O周期(I/O cycle)进行译码的设备驱动程序必须用这个类对I/O的位置(location)进行正确的访问(access)。KIo转载 2017-03-15 16:38:20 · 850 阅读 · 0 评论 -
在驱动设计的时候出现的error C2509
在驱动设计的时候出现的error C2509可能就是在function.h文件中没定义相应的宏;function.h是程序员将要重载的虚函数的说明。DRIVER_FUNCTION_XXXX对应IRP_MJ_XXXX。比如:DRIVER_FUNCTION_READ 对应着IRP_MJ_READ。此处:#define DRIVER_FUNCTION_STARTIO //对应原创 2017-01-18 17:15:36 · 589 阅读 · 0 评论 -
链接选项修改解析----驱动开发
链接选项修改解析> ntoskrnl.libNT:驱动程序需要链接此库。如果是WDM驱动程序,则需要链接wdm.lib。> /nologo:链接时不显示版权信息。> /base:"0x10000":加载驱动时,设定加载在虚拟内存中的位置。> /stack:0x400000,0x1000:设定函数使用堆栈的大小。> /entry:"DriverEntry":入口函原创 2017-02-08 17:48:11 · 270 阅读 · 0 评论 -
[Windows驱动开发](一)序言
笔者学习驱动编程是从两本书入门的。它们分别是《寒江独钓——内核安全编程》和《Windows驱动开发技术详解》。两本书分别从不同的角度介绍了驱动程序的制作方法。 在我理解,驱动程序可分为两类三种: 第一类:传统型驱动 传统型驱动的特点就是所有的IRP都需要自己去处理,自己实现针对不同IRP的派发函数。其可以分为以下两种:转载 2017-01-13 16:01:06 · 213 阅读 · 0 评论 -
开发驱动时用到的内核打印函数KdPrint 的使用方法
转载自: http://blog.youkuaiyun.com/wjcsharp/article/details/6161712 DbgPrint会发送一个消息给内核调试器。DbgPrint and DbgPrintEx can be called at IRQL. However, Unicode format codes (%wc and %ws) can be used only转载 2017-01-09 14:21:01 · 1062 阅读 · 0 评论 -
NT式驱动程序都需要包含的头文件
包含ddk.h头文件,所有的NT式驱动程序都要包含此头文件。为了能够兼容C++程序,代码如下:#ifdef __cplusplusextern "C"{#endif#include #ifdef __cplusplus}#endif原创 2017-01-09 14:15:48 · 335 阅读 · 0 评论 -
code_seg("INIT")
Windows规定有些虚拟内存可以交换到文件中,这类内存被称为分页内存有些虚拟内存 永远不会交换到文件中,这些内存叫非分页内存#define PAGEDCODE code_seg("PAGE"); // 分页内存,可以交换到文件中#define LOCKEDCODE code_seg(); // 非分页内存,禁止交换到文件中#define INITCODE原创 2017-01-09 13:59:27 · 587 阅读 · 0 评论 -
VC6.0 +WDK 开发驱动的环境配置---外篇
在安装完VC6和WDK以后,就开始进行环境的配置了,可结果是弄了半个上午,还是搞不定。去网上找信息,关于WDK的,多是使用VS2005或VS2008的,有的要借助于DriverStudio之类的,按上面的方法来配置自己的工程看来不行。于是就参考了别人写的VC6+DDK编译驱动的文章,终于成了,不过有些地方还是有点不一样的。在这里把不一样的地方写下来,以供大家参考。 参考:h转载 2017-01-09 13:38:03 · 445 阅读 · 0 评论 -
VC6.0 +WDK 开发驱动的环境配置
1.安装好VC6和DWK,先后顺序无关。 从开始菜单找到WDK的程序目录,进入“Windows XP Checked Build Environment”,输入命令"build",此时WDK将会把自己进行编译,大约需要1分钟。2.VC6设置Include/Lib/Executable目录。 设置为自己需要编译的平台的各个目录即可, Include要确保找到ntddk.h转载 2017-01-09 11:08:57 · 385 阅读 · 0 评论 -
windows xp 驱动开发(三)DDK与WDK WDM的区别
转自: http://www.cnblogs.com/hyddd/archive/2009/03/15/1412684.html 最近尝试去了解WINDOWS下的驱动开发,现在总结一下最近看到的资料。 1.首先,先从基础的东西说起,开发WINDOWS下的驱动程序,需要一个专门的开发包,如:开发Java程序,我们可能需要一个JDK,开发WINDOWS应用程序,我们需要WINDOWS转载 2017-01-06 10:33:08 · 470 阅读 · 0 评论 -
Windows驱动开发的一些资源下载记录
1. 微软的WDK7.1、WDK8及符号表(symbols)等入口地址:http://msdn.microsoft.com/en-US/windows/hardware/hh852365① WDK8.1 百度盘备份:http://pan.baidu.com/s/1pJ7LH6jWDK8.1Sample示例 百度盘备份:http://pan.baidu.c转载 2016-12-28 16:32:27 · 497 阅读 · 0 评论 -
[Windows驱动开发](二)基础知识——数据结构
本节主要介绍驱动开发的一些基础知识。 1. 驱动程序的基本组成 1.1. 最经常见到的数据结构 a. DRIVER_OBJECT驱动对象[cpp] view plain copy// WDK中对驱动对象的定义 // 每个驱动程序都会有一个唯一的驱动对象与之对应转载 2017-01-13 16:03:08 · 322 阅读 · 0 评论 -
[Windows驱动开发](三)基础知识——驱动例程
一、NT式驱动的基本例程1. 驱动入口函数——DriverEntry[cpp] view plain copy// 驱动程序的一般性定义 NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING pRegistryPath);转载 2017-01-13 16:15:45 · 448 阅读 · 0 评论 -
[Windows驱动开发](四)内存管理
一、内存管理概念1. 物理内存概念(Physical Memory Address) PC上有三条总线,分别是数据总线、地址总线和控制总线。32位CPU的寻址能力为4GB(2的32次方)个字节。用户最多可以使用4GB的真实物理内存。PC中很多设备都提供了自己的设备内存。这部分内存会映射到PC的物理内存上,也就是读写这段物理地址,其实读写的是设备内存地址,而不是物理内存地址。转载 2017-01-13 16:17:10 · 260 阅读 · 0 评论 -
配置WINDOWS驱动程序的开发环境-走出第一步
开发我们自己设计的一块板子的PCI设备驱动,并给我指出了方向,具体说就是“三步走”战略:(1)入门。熟悉基于DriverStudio开发环境的设备驱动开发,同时侧面了解PCI设备驱动程序的相关知识。(2)进阶。运用纯DDK进行驱动开发,着重于学习别人的实例,并能熟练进行调试和修改。(3)实战。深入研究PCI总线标准,结合具体的电路板特性开发出一套自己的设备驱动。现在转载 2017-01-17 14:15:10 · 877 阅读 · 0 评论 -
PCI9054驱动设计开发
首先是选用开发工具。设备驱动这东东没有工具好像是没有办法做的。一年前我把自己智力估计过高,一头扎进了DDK里面,结果是按照书上做东东,做出来也不明白是什么意思。然后就搁浅了。后来用WinDriver,也没有什么概念性的提高。 现在不做不行了。可选的还有DS,这个与VC结合很好的东东,虽然别人说有这样那样的问题,但是还是有很多人在用。我想就从这里开始吧。 2003-3-1转载 2017-01-17 13:57:29 · 1026 阅读 · 0 评论 -
用DDK开发的9054驱动
和S5933比较起来,开发PLX9054比较不幸,可能是第一次开发PCI的缘故吧。因为,很多PCI的例子都是对S5933,就连微软出版的《Programming the Microsoft Windows Driver Model》都提供了一个完整的S5933的例子。在这篇有关DDK的开发论文里。我将分两个例子来构建PLX9054的驱动,第一个,是对《Windows2000 设备驱动程序设计指转载 2017-01-17 13:54:09 · 537 阅读 · 0 评论 -
用VS2005+Driverstudio+DDK开发第一个PCI驱动程序(详解)
我的前面一篇文章已经总结了安装VS2005+Driverstudio+DDK来搭建环境(见http://blog.youkuaiyun.com/shejiannan/article/details/9128735)。下面再来一步一步来编写我们的第一个PCI驱动程序。(转载请指明出于shejiannan的csdn博客)1.在安装好软件后,打开VS2005,TOOL目录下会多一个Driverstudio的转载 2017-01-17 13:45:36 · 2212 阅读 · 0 评论 -
VC编译选项部分解释---驱动开发
VC编译选项部分解释> /nologo:代表不显示编译的版权信息。> /Gz:默认函数调用采用标准调用(__stdcall)。> /W3:采用第三级的警告模式。> /WX:将警告信息变成错误信息,最大程度地保证了代码的可靠性。> /Z7:用Z7模式产生调试信息。VC默认的Program Database for “Edit & Continue”,这个和l原创 2017-02-07 16:23:45 · 343 阅读 · 0 评论 -
IRP 与 派遣函数
什么是派遣函数: 派遣函数是 WIndows 驱动程序中的重要概念。驱动程序的主要功能是负责处理I/O请求,其中大部分I/O请求是在派遣函数中处理的。也就是说,派遣函数是用来处理驱动程序提交过来的 I/O 请求。 那什么是 I/O 请求呢? 上层程序与驱动程序之间通信时,上层会发出I/O请求,即输入输出请求包(I/O Request packag转载 2017-01-11 15:49:13 · 947 阅读 · 0 评论 -
RtlInitUnicodeString、IoCreateDevice、IoCreateSymbolicLink、IoDeleteDevice 四个 API 驱动函数的使用
要解释“驱动对象”,就得先从 DriverEntry() 说起: 做过C语言开发的都知道程序是从 main() 函数开始执行。在进行 Windows 驱动程序开发的时候没有 main() 函数作为函数入口,取而代之的是 DriverEntry(). DriverEntry() 的原型如下:extern "C" NTSTATUS DriverEntry转载 2017-01-11 15:40:45 · 1605 阅读 · 0 评论