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

Linux USB 设备驱动模型

Linux 内核源码:include\linux\usb.h Linux 内核源码:drivers\hid\usbhid\usbmouse.c 1....接口函数 在 USB 设备驱动程序中,能使用的 USB 函数都在这个头文件里:include\linux\usb.h。...2.1 pipe 使用这些接口函数的主要目的是传输数据,传输数据的对象是 USB 设备里的某个 endpoint,这被称为 pipe: /* Create various pipes... */ #define...对于一般的 buffer,在提交 URB 时会临时分配一个 DMA Buffer: 发送数据时:函数内部会先从一般 buffer 中把数据复制 DMA Buffer,在提交给 USB 控制器 读取数据时...:USB 控制器先把数据传到 DMA Buffer,函数内部在把 DMA Buffer 的数据复制一般 buffer 中间增加了一次数据的拷贝,效率低 我们可以直接使用 DMA Buffer,函数原型如下

56240

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 国际许可协议 进行许可。

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

    Linux 上如何禁用 USB 存储设备

    为了保护数据不被泄漏,我们使用软件和硬件防火墙来限制外部未经授权的访问,但是数据泄露也可能发生在内部。 为了消除这种可能性,机构会限制和监测访问互联网,同时禁用 USB 存储设备。...在本教程中,我们将讨论三种不同的方法来禁用 Linux 机器上的 USB 存储设备。所有这三种方法都在 CentOS 6&7 机器上通过测试。那么让我们一一讨论这三种方法。...方法 2:删除 USB 驱动 这种方法要求我们将 USB 存储的驱动程序(usb_storage.ko)删掉或者移走,从而达到无法再访问 USB 存储设备的目的。...usb-storage 保存文件并退出。...usb-storage 就在就会被系统阻止加载,但这种方法有一个很大的缺点,即任何特权用户都可以通过执行以下命令来加载 usb-storage 模块, $ sudo modprobe usb-storage

    10K10

    USB总线-Linux内核USB3.0设备控制器复合设备之legacy方式分析(八)

    1.概述 在usb gadget configfs引入内核之前,内核都使用硬编码的方式实现复合设备,无法在用户空间动态修改和绑定不同的function驱动,若要修改,则需要修改内核代码,重新编码,非常不方便...2.音频复合设备驱动 从前面的分析中可以看出,复合设备驱动围绕usb_composite_driver和usb_composite_dev两个数据结构展开,legacy方式的复合设备驱动也不例外。...2.1.定义 音频复合设备的实现在drivers/usb/gadget/legacy/audio.c文件中,其usb_composite_driver数据结构定义如下。...将audio_driver设置的最大速度设置composite_driver_template,表明该复合设备支持的最大速度。...找到USB设备控制器后,UDC数据结构保存composite_driver_template,此时就完成了UDC绑定composite_driver_template。

    4K40

    【远程访问与设备重定向】上海道宁为您助您远程共享USB设备USB设备重定向远程会话

    任何安装了客户端部分的Windows或Linux机器都可以访问在安装了服务器部分的Windows、Linux或macOS上共享的远程USB设备。...06、您的所有数据都是安全的USB over Network仅在安装在您的计算机上的客户端和服务器程序部分之间直接传输数据。它不连接到FabulaTech或任何第三方服务器。...为了进一步保护敏感数据,密码保护可用于每个单独的USB设备和整个服务器。此外,我们可以教客户如何禁止或允许使用闪存驱动器、网络摄像头等。...02、无人驾驶解决方案用于远程桌面的USB不需要本地计算机或瘦客户端上的USB设备驱动程序。因此,任何新的USB设备都可以重定向远程桌面会话,而无需安装USB设备驱动程序。...所有其他设备仅供本地使用。06、您的所有数据都是安全的用于远程桌面的USB仅在安装在您的计算机上的工作站和服务器程序部件之间直接传输数据。它不连接到FabulaTech或任何第三方服务器。

    4.6K20

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

    USB设备控制器通过USB线缆连接USB主机控制器,负责USB数据的发送和接收。...alloc_func创建usb_function并初始化,重点是设置里面的回调函数,通常情况下,不直接使用usb_function数据结构,而是嵌入驱动的数据结构中使用。...Composite驱动使用usb_composite_probe注册时,内核会将composite_driver_template中的数据拷贝usb_composite_driver的gadget_driver...Linux 3.11版本引入了USB Gadget Configfs。在用户层可以通过暴漏出来的API定义USB Gadget设备的任意功能和配置,极大的方便了USB复合设备的配置和使用。...mA); // 下拉让usb主机感知usb设备接入usb总线,usb主机会枚举usb设备 int (*pullup) (struct usb_gadget *, int is_on);

    10.1K20

    原创 Paper | USB设备开发:从入门实践指南(二)

    1 模拟鼠标 参考资料 在上一篇的Paper中,我们尝试对USB键盘进行模拟,下一步再尝试对USB鼠标设备进行模拟。...所有环节准备就绪了(这次USB主机设备选择的是Linux主机),接下来就可以运行脚本,然后可以在Linux主机上看到以下信息: $ sudo dmesg [91788.951749] usb 3-2:...:别看日志中显示的是Switch手柄,因为这些字符串都可以自行随意设置,而内核驱动是根据idVendor/idProduct来设备手柄是什么设备的,所以对Linux内核来说这就是一个XBox手柄。...,匹配成功后执行.probe函数,当接收到设备发来的数据时,触发.raw_event函数,设备移除时触发.remove函数,设备有可能会休眠,休眠结束后会触发.resume函数。...4 本篇总结 参考资 通过本篇文章,我们了解了如何模拟一个USB鼠标,USB游戏手柄设备,并且可以学习如何对Linux内核中的HID驱动进行修改然后输出相关调试信息。

    19410

    原创 Paper | USB设备开发:从入门实践指南(一)

    1.1 USB Tree View 第一个工具是USB Tree View,该工具能很好的展示主机上USB设备树的主从情况,USB描述符信息等数据。...第一个是设备描述符,该描述符的结构体定义位于:linux/include/uapi/linux/usb/ch9.h,结构体如下: /* USB_DT_DEVICE: Device descriptor...这里键盘的HID报告描述符的定义就分析完了,我们发现该描述符定义的内容和我们的输入数据的格式是吻合的。 发送的buf第一字节就是表示8个控制按键,第二字节固定为0,后面6个字节为输入按键。...为什么需要发送一个全为0的数据包,经过研究发现:USB设备发给USB主机的数据包是键盘在告知USB主机键盘当前的状态,一个完整的按键操作是按下按键,然后释放按键。...研究驱动系统细节,在Linux内核的drivers目录下,可以搜索module_usb_driver字符串,这是一个宏定义函数,usb主机端的驱动都是通过该函数注册内核当中的。

    1.5K00

    原创 Paper | USB设备开发:从入门实践指南(四)

    作者:Hcamael@知道创宇404实验室 时间:2024年3月13日 从本篇开始就要研究USB设备开发硬件部分的知识,本系列硬件部分文章的学习案例来源于《圈圈教你玩USB》。...对于STC89C52RC单片机而言,可以通过TTL串口直接下载程序单片机中。 因此,还需要准备一个串口线,由于开发板设计了RS-232串口母口,所以可以准备一个RS-232串口公口转USB线。...1.2 测试串口 设备连接图如下所示: 图3:USB开发板和开发电脑的连接示意图 对照着原理图,假设TTL转USB设备为A,USB开发板为B,那么连接如下所示: A的GND连B的任意一个GND。...// 当TI = 1时,表示开始数据数据储存在SBUF中 { TI = 0; Sending = 0; } } // 发送一个字符 void UartSendChar...(); // WR_N置高 D12SetPortIn(); // 将数据口设置为输入状态 } // D12 数据 void D12WriteData

    18810

    原创 Paper | USB设备开发:从入门实践指南(三)

    2.1 注册input event 用hid-nintendo.c驱动作为例子进行讲解,首先看nintendo_hid_probe函数,在上一篇文章中说过,当USB HID设备注册成功后,会在内核中匹配所有...从上面的内容可以知道,如果想要开发Linux下的Switch Pro手柄的客户端,只需要操作eventX文件,并且仔细阅读nintendo_hid_event函数,了解传输数据数据结构就能实现。...2.2 注册手柄驱动 目前Linux下绝大部分手柄的客户端程序都是通过读取/dev/input/jsX文件获取手柄输入的数据,在上一篇Paper中,我们模拟的XBox手柄就能成功生成/dev/input...Linux驱动中还未实现,从joydev_event可以看出,Linux的手柄驱动仅支持坐标系和按键功能,所以把支持加速度传感器的手柄给禁用了。...3 总结 参考资 本篇文章结束,关于USB游戏手柄部分的研究就结束了,接下来就是研究其他USB设备,经过了USB游戏手柄的一番折腾,对USB HID驱动还有input驱动都有了一定的了解,对后续的研究也能有非常大的助力

    16010

    USB设备无法识别怎么办怎么数据恢复

    usb接口设备在我们生活中非常普遍,比如我们常见的USB鼠标,usb键盘,usb音箱,U盘等等,但使用usb设备也会伴随着各种各样的问题发生,如常见的usb无法识别,将usb设备接入电脑,电脑无法识别usb...设备或者提示有“无法识别的usb设备”,那么提示无法识别usb设备怎么办呢?...只要将连接线更换为USB 2.0标准的即可解决此故障。 7. 将usb设备接入电脑,提示有“无法识别的usb设备”。...用户可以将文件恢复电脑上,然后点击确定,等待文件恢复完成。 注意点:若是在工具扫描完成后,没有发现丢失的文件,可以选择“万能恢复”重新扫描恢复文件。...注意事项:使用数据恢复工具是请注意选择合适自己使用的,不能一味盲目的使用多个工具进行多次重复操作;尽量避免在数据丢失后进行硬盘的读写操作;数据恢复并不能保证能100%完全恢复,所以,对于一些重要的文件还是要进行备份

    3.2K50

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

    一.背景: arm linux的内核版本是3.13.0 二.准备工作 添加alsa驱动到内核中,也就是在编译内核的时候加入以下选项: ?...编译好) 3.1交叉编译alsa-lib 3.2交叉编译alsa-utils 四.将三编译好的库及工具都拷贝至arm开发板(笔者通常直接将编译好的都压缩好之后再复制开发板进行解压,以避免直接复制造成软链接无法复制的情况...5.4设置录音时的音量大小 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驱动分析(六)

    (struct usb_gadget_driver *driver); 底层的USB设备控制器驱动(dwc3 gadget)使用usb_add_gadget_udc函数将自身加入Core UDC Framework...DWC3_DEVTEN寄存器,使能设备事件(中断),这样控制器就可响应主机发送的请求了,可以正常被枚举了。...若端点空闲,将其绑定的TRB DMA地址设置param0和param1寄存器中,命令设置为DWC3_DEPCMD_STARTTRANSFER,开始传输。...若主机在设备繁忙的时候请求数据,则设备端点会在联络信息包中返回NAK。若主机向设备请求数据,而此时设备没有数据要发送,则设备端点会在数据信息包中返回NAK。主机从不发送NAK,等时传输不使用NAK。...其实最重要的是弄清楚USB设备控制器接收数据和发送数据的流程,发送数据通过usb_ep_queue发送,上面已经介绍过了,但接收数据的流程牵扯到中断处理和中断处理线程,后面专门开一章节介绍USB设备控制器的中断处理过程和数据接收过程

    9.3K20

    研究人员演示:用USB设备能够秘密窃取临近USB接口的数据

    近日, 来自澳大利亚阿德莱德大学的研究人员演示了通过USB小工具来监控旁边插入的USB设备数据流动。 这个间谍小工具可以拦截相邻端口的电信号,来把敏感信息泄露给攻击者。...“在我们的项目中,我们演示了可以从USB集线器上的相邻端口监控USB数据线的电压起伏。” “我们的研究表明,如果在USB hub上的相邻端口上插上恶意设备或被篡改的设备,那么敏感信息可能会泄露。...在攻击场景下,恶意的USB设备插入被攻击设备的相邻端口,攻击者可以监控被攻击设备数据流动,收集这些信息并将这些信息发送回自己的服务器。在恶意设备相邻端口传输的任何未被加密的数据都会被收集。...串扰泄露可以收集相邻端口的任何未加密的数据。 研究人员将一个现成的USB台灯进行改装,用它来记录相邻USB键盘的每一次键击,并通过蓝牙将数据发送回另一台计算机。...研究人员测试了50个USB设备,其中的90%都会被通道间串扰泄露攻击。 “重点就是不要随便通过USB连那些你不完全信任的设备,”研究人员总结道。

    1.5K110

    Linux设备全览:从字符块,揭秘每种设备的秘密

    Linux的世界里,设备是构成系统的基础,它们使得计算机能够与外界互动。Linux设备可以大致分为几种类型,每种类型都有其独特的特性和用途。让我们一起探索这些设备类型及其特性。1....字符设备的特点是支持序列化的数据流,适用于需要逐字节处理数据的场合。特性:顺序访问:数据以连续流的形式进行读写。非缓存:操作直接影响设备,没有中间缓存。适用于文本数据或小量数据的快速传输。...主要用于设备如终端(TTY)、串行端口等。2. 块设备(Block Devices)块设备允许存储和检索固定大小的数据块,如硬盘、SSD或USB驱动器。...总结Linux设备的多样性和复杂性是Linux系统强大功能的体现。通过了解不同类型的Linux设备及其特性,开发者和系统管理员可以更有效地管理和利用这些设备,为用户提供丰富的计算体验。...掌握这些基础知识,是深入Linux世界的第一步。

    27110
    领券