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

Linux USB 设备驱动模型

Linux 内核源码:include\linux\usb.h Linux 内核源码:drivers\hid\usbhid\usbmouse.c 1....BUS/DEV/DRV 模型 "USB 接口"是逻辑上的 USB 设备,编写的 usb_driver 驱动程序,支持的是"USB 接口": USB 控制器或 Hub 识别出 USB 设备后,会创建、...注册 usb_device usb_device 被"drivers\usb\core\generic.c" 驱动认领后,会选择、设置某个配置 这个配置下面的接口,都会分配、设置、注册一个 usb_interface...接口函数 在 USB 设备驱动程序中,能使用的 USB 函数都在这个头文件里:include\linux\usb.h。...:这是一个同步函数,它会等待 URB 结束 usb_unlink_urb:这是一个异步函数,它不会等待 URB 结束,USB 控制器驱动会调用它的回调函数 void usb_kill_urb(struct

39840

Linux驱动开发: USB驱动开发

四、 linux内核下USB相关的API函数与数据结构 前面介绍了USB相关一些基础概念与重要的数据结构,接下来就分析在linux内核中如何编写一个USB 驱动程序,编写与一个USB设备驱动程序的方法和其他总线驱动方式类似...当然,这些制造商和设备标识需要我们编写进USB 驱动程序中。 USB 驱动程序依然遵循设备模型 —— 总线、设备驱动。...urb(USB Request Block)Linux内核中USB驱动实现上的一个数据结构,用于组织每一次的USB设备驱动的数据传输请求。...鼠标驱动(中断传输方式) 5.1 USB驱动注册框架代码 #include #include #include ...#include /* 本程序为USB鼠标驱动程序,要安装本驱动,需要先将内核自带的USB驱动程序卸载掉 */ //定义USB的IDTAB 24ae:2002 static

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

USB总线-Linux内核USB3.0设备控制器驱动框架分析(四)

最上层的是Gadget Function驱动,代表了具体设备驱动,如大容量存储设备驱动(U盘、移动硬盘等)、通讯类设备驱动USB串口、USB虚拟网卡等)、UAC驱动USB麦克风、USB声卡等USB...2.Gadget Function驱动 Linux内核的USB Gadget Function驱动都在drivers/usb/gadget/function/目录下,有通讯设备类(Communication.../usb/gadget/legacy/目录下,如USB音频设备驱动文件audio.c,USB虚拟以太网设备驱动文件ether.c,HID设备驱动文件hid.c。...usb_composite_probe初始化复合设备驱动usb_composite_unregister卸载复合设备驱动。...Linux 3.11版本引入了USB Gadget Configfs。在用户层可以通过暴漏出来的API定义USB Gadget设备的任意功能和配置,极大的方便了USB复合设备的配置和使用。

9.4K20

arm linux利用alsa驱动并使用usb音频设备

一.背景: arm linux的内核版本是3.13.0 二.准备工作 添加alsa驱动到内核中,也就是在编译内核的时候加入以下选项: ?...接下来就重新编译内核即可 三.交叉编译alsa-lib和alsa-utils (alsa-utils是一系列的音频设备控制工具,而alsa-lib是alsa-utils依赖的库,所以先将alsa-lib...设置录音时的音量大小 amixer cset numid=8,iface=MIXER,name='Mic Volume' 255 六:注意事项: 如果将编译好的alsa-utils中的工具复制到fat32格式的存储设备的时候...,注意fat32是不支持软链接的,此时需要直接复制一个aplay并将名称改为arecord: cp aplay arecord 总结 以上所述是小编给大家介绍的arm linux利用alsa驱动并使用...usb音频设备 ,希望对大家有所帮助!

6K31

USB总线-Linux内核USB3.0设备控制器之UDC驱动分析(六)

USB Function驱动通过调用这些接口匹配及访问USB设备控制器,而底层USB控制器驱动要实现这些接口定义的功能。下面分析一下主要的UDC驱动接口调用流程。 2....前者通过UDC设备的名称匹配,通常是configfs配置的USB Function驱动使用,后者直接匹配udc_list链表中的第一个UDC驱动,通常是legacy类型的USB Function驱动使用...驱动和UDC绑定成功后,通过调用usb_gadget_udc_start接口开启USB设备控制器,接收主机发送的请求,其内部调用的dwc3设备控制器驱动的dwc3_gadget_start函数。...stall状态,只有设备驱动自己可以清除。...Function驱动和UDC驱动绑定的时候,实质上是通过usb_udc_connect_control函数控制设备和主机连接和断开。

8.5K20

Linux USB 设备基础理论

通过扫描以下目录获取物理节点所有 USB 设备: /sys/bus/usb/devices/usb* /sys/bus/usb/devices/usb*/$busnum-* 从该文件系统收集某一个设备的主要信息如下...(该总线的第几台设备) speed: 速率 bDeviceClass: 设备类型 idVendor: 设备的生产商ID,由USB设备生产商向USB-IF官方来统一管理和申请 idProduct: 该生产商生产的产品编号...# 定位某一个 USB 设备的方法有两种: busnum + devnum idVendor + idProduct 设备类型bDeviceClass# 类代码 用法 描述 00h 设备描述符 Use...参考文献# USB设备类bDeviceClass、bDeviceSubClass、bDeviceProtocol By USB 中文网 USB设备描述符中的idVendor、idProduct和bcdDevice...By USB 中文网 USB 硬件设备的序列号 By IBM 注:本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。

28730

Linux设备驱动程序(一)——设备驱动简介

前言 这一部分主要是用来介绍 Linux 设备驱动程序的一些基本概念,包括:Linux 设备驱动程序的作用、内核功能的划分、设备和模块的分类以及版本编号。...一、Linux 设备驱动程序的作用 设备驱动程序就像一个个的“黑盒子”,使某个特定硬件响应一个定义良好的内部编程接口,这些操作完全隐藏了设备的工作细节。...Linux,相反,允许应用程序读写一个块设备象一个字符设备一样 – 它允许一次传送任意数目的字节。结果就是,块和字符设备的区别仅仅在内核在内部管理数据的方式上,并且因此在内核/驱动的软件接口上不同。...通常,某些类型的驱动与给定类型设备的其他层的内核支持函数一起工作。例如,你可以说 USB 模块,串口模块,SCSI 模块,等等。...每个 USB 设备由一个 USB 模块驱动,与 USB 子系统一起工作,但是设备自身在系统中表现为一个字符设备(比如一个 USB 串口),一个块设备(一个 USB内存读卡器), 或者一个网络设备(一个

78641

linux 字符设备驱动

Linux设备驱动概述 操作系统内核是通过各种驱动程序来驾驭硬件设备,它为用户屏蔽了各种各样的设备设备驱动程序是操作系统内核和机器硬件之间的接口,系统调用是操作系统内核和应用程序之间的接口。...linux如何管理文件 Linux设备纳入文件系统的范畴来管理。 每个设备Linux系统上看起来都像一个文件,它们存放在/dev目录中,称为"设备节点"。...Linux设备的属性 设备的类型:字符设备、块设备、网络设备; 主设备号:标识设备对应的驱动程序。...一般“一个主设备号对应一个驱动程序” 次设备号:每个驱动程序负责管理它所驱动的几个硬件实例,这些硬件实例则由次设备号来表示。同一驱动下的实例编号,用于确定设备文件所指的设备。 文件名:设备文件名字。...一些重要的数据结构 大部分驱动程序涉及三个重要的内核数据结构: 文件操作file_operations结构体 - 结构体file_operations在头文件 linux/fs.h中定义,用来存储驱动内核模块提供的对设备进行各种操作的函数的指针

9.6K45

linux字符设备驱动

Linux设备驱动概述 操作系统内核是通过各种驱动程序来驾驭硬件设备,它为用户屏蔽了各种各样的设备设备驱动程序是操作系统内核和机器硬件之间的接口,系统调用是操作系统内核和应用程序之间的接口。...linux如何管理文件 Linux设备纳入文件系统的范畴来管理。 每个设备Linux系统上看起来都像一个文件,它们存放在/dev目录中,称为"设备节点"。...Linux设备的属性 设备的类型:字符设备、块设备、网络设备; 主设备号:标识设备对应的驱动程序。...一般“一个主设备号对应一个驱动程序” 次设备号:每个驱动程序负责管理它所驱动的几个硬件实例,这些硬件实例则由次设备号来表示。同一驱动下的实例编号,用于确定设备文件所指的设备。 文件名:设备文件名字。...一些重要的数据结构 大部分驱动程序涉及三个重要的内核数据结构: 文件操作file_operations结构体 - 结构体file_operations在头文件 linux/fs.h中定义,用来存储驱动内核模块提供的对设备进行各种操作的函数的指针

10.6K65

Linux设备驱动之字符设备(二)

通过上一节Linux设备驱动字符设备(一)了解了Linux设备驱动的分类,设备号的构成,设备号的申请以及设备号的释放。 在Linux内核中使用struct cdev结构来代码字符设备。...struct kobject kobj 内核的内嵌对象,是Linux设备驱动模型的重要成员。...struct module *owner 字符设备驱动程序所在的内核模块指针 struct file_operations *ops 字符设备驱动程序文件操作函数集,是应用程序通过文件系统访问驱动的桥梁...该部分在后面Linux字符设备框架一节会详细分析,目前只要明白主要流程即可。 字符设备的注销 当驱动程序需要从系统卸载的时候,就需要使用cdev_del释放字符设备占用的内存。...目前为止,已经了解了设备号,设备号的构成,字符设备分配,字符设备的初始化,字符设备的注册以及字符设备的注销。将在下一节通过一个简单的字符设备驱动程序来再次熟悉整个流程,然后总结字符设备驱动的编写模型。

6K20

Linux设备驱动之字符设备(一)

Linux设备驱动的分类 从上图可以看到Linux系统将各异的设备分为三大类:字符设备,块设备和网络设备。内核针对每一类设备都提供了对应驱动模型架构,包括基本的内核设施和文件系统接口。...主设备号用来标识对于的设备驱动程序,而次设备号则由驱动程序使用,用来标识它所管理的若干同类设备设备号的表示 在linux系统中,设备号用dev_t表示。这是个32位的无符号整数。...随着Linux系统的演变,上述的主次设备号的分发可能在将来会发生变化,所以设备驱动程序开发者应该避免直接使用主次设备号所占的位宽来获得对于的主设备号或次设备号。...假设在内核版本之后对主次设备号所占的位数发生了变化,MINORBITS修改为18位,只要驱动是使用MAJOR和MINOR宏来操作设备号,就不需要修改驱动代码也可以在新内核中使用。...,第一个参数form表示一个设备号,第二个参数count表示次设备的个数,也就是当前驱动程序所管理的同类设备的个数,第三个参数name表示设备或者驱动的名称。

7.1K52

Linux驱动开发: 块设备驱动开发

设备是与字符设备并列的概念, 这两类设备Linux驱动的结构有较大差异,总体而言, 块设备驱动比字符设备驱动要复杂得多,在 I/O 操作上表现出极大的不同,缓冲、 I/O 调度、请求队列等都是与块设备驱动相关的概念...在Linux中,驱动对块设备的输入或输出(I/O)操作,都会向块设备发出一个请求,在驱动中用request结构体描述。...但对于一些磁盘设备而言请求的速度很慢,这时候内核就提供一种队列的机制把这些I/O请求添加到队列中(即:请求队列),在驱动中用request_queue结构体描述。...编写块设备驱动时,使用的一些单位介绍: 1. 扇区(Sectors):任何块设备硬件对数据处理的基本单位。通常,1个扇区的大小为512字节。(对设备而言) 2....2.1 内核自带可参考的块设备驱动源码 drivers\block\z2ram.c drivers\block\xd.c \drivers\mmc\host\sdhci-s3c.c 2.2 块设备注册与注销函数

31.8K30

19.Linux-USB总线驱动分析

如下图所示,以windows为例,我们插上一个没有USB设备驱动USB,就会提示你安装驱动程序 为什么一插上就有会提示信息?...是因为windows自带了USB总线驱动程序, USB总线驱动程序负责: 识别USB设备,给USB设备找到对应的驱动程序 新接入的USB设备的默认地址(编号)是0,在未分配新编号前,PC主机使用0地址和它通信..., 比如:鼠标的数据是从鼠标传到PC机, 对应的端点称为"中断输入端点" 其中端点0是设备的默认控制端点, 既能输出也能输入,用于USB设备的识别过程 同样linux内核也自带了USB总线驱动程序,框架如下...其中usb_bus_type是一个全局变量, 它和我们之前学的platform平台总线相似,属于USB总线, 是Linux中bus的一种....如下图所示,每当创建一个USB设备,或者USB设备驱动时,USB总线都会调用match成员来匹配一次,使USB设备USB设备驱动联系起来.

8.5K91

Linux 上如何禁用 USB 存储设备

为了消除这种可能性,机构会限制和监测访问互联网,同时禁用 USB 存储设备。 在本教程中,我们将讨论三种不同的方法来禁用 Linux 机器上的 USB 存储设备。...方法 2:删除 USB 驱动 这种方法要求我们将 USB 存储的驱动程序(usb_storage.ko)删掉或者移走,从而达到无法再访问 USB 存储设备的目的。...执行下面命令可以将驱动从它默认的位置移走: $ sudo mv /lib/modules/$(uname -r)/kernel/drivers/usb/storage/usb-storage.ko /home.../user 现在在默认的位置上无法再找到驱动程序了,因此当 USB 存储器连接到系统上时也就无法加载到驱动程序了,从而导致磁盘不可用。...usb-storage 就在就会被系统阻止加载,但这种方法有一个很大的缺点,即任何特权用户都可以通过执行以下命令来加载 usb-storage 模块, $ sudo modprobe usb-storage

9.7K10

Linux设备驱动模型-Bus

前言 在linux设备驱动模型中,总线可以看作是linux设备模型的核心,系统中的其他设备以及驱动都是以总线为核心围绕。不过驱动程序员在系统中创建一条总线的机会并不多。...驱动模型中的总线可以是真是存在的物理总线(USB总线,I2C总线,PCI总线),也可以是为了驱动模型架构设计出的虚拟总线(Platform总线)。...为此linux设备驱动模型都将围绕"总线--设备--驱动"来展开,因为符合linux设备驱动模型的设备驱动都是必须挂载在一个总线上的,无论是实际存在的或者虚拟的。....match: 当一个设备或者驱动添加到此总线上的时候,bus就会调用match对设备驱动一一匹配的。...p: 一个用来管理总线上设备驱动的数据结构。

3.8K20

Linux驱动开发: 编写USB接口光谱仪驱动

,不支持Linux使用,也没有完善的资料,现在设备想在Linux系统下使用,要支持PClinux和嵌入式Linux设备,只能自己重新开发一个驱动再编写一个配套的上位机(上位机是采用QT写的)。...所有就在windows系统下使用USB抓包软件,分析光谱仪设备与windows下软件间的通信数据包,对比命令手册,得到完整的通讯流程,然后再对比编写了一个Linux系统下的驱动。..." #define IOCTL_CMD_RW 0x39654127 //读写命令 #endif 3.2 驱动.c #include #include <linux/module.h..._usb_dev_fops, }; //USB设备信息与驱动端匹配成功的时候调用。...(void) { //注销USB设备驱动 usb_deregister(&tiny4412_usb_driver); printk("USB光谱仪驱动卸载成功.

3.6K10
领券