USB设备检测也是通过/proc目录下的USB文件系统进行的。为了使一个USB设备能够正常工作,必须要现在系统中插入USB桥接器模块。在检测开始时,一般要先检测是否存在/proc/bus/usb目录,若不存在则尝试插入USB桥接模块。
现在一般的USB桥接器模块有两种类型,UHCI和OHCI。在决定插入那一个桥接器模块时,可以察看/proc/pci文件来决定。打开此文件,您若发 现USB节为 I/O at 0xHHHH格式(例如出现 I/O at 0xe000 [0xe01f]),HHHH为16进制数,则桥接器类型为UHCI。若是它为32 bit memory at 0xHH000000形式(例如出现32 bit memory at 0xee000000),HH为16进制数,则桥接器类型为OHCI。但是若您的桥接器类型不满足上述任何一种情况,唯一的解决办法就是您尝试插入这两种 模块,直到成功为止。一般而言,UHCI类型的桥接器它的插入模块是uhci或usb-uhci(由内核版本决定);而对于OHCI类型的桥接器它的插入 模块是ohci或usb-ohci。
您在正确的插入了桥接器模块之后,这时/proc文件系统下就会出现USB设备目录,不过这时这个目录是空的,没有任何文件。这时您就必须挂接 usbdevfs文件系统,然后通过此文件系统检测连接的设备。在成功挂接usb文件系统之后,就会生成文件/proc/bus/usb /devices,/proc/bus/usb/drivers和目录/proc/bus/usb/busNo。挂接usbdevfs文件您可以通过如下 操作实现:
mount -t usbdevfs none /proc/bus/usb或在/etc/fstab上加入none /proc/bus/usb usbdevfs defaults 0 0
然后通过/proc/bus/usb/devices文件的内容,您就可以获得连接的设备信息,包括设备标识和制造商标是等信息。
usb设备类型描述:
设备规范 设备类码 接口类码
应用程序特定 - 0xFE
声音接口 0x00 0x01
通信设备 0x02 -
CDC控制接口 - 0x02
CDC数据接口 - 0x0A
HID 0x00 0x03
HUB 0x09 0x09
批量存储设备 0x00 0x08
监视器 same as HID same as HID
电源设备 same as HID same as HID
物理设备 - 0x05
打印机 - 0x07
供应商特定 - 0xFF
5.2 usb文件系统简介
T = 总线拓扑结构(Lev, Prnt, Port, Cnt, 等),是指USB设备和主机之间的连接方式
B = 带宽 (仅用于USB主控制器)
D = 设备描述信息
P = 产品标识信息
S = 串描述符
C = 配置描述信息 (* 表示活动配置)
I = 接口描述信息
E = 终端点描述信息
一般格式:
d = 十进制数
x = 十六进制数
s = 字符串
拓扑信息
T: Bus=dd Lev=dd Prnt=dd Port=dd Cnt=dd Dev#=ddd Spd=ddd MxCh=dd
| | | | | | | | |__最大子设备
| | | | | | | |__设备速度(Mbps)
| | | | | | |__设备编号
| | | | | |__这层的设备数
| | | | |__此设备的父连接器/端口
| | | |__父设备号
| | |__此总线在拓扑结构中的层次
| |__总线编号
|__拓扑信息标志
带宽信息
B: Alloc=ddd/ddd us (xx%), #Int=ddd, #Iso=ddd
| | | |__同步请求编号
| | |__中断请求号
| |__分配给此总线的总带宽
|__带宽信息标志
设备描述信息和产品标识信息
D: Ver=x.xx Cls=xx(s) Sub=xx Prot=xx MxPS=dd #Cfgs=dd
P: Vendor=xxxx ProdID=xxxx Rev=xx.xx
D: Ver=x.xx Cls=xx(sssss) Sub=xx Prot=xx MxPS=dd #Cfgs=dd
| | | | | | |__配置编号
| | | | | |______缺省终端点的最大包尺寸
| | | | |
| | | | |__设备协议
| | | |__设备子类型
| | |__设备类型
| |__设备USB版本
|__设备信息标志编号#1
P: Vendor=xxxx ProdID=xxxx Rev=xx.xx
| | | |__产品修订号
| | |__产品标识编码
| |__制造商标识编码
|__设备信息标志编号#2
串描述信息
S: Manufacturer=ssss
| |__设备上读出的制造商信息
|__串描述信息
S: Product=ssss
| |__设备上读出的产品描述信息,对于USB主控制器此字段为"USB *HCI Root Hub"
|__串描述信息
S: SerialNumber=ssss
| |__设备上读出的序列号,对于USB主控制器它是一个生成的字符串,表示设备标识
|__串描述信息
配置描述信息
C: #Ifs=dd Cfg#=dd Atr=xx MPwr=dddmA
| | | | |__最大电流(mA)
| | | |__属性
| | |__配置编号
| |__接口数
|__配置信息标志
接口描述信息(可为多个)
I: If#=dd Alt=dd #EPs=dd Cls=xx(sssss) Sub=xx Prot=xx Driver=ssss
| | | | | | | |__驱动名
| | | | | | |__接口协议
| | | | | |__接口子类
| | | | |__接口类
| | | |__中断点数
| | |__可变设置编号
| |__接口编号
|__接口信息标志
终端点描述信息
E: Ad=xx(s) Atr=xx(ssss) MxPS=dddd Ivl=dddms
E: Ad=xx(s) Atr=xx(ssss) MxPS=dddd Ivl=dddms
| | | | |__间隔
| | | |__终端点最大包尺寸
| | |__属性(终端点类型)
| |__终端点地址(I=In,O=Out)
|__终端点信息标志 '
相关推荐
实现对linux下USB设备检测 挂载USB设备 将数据写入到USB设备中 其中 程序提供了程序执行时间测试模块
总之,利用QDBus在Linux下检测USB存储设备的插入和拔出,主要依赖于Qt库提供的QDBus接口来监听systemd的D-Bus信号,从而实现对USB设备变化的实时响应。通过这种方式,开发者可以构建自定义的系统监控工具或自动化...
在Linux系统中,USB设备如摄像头的管理是一个重要的任务,特别是在需要实时监控设备插入和移除的场景。本文将深入探讨如何在Linux环境下,利用udev工具来实现USB摄像头的热插拔状态检测,并在终端中实时显示设备的...
在本文中,我们将深入探讨如何在QT5框架下实现USB设备的插拔检测,特别是针对USB Key(通过VID,PID识别)和其他类型的USB设备。QT5是一个强大的跨平台应用程序开发框架,提供了丰富的功能来处理硬件交互,包括USB...
在Linux系统中,使用C语言来检测USB设备并区分它们是U盘还是硬盘是一项常见的任务,特别是在自动化管理和脚本编程中。QT库则提供了一种图形用户界面(GUI)的方式来实现这一功能。以下是对这个主题的详细解释: ...
2. **Linux下USB设备检测** 文件可能介绍了如何通过命令行工具如`lsusb`检测连接到系统的USB设备,以及如何查看设备的详细信息,例如供应商ID、产品ID和设备类。 3. **gcc g++ 常用编译选项-Linux** 在编写或修改...
Linux环境下的USB设备检测稍微复杂一些,因为Linux采用udev管理系统设备。`QDeviceWatcher`会监控udev的设备节点变化。当有USB设备连接或断开时,udev会产生一个规则事件,`QDeviceWatcher`捕获这些事件,提供设备的...
当系统检测到匹配的USB设备时,驱动会被自动加载。 在驱动程序中,read和write函数分别用于从设备读取数据和向设备写入数据。ioctl函数则处理设备的控制命令,如设置设备参数或查询设备状态。open函数在应用程序...
USBKEY在Linux下的使用与设备管理 ...总结来说,USBKEY在Linux下的使用涉及到USB设备检测、驱动加载、文件系统挂载、权限管理和问题排查等多个环节。理解这些知识点对于日常使用和解决相关问题非常有帮助。
而USB-HID是USB设备类规范的一部分,用于设计人机交互设备,如键盘、鼠标、游戏控制器等。 标题“Qt Linux版USB-HID通讯范例”表明我们将专注于使用Qt库与Linux系统上的USB-HID设备进行通信的方法。这通常涉及读取...
1. **枚举设备**:当USB设备插入系统时,USB子系统会自动检测并枚举该设备,分配设备地址。 2. **加载设备驱动**:根据设备的Vendor ID和Product ID,内核匹配合适的驱动程序。 3. **建立通信通道**:通过USB ...
Linux提供`dmesg`命令来查看内核消息,`lsusb`查看连接的USB设备,`usbmon`工具可以监控USB总线的通信。 总的来说,学习Linux USB驱动涉及到对USB规范的理解、Linux内核驱动模型的熟悉、设备描述符解析、数据传输...
1.使用QProcess类打开外部程序并与之交互通信。...检测USB设备是否插入,插入后可进入USB目录内的文本文件(.txt/.sh)并且显示在界面上。 选择界面上显示的文件可以打开查看和修改内容。 拔出USB会回到初始界面。
首先,我们需要理解Linux内核如何处理USB设备,包括U盘。在Linux中,USB设备的管理由内核的USB子系统负责。当一个U盘插入时,内核会检测到新的USB设备,并通过设备驱动程序与之交互。驱动程序根据设备的设备类(如...
【基于Linux的USB设备驱动程序实现】 在嵌入式系统中,USB(通用串行总线)设备的正常工作依赖于对应的USB驱动程序。本文详细阐述了如何在Linux操作系统环境下,针对特定的开发板(例如56789: 24;5)实现USB设备的...
通过对`usb_skel`结构体的分析以及对USB协议规范的理解,我们不仅能够更好地理解Linux下的USB驱动是如何工作的,还能掌握如何开发高效的USB设备驱动。此外,了解端点的不同类型及其特性有助于开发者为不同的应用场景...
在IT领域,尤其是在Windows系统编程中,USB设备的插拔检测是一个常见的需求,这通常涉及到设备驱动编程和系统级别的事件监听。本项目提供了一个名为"USB插拔检测程序"的解决方案,它使用C++编程语言,并在Visual ...
对于主机侧驱动开发者而言,他们更关注的是设备侧的配置、接口和端点,以及如何使USB主机侧驱动能够正确地绑定到USB设备接口上。 #### 结论与展望 嵌入式Linux下USB摄像头驱动的实现,不仅需要对USB协议有深入的...
1. 设备枚举:系统检测到新插入的USB设备后,会调用相应的枚举函数,初始化`struct usb_device`。 2. 配置选择:驱动程序会选择合适的配置和接口,设置`struct usb_host_interface`中的`cur_altsetting`。 3. 端点...