首页
学习
活动
专区
工具
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

58440

Linux驱动开发: USB驱动开发

四、 linux内核下USB相关的API函数与数据结构 前面介绍了USB相关一些基础概念与重要的数据结构,接下来就分析在linux内核中如何编写一个USB 驱动程序,编写与一个USB设备驱动程序的方法和其他总线驱动方式类似...urb(USB Request Block)Linux内核中USB驱动实现上的一个数据结构,用于组织每一次的USB设备驱动的数据传输请求。...鼠标驱动(中断传输方式) 5.1 USB驱动注册框架代码 #include #include #include ...该宏定义在 这个宏有两个参数,第一个参数设备名,第二个参数该设备加入到模块中时对应产生的设备搜索符号,这个宏生成了一个名为__mod_pci_device_table...该宏定义在 这个宏有两个参数,第一个参数设备名,第二个参数该设备加入到模块中时对应产生的设备搜索符号,这个宏生成了一个名为__mod_pci_device_table

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

    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...alloc_func创建usb_function并初始化,重点是设置里面的回调函数,通常情况,不直接使用usb_function数据结构,而是嵌入到驱动的数据结构中使用。.../usb/gadget/legacy/目录下,如USB音频设备驱动文件audio.c,USB虚拟以太网设备驱动文件ether.c,HID设备驱动文件hid.c。...Linux 3.11版本引入了USB Gadget Configfs。在用户层可以通过暴漏出来的API定义USB Gadget设备的任意功能和配置,极大的方便了USB复合设备的配置和使用。

    10.1K20

    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音频设备 ,希望对大家有所帮助!

    6.2K31

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

    USB Function驱动通过调用这些接口匹配及访问USB设备控制器,而底层USB控制器驱动要实现这些接口定义的功能。下面分析一主要的UDC驱动接口调用流程。 2....NYET(not yet) 只有高速设备才会发送NYET。高速批量和控制传输都支持一种协议,它使主机在有设备可接收数据的情况,能够在发送数据之前找到此设备。...如果数据信息包很大且设备总是没有准备好,不断重新尝试可能会浪费很多总线时间。这种情况,使用带有多个数据信息包的高速批量和控制传输将是更好的途径。...发送PING的方法只在确定了设备没有准备好,必须在稍后重传的情况才会比发送整个数据信息包的方式更为有效。主机是否使用PING是可选的。 USB 2.0集线器可能会在完成分割事务中返回NYET。...无响应 另一种状态指示类型发生在主机或设备期望接收联络但却没有收到任何信息的情况。接收端的错误检查发现错误时,就会产生这种响应缺失。

    9.4K20

    Linux驱动开发_块设备驱动开发(内存模拟存储)

    一、前言 块设备驱动块是Linux3大设备驱动框架之一,块设备主要是针对存储类型的设备设计的驱动,配合文件系统完成数据存储。...所以大致总结下:块设备驱动的目的是给Linux文件系统提供底层接口。 二、编写块设备驱动的思路 既然学到了驱动开发,了解到块设备开发。...在Linux下完成块设备驱动编写,主要是要完成来至文件系统的存储请求,文件系统让你把数据存到那个扇区,你驱动就去存,文件系统让你从那个扇区读取输出来,驱动就去读取。...没有依赖于硬件,所以:可以在任何Linux编译安装测试,完成块设备驱动的了解学习。...看懂块设备框架,使用的模拟的内存。 2.​ 加入SD卡的驱动,配合块设备框架,完成完整的块设备驱动编写。

    4.6K30

    Linux USB 设备基础理论

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

    40030

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

    前言 这一部分主要是用来介绍 Linux 设备驱动程序的一些基本概念,包括:Linux 设备驱动程序的作用、内核功能的划分、设备和模块的分类以及版本编号。...一、Linux 设备驱动程序的作用 设备驱动程序就像一个个的“黑盒子”,使某个特定硬件响应一个定义良好的内部编程接口,这些操作完全隐藏了设备的工作细节。...一个网络接口负责发送和接收数据报文,在内核网络子系统的驱动,不必知道单个事务是如何映射到实际的被发送的报文上的。...通常,某些类型的驱动与给定类型设备的其他层的内核支持函数一起工作。例如,你可以说 USB 模块,串口模块,SCSI 模块,等等。...每个 USB 设备由一个 USB 模块驱动,与 USB 子系统一起工作,但是设备自身在系统中表现为一个字符设备(比如一个 USB 串口),一个块设备(一个 USB内存读卡器), 或者一个网络设备(一个

    1.2K41

    linux字符设备驱动

    Linux设备驱动概述 操作系统内核是通过各种驱动程序来驾驭硬件设备,它为用户屏蔽了各种各样的设备设备驱动程序是操作系统内核和机器硬件之间的接口,系统调用是操作系统内核和应用程序之间的接口。...linux如何管理文件 Linux设备纳入文件系统的范畴来管理。 每个设备Linux系统上看起来都像一个文件,它们存放在/dev目录中,称为"设备节点"。...Linux设备的属性 设备的类型:字符设备、块设备、网络设备; 主设备号:标识设备对应的驱动程序。...一般“一个主设备号对应一个驱动程序” 次设备号:每个驱动程序负责管理它所驱动的几个硬件实例,这些硬件实例则由次设备号来表示。同一驱动的实例编号,用于确定设备文件所指的设备。 文件名:设备文件名字。...应用测试程序如图: 在开发板上执行测试程序的效果如下 简单的总结一驱动开发的流程 字符设备驱动程序的编写框架是: 编写底层硬件的操作函数,将这些函数集合在一个file_operations结构中;

    10.6K65

    linux 字符设备驱动

    Linux设备驱动概述 操作系统内核是通过各种驱动程序来驾驭硬件设备,它为用户屏蔽了各种各样的设备设备驱动程序是操作系统内核和机器硬件之间的接口,系统调用是操作系统内核和应用程序之间的接口。...linux如何管理文件 Linux设备纳入文件系统的范畴来管理。 每个设备Linux系统上看起来都像一个文件,它们存放在/dev目录中,称为"设备节点"。...Linux设备的属性 设备的类型:字符设备、块设备、网络设备; 主设备号:标识设备对应的驱动程序。...一般“一个主设备号对应一个驱动程序” 次设备号:每个驱动程序负责管理它所驱动的几个硬件实例,这些硬件实例则由次设备号来表示。同一驱动的实例编号,用于确定设备文件所指的设备。 文件名:设备文件名字。...应用测试程序如图: 在开发板上执行测试程序的效果如下 简单的总结一驱动开发的流程 字符设备驱动程序的编写框架是: 编写底层硬件的操作函数,将这些函数集合在一个file_operations结构中;

    9.6K45

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

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

    6.1K20

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

    Linux设备驱动的分类 从上图可以看到Linux系统将各异的设备分为三大类:字符设备,块设备和网络设备。内核针对每一类设备都提供了对应驱动模型架构,包括基本的内核设施和文件系统接口。...设备号的构成 主设备号与次设备号 关于设备号,我们先通过如下的图来了解一 从上图可以看出,c代表的是字符设备,d代码的是块设备。...主设备号用来标识对于的设备驱动程序,而次设备号则由驱动程序使用,用来标识它所管理的若干同类设备设备号的表示 在linux系统中,设备号用dev_t表示。这是个32位的无符号整数。...随着Linux系统的演变,上述的主次设备号的分发可能在将来会发生变化,所以设备驱动程序开发者应该避免直接使用主次设备号所占的位宽来获得对于的主设备号或次设备号。...,是在主设备号不知情的情况,让系统给分配设备号。

    7.1K52

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

    设备是与字符设备并列的概念, 这两类设备Linux驱动的结构有较大差异,总体而言, 块设备驱动比字符设备驱动要复杂得多,在 I/O 操作上表现出极大的不同,缓冲、 I/O 调度、请求队列等都是与块设备驱动相关的概念...在Linux中,驱动对块设备的输入或输出(I/O)操作,都会向块设备发出一个请求,在驱动中用request结构体描述。...编写块设备驱动时,使用的一些单位介绍: 1. 扇区(Sectors):任何块设备硬件对数据处理的基本单位。通常,1个扇区的大小为512字节。(对设备而言) 2....,而不是这写一,那写一然后再回来,IO调度就是将上层发下来的IO请求的顺序进行重新排序以及对多个请求进行合并,这样就可以实现上述的提高效率、节约磁盘的目的。...) [root@wbyq code]#ls /dev/tiny4412_blkdev* -l (查看/dev分区成功的设备节点) brw-rw---- 1 root root

    32.3K30

    19.Linux-USB总线驱动分析

    是因为windows自带了USB总线驱动程序, USB总线驱动程序负责: 识别USB设备,给USB设备找到对应的驱动程序 新接入的USB设备的默认地址(编号)是0,在未分配新编号前,PC主机使用0地址和它通信...USB高速设备先是被识别为全速设备,然后通过HOST和DEVICE两者之间的确认,再切换到高速模式的。在高速模式,是电流传输模式,这时将D+上的上拉电阻断开。..., 比如:鼠标的数据是从鼠标传到PC机, 对应的端点称为"中断输入端点" 其中端点0是设备的默认控制端点, 既能输出也能输入,用于USB设备的识别过程 同样linux内核也自带了USB总线驱动程序,框架如下...如下图所示,每当创建一个USB设备,或者USB设备驱动时,USB总线都会调用match成员来匹配一次,使USB设备USB设备驱动联系起来....,存在/sys/bus .match = usb_device_match,       //匹配函数,匹配成功就会调用usb_driver驱动的probe函数成员 .uevent

    8.7K91

    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

    10K10
    领券