首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

WDM 驱动程序开发

2.WDM设备驱动程序的特点和原理2.1通用驱动程序对基本上一样的硬件,因为他们共享一个总线或完成类似的任务,设备驱动程序可以使用这些标准的驱动程序功能,使公共总线的共享容易,且更容易写出新的驱动程序,...总线驱动程序,如USB、1394,和类驱动程序。...分配并处始化一个IRP,每个I/O请求有主功能代码 2.4 IRP参数比如一个写的I/O请求转换成一个IRP时,I/O管理器填写主要的IRP首部,并构造第一个个栈单元,对写请求来讲,首部包含用户缓冲区信息...,dwShareMode为0时来请求独占内核对象在设备对象DEVICE_OBJECT结构中存储设备的信息,对于与设备的每个交互,相关的DEVICE_OBJECT被传递给驱动的回调例程。...本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

1.7K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    USB Gadget 驱动程序框架

    编写 USB 设备驱动程序时,主要是: 读取设备的各类描述符,比如 endpoint 描述符,得到端点号 使用底层 USB Host Controller 驱动程序提供的 API 函数,从 endpoint...从构造描述符的角度理解 Gadget 框架 假设你要【模拟】一个 USB 设备: 这个 USB 设备含有厂家信息:它记录在设备描述符里,所以设备描述符应该由你提供 这个芯片可能有多种配置,这也是由你决定...,所以配置描述符应该由你提供 某个配置下多个接口,接口就是功能,Linux 内核里事先提供了很多功能的驱动程序,所以:接口描述符是内核提供的 某个接口下需要什么端点,也是内核里各类功能的驱动程序提供的...使用 OTG 线连接电脑和开发板时,电脑软件会执行如下操作: 使用控制传输,读取设备信息(设备描述符):第一次读取时,它只需要得到 8 字节数据,因为第 8 个数据表示端点 0 能传输的最大数据长度。...可以分为 3 层: UDC 驱动程序:类似"设置地址"的控制传输,在底层的 UDC 驱动程序里就可以处理, 这类请求有: USB_REQ_SET_ADDRESS USB_REQ_SET_FEATURE

    3.1K30

    Nand Flash驱动程序分析

    FWEN和FREN是写使能信号,和读使能信息。来控制读写的操作 4. 当FCLE为高电平时传输的是命令, FALE为高电平时传输的是地址,当FCLE和FALE都为低电平时传输的是数据。...发出数据或者读取数据 */ /*其次,我们来分析三星公司自带的Nand Flash驱动程序。...路径: drivers/mtd/nand/s3c2410.c*/ //老套路了还是平台驱动程序,既然是平台驱动程序,就有平台设备的存在 static int __init s3c2410_nand_init.../* check, if a user supplied wait function given */ if (chip->waitfunc == NULL) //如果没有设置等待函数,那就需要在驱动程序中设置...*/ /*上面的分析是对自带的程序分析: 那我们如何写驱动程序同时也能融合到内核为我们提供好的nand层*/ /* 1. 分配一个nand_chip结构 2.

    55620

    字符设备驱动程序接口

    驱动模块操作命令 # 列出当前内核中已经安装的模块(list module) lsmod # 安装模块(install module) insmod xxx.ko # 打印模块的自带信息(module...information) modinfo xxx.ko # 卸载模块(remove module) rmmod xxx # 查看驱动加载信息 dmesg # 查看设备号 cat /proc/devices...# 创建设备文件 # 格式(c表示字符设备驱动、b表示块设备驱动): mknod /dev/xxx c或者b major minor 查看设备文件信息 ls -l /dev/xxx 最简单的模块...操作系统的命令行中也会有一个打印级别的设置(值为0-7),当前操作系统中执行printk的时候会去对比printk中的打印级别和操作系统命令行中设置的打印级别,小于命令行设置级别的信息会被打印出来,大于的会被拦截...附:可在模块中包含的其他描述信息还有:MODULE_DESCRIPTION(模块的简短描述)、MODULE_VERSION(代码修订号)、MODULE_ALIAS(模块别名)等等 Makefile #

    1.4K30

    浅说驱动程序的加载过程

    所谓“内核模块”,指的便是通常所说的驱动程序。不过因为加载到内核的程序通常是用一来操作硬件的,所以驱动程序的名字要更常见些。在以下的叙述中,我将主要使用“驱动程序”这个词。...在介绍如何加载驱动程序之前,首先介绍如何编译一个基本的驱动程序。 通常,编写Windows系统的驱动程序必然要用到微软提供的WDK,即Windows Driver Kits。...编译驱动程序通常使用build工具来构建的。 内核驱动程序通常是用C语言编写的,但这里我为了省事,在程序使用了一点简单的汇编代码极少,所以这个程序很简单。...这时在你的项目文件夹里面会出现一个保存有新创建的驱动程序的新的文件夹。本例中,至此,我已经得到了一个名为rootkit.sys的驱动程序。...以上所展示的是一个简单的驱动程序的编译过程,接下来我们编写加载驱动程序到内核的代码。 通常的方案是将驱动程序作为加载程序的一项资源,包括到加载程序中去,在加载程序运行的时候再将驱动程序释放出来。

    2.9K90

    PCI设备驱动程序「建议收藏」

    当你加载PCI驱动的时候,驱动程序会把系统中已经存在的设备的厂商号和设备号与驱动程序中的对比,如果一致,则会注册PCI总线驱动并进行下一步操作。...下面是我写的一个PCI总线的驱动程序,注意是PCI设备识别时的驱动程序,这里并没有实现具体的功能驱动。...PCI设备的驱动分成两个部分,一部分是总线的,就是PCI设备识别、调用驱动程序probe函数的部分,另一部分就是具体的功能驱动,比如网卡。...PCI_ANY_ID, //子厂商ID PCI_ANY_ID, //子设备ID }, { 0, }, }; MODULE_DEVICE_TABLE(pci, mypci_table); /* 设备模块信息...本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    2.2K21

    基于WDF的PCIPCIe接口卡Windows驱动程序(3)- 驱动程序代码(头文件)

    在第4行的注释里,写明了本文件的主要作用是为驱动程序和应用程序的通信提供GUID接口。...GUID(Globally Unique Identifier)是微软推出的全局唯一标识符,通过使用某个特定的算法(比如根据时间或地点等信息)生成一组128位二进制数,来标识某一个实体,比如硬盘上的一张图片...开发者可以使用VS2013下的工具GUIDGen.exe生成GUID值,该GUID标识驱动程序,应用程序根据这个GUID值来找到对应的驱动程序。...CTL_CODE定义中有一个Method域,该域定义了驱动程序中获取应用程序数据缓冲区地址的方式。...,由I/O管理器完成复制数据任务;direct方式:I/O管理器锁定应用程序缓冲区的物理内存页,并创建一个MDL(内存描述符表)来描述该页,驱动程序将使用MDL工作;neither方式:I/O管理器把应用程序缓冲区的虚拟地址传递给驱动程序

    1.5K20

    基于WDF的PCIPCIe接口卡Windows驱动程序(4)- 驱动程序代码(源文件)

    本篇文章将对PCIe驱动程序的部分源文件代码作详细解释与说明。...11-58行定义了DriverEntry函数,每个 KMDF 驱动程序必须有一个 DriverEntry 例程,当操作系统检测到有新硬 件设备插入后,会查找它对应的驱动程序,找到这个驱动程序中的 DriverEntry...; (5)PnP管理器创建设备资源列表并发送给驱动程序; (6)如果驱动程序调用WdfInterruptCreate例程,WDF框架就会在资源列表中分配给中断资源给驱动程序; (7)设备进入工作状态后,...KMDF将会将设备所有的请求发送到默认I/O队列, 12 然后它会调用驱动程序的EvtIoDefault来将每一个请求递交给驱动程序。...在WDF驱动程序中,处理I/O请求的关键判断哪些类型的I/O请求由驱动程序处理,哪些类型的I/O请求由WDF框架自动处理。

    2.3K31

    基于WDF的PCIPCIe接口卡Windows驱动程序(5)-如何为硬件移植驱动程序

    值来找到对应的驱动程序。...3.1 GUID说明 GUID( Globally Unique Identifier) 是微软推出的全局唯一标识符, 通过使用某个特定的算法( 比如根据时间或地点等信息) 生成一组128 位二进制数...应用程序根据底层设置的 GUID 获取设备路径, 从而与指定设备建立连接: 首先调用SetupDiGetClassDevs 函数获得符合传入参数 GUID 的设备信息集合 hDevInfo; 然后根据设备信息集合...hDevInfo 和 GUID 调用 SetupDiEnumDeviceInterfaces 函数枚举设备信息集合中的设备,并输出设备接口数据信息 DeviceInterfaceData ; 再 根...的缓冲区大小 ,接着为其开辟空间 , 最后再调用一次SetupDiGetDeviceInterfaceDetail 函数获得设备接口详细信息 pDeviceInterfaceDetailData; 最后根据设备接口详细信息的设备接口路径

    1.7K20
    领券