Linux USB 和 sysfs
由于单个 USB 物理设备的复杂性, 设备在 sysfs 中的表示也非常复杂. 物理 USB 设备 (通过 struct usb_device 表示)和单个 USB 接口(由 struct usb_interface 表示)都作 为单个设备出现在 sysfs . (这是因为这 2 个结构都包含一个 struct device 结构). 例 如, 对于一个简单的只包含一个 USB 接口的 USB 鼠标, 下面的内容给这个设备的 sysfs 目录树:
/sys/devices/pci0000:00/0000:00:09.0/usb2/2-1
|-- 2-1:1.0
| |-- bAlternateSetting
| |-- bInterfaceClass
| |-- bInterfaceNumber
| |-- bInterfaceProtocol
| |-- bInterfaceSubClass
| |-- bNumEndpoints
| |-- detach_state
| |-- iInterface
| `-- power
| `-- state
|--
bConfigurationValue
|--
bDeviceClass
|--
bDeviceProtocol
|--
bDeviceSubClass
|--
bMaxPower
|--
bNumConfigurations
|--
bNumInterfaces
|--
bcdDevice
|--
bmAttributes
|--
detach_state
|--
devnum
|--
idProduct
|--
idVendor
|--
maxchild
|--
power
|
`-- state
|--
speed
`--
version
结构 usb_device 在树中被表示在:
/sys/devices/pci0000:00/0000:00:09.0/usb2/2-1
而鼠标的 USB 接口 -
USB 鼠标设备驱动被绑定到的接口 - 位于目录:
/sys/devices/pci0000:00/0000:00:09.0/usb2/2-1/2-1:1.0 为帮助理解这个长设备路径的含义,
我们描述内核如何标识 USB 设备.
第一个 USB 设备是一个根集线器. 这是 USB 控制器, 常常包含在一个 PCI 设备中. 控 制器的命名是由于它控制整个连接到它上面的 USB 总线. 控制器是一个 PCI 总线和 USB 总线之间的桥, 同时是总线上的第一个设备.
所有的根集线器被 USB 核心安排了一个唯一的号. 在我们的例子里, 根集线器称为
usb2, 因为它是注册到 USB 核心的第 2 个根集线器. 可包含在单个系统中在任何时间的根集线 器的数目没有限制.
每个在 USB 总线上的设备采用根集线器的号作为它的名子的第一个数字. 紧跟着的是 - 字符和设备插入的端口号. 由于我们例子中的设备插在第一个端口, 一个 1 被添加到名 子. 因此给主 USB 鼠标设备的名子是 2-1. 因为这个 USB 设备包含一个接口, 那使得树 中的另一个设备被添加到 sysfs 路径. 到此点, USB 接口的命名方法是设备名:在我们的
例子, 是 2-1 接着一个分号和 USB 配置名, 接着一个句点和接口名. 因此对这个例子, 设备名是 2-1:1.0 因为它是第一个配置并且有接口号 0.
总结, USB sysfs 设备命名方法是: root_hub-hub_port:config.interface
随着设备在 USB 树中进一步向下, 并且越来越多的 USB 集线器, 集线器端口号被添加到
字符串中紧随着链中之前的集线器端口号. 对一个 2 层的树, 设备名看来象:
root_hub-hub_port-hub_port:config.interface
如同可在之前的
USB 设备和接口目录列表中见到的, 所有的 USB 特定信息可直接从 sysfs 获得(例如, idVendor, idProduct, 和
bMaxPower 信息). 一个文件, bConfigrationValue, 可被写入来改变激活的正被使用的 USB 配置. 这对有多个配置的 设备是有用的,
当内核不能决定选择什么配置来正确操作设备. 许多 USB 猫需要有正确 的配置值被写到这个文件来使正确的 USB 驱动绑定到设备.
sysfs 没暴露一个 USB 设备的所有的不同部分,因为它停止在接口水平. 任何这个设备可 能包含的预备配置都没有展示, 连同关联到接口的端点的细节. 这个信息可在 usbfs 文 件系统中找到, 它加载在系统的 /proc/bus/usb/ 目录. 文件 /proc/bus/usb/devices 展示了所有的在 sysfs 中暴露的信息, 连同所有的出现在系统中的 USB 设备的预备配置 和端点信息. usbfs 也允许用户空间程序直接对话 USB 设备, 这已使能了许多内核驱动 被移出到用户空间, 这里容易维护和调试. USB 扫描器驱动是这个的一个好例子, 由于它 不再在内核中出现, 它的功能现在包含在用户空间的 SANE 库程序中.
Linux USB 和 sysfs的更多相关文章
- Linux usb子系统(二):USB设备驱动usb-skeleton.c
usb驱动分为通过usbfs操作设备的用户空间驱动,内核空间的内核驱动.两者不能同时进行,否则容易引发对共享资源访问的问题,死锁!使用了内核驱动,就不能在usbfs里驱动该设备. 下面转载的一篇分析u ...
- Linux usb子系统(一):子系统架构
一.USB协议基础知识 前序:USB概念概述 USB1.0版本速度1.5Mbps(低速USB) USB1.1版本速度12Mbps(全速USB) USB2.0版本速度480Mbps(高速USB). ...
- Linux usb子系统(一) _写一个usb鼠标驱动
USB总线是一种典型的热插拔的总线标准,由于其优异的性能几乎成为了当下大小设备中的标配. USB的驱动可以分为3类:SoC的USB控制器的驱动,主机端USB设备的驱动,设备上的USB Gadget驱动 ...
- linux usb驱动记录(一)
一.linux 下的usb驱动框架 在linux系统中,usb驱动可以从两个角度去观察,一个是主机侧,一个是设备侧.linux usb 驱动的总体框架如下图所示: 从主机侧看usb驱动可分为四层: ...
- Linux USB 鼠标驱动程序详解(转)
Linux USB 鼠标驱动程序详解 USB 总线引出两个重要的链表!一个 USB 总线引出两个重要的链表,一个为 USB 设备链表,一个为 USB 驱动链表.设备链表包含各种系统中的 USB 设备以 ...
- Linux USB Project
转自:http://www.linux-usb.org/ Welcome to the home of the Linux USB Project This web site was created ...
- Linux USB驱动
linux usb 驱动详解 一 http://blog.163.com/cl2006ky@126/blog/static/87195173201131245557340/ USB设备驱动开发-USB ...
- linux usb 驱动详解
linux usb 驱动详解 USB 设备驱动代码通过urb和所有的 USB 设备通讯.urb用 struct urb 结构描述(include/linux/usb.h ). urb 以一种异步的方式 ...
- 解决Mac Linux USB Loader“Couldn't get security scoped bookmarks”错误
Mac Linux USB Loader出现 "Couldn't get security scoped bookmarks"错误时, 需要删除 ~/Library/Contain ...
随机推荐
- H5视频播放自动全屏,暂停退出全屏等功能
html5视频播放自动全屏,暂停退出全屏等功能 在参考了html5 video fullScreen全屏实现方式及司徒正美的书<javascript框架设计>287页相关代码后,在Safa ...
- SPSS函数之期和时间函数
SPSS函数之期和时间函数 CTIME.DAYS(timevalue)数值.返回 timevalue 中的天数(包括有小数位的天数),timevalue 必须为时间格式的数值或表达式,如 TIME.x ...
- 【JZOJ4861】【NOIP2016提高A组集训第7场11.4】推冰块
题目描述 Dpstr最近迷上了推冰块.冰地是一个n行m列的网格区域,第i行第j列的格子记为(i,j),也就是左上角为(1,1),右下角为(n,m).每个格子可能是冰面.障碍物.减速带三者之一.其中,冰 ...
- 洛谷P3455 [POI2007]ZAP-Queries (莫比乌斯反演)
题意:求$\sum_{i=1}^{a}\sum_{j=1}^{b}[gcd(i,j)==d]$(1<=a,b,d<=50000). 很套路的莫比乌斯反演. $\sum_{i=1}^{n}\ ...
- 用预编译包安装zabbix-agent
如果主机无法上网,安装rpm又缺少依赖时,可以通过预编译包进行安装zabbix-agent,下载地址 https://www.zabbix.com/download 下载后,执行如下命令: wget ...
- el-table中加载图片问题
<el-table-column label="头像" width="100"> <template scope="scope&qu ...
- 一维数组的求平均成绩 Day06
package com.sxt.arraytest1; /* * 求班里学生的平均成绩,以及成绩的综合 输出每个同学的成绩 */ import java.util.Arrays; import jav ...
- python for 循环结构
- oracle函数 to_single_byte(c1)
[功能]将字符串中的全角转化为半角 [参数]c1,字符型 [返回]字符串 [示例] SQL> select to_multi_byte('高A') text from dual; test -- ...
- 13-4 jquery操作标签(文本,属性,class,value)
一 文本操作 $().html() $().text() 文本赋值操作 $().html("") $().text("") 二 属性操作 $().attr(属性 ...