博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
USB和sysfs文件系统
阅读量:4052 次
发布时间:2019-05-25

本文共 2180 字,大约阅读时间需要 7 分钟。

2007年08月31日 星期五 19:32
    由于单个USB物理设备的复杂性,设备在sysfs中的表示也非常复杂。无论是物理USB设备(用struct 表示)还是单独的USB接口(用struct 表示),在sysfs中均表示为单独的设备(这是因为这2个结构都包含一个struct device结构)。 例如, 对于一个简单的只包含一个USB接口的USB鼠标, 下面的内容给这个设备的sysfs目录树:
                       HostController usb_device   
/sys/devices/pci0000:00/0000:00:1d.1/usb2/2-1
|-- 2-1:1.0 usb_interface          
RootHub
| |--
| |-- bInterfaceClass
| |-- bInterfaceNumber
| |-- bInterfaceProtocol
| |-- bInterfaceSubClass
| |-- bNumEndpoints
|
|--     设备配置信息
|-- bNumInterfaces
|-- bMaxPower
|-- bmAttributes
|--
|-- bDeviceSubClass
|-- bDeviceProtocol
|--
bMaxPacketSize0
|-- idVendor
|-- idProduct
|-- bcdDevice
|-- bNumConfigurations
|--
|-- maxchild
|-- product
|-- serial
|-- speed
|-- manufacturer
    结构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设备是一个根集线器(root hub)。 这是一个USB控制器(控制器器和根Hub集成在一起),通常包含在一个PCI设备中。之所以这样命名该控制器,是因为它控制着连接到其上的整个USB总线。该控制器是连接PCI总线和USB总线的桥,也是该总线上的第一个USB设备。
    所有的根集线器都由USB核心分配了唯一的编号。在我们的例子中,根集线器称为usb2,因为它是注册到USB核心的第2个根集线器。单个系统中可以包含的根集线器的编号在任何时候都是没有限制的。
    USB设备
usb_device
的名字: 根Hub的编号 + - + 设备所在的端口号 。 例如: 2-1
    USB总线上的每个设备都以根集线器的编号作为其名字中的第一个号码。该号码随后是一个横扛字符(-)和设备所插入的端口号。因为我们例子中设备插入到第一个端口,1被添加到了名字中。因此,USB鼠标的名字是2-1。因为该USB设备包含一个接口,导致了树中的另一个设备被添加到sysfs路径中。
    USB接口usb_interface的命名: USB设备的名字 + : + USB配置编号 + . + 接口编号。 例如:
2-1:1.0
    USB接口的命名方案是设备名直到接口为止:在我们的例子中,是2-1后面加一个冒号和USB配置的编号,然后是一个句点和接口的编号。因此对于本例而言,设备名是2-1:1.0,因为它是第一个配置,具有接口编号0。
    概言之,USB sysfs设备命名方案为:
    root_hub-hub_port:config.interface
    随着设备更深地进入USB树,和越来越多的USB集线器的使用,集线器的端口号被添加到跟随着链中前一个集线器端口号的字符串中。对于一个两层的树,其设备名类似于:
    root_hub-hub_port-hub_port:config.interface
    从前面的USB设备和接口的目录列表可以看到,所有的USB特定信息都可以从sysfs直接获得(例如,idVendor、 idProduct和bMaxPower信息)。这些文件中的一个,即bConfigurationValue,可以被写入以改变当前使用的活动USB配置。当内核不能够确定选择哪一个配置以恰当地操作设备时,这对于具有多个配置的设备很有用。许多USB调制解调器需要向该文件中写入适当的配置值,以便把适当的USB驱动程序绑定到该设备。
    sysfs并没有展示USB设备所有的不同部分,它只限于接口级别。设备可能包含的任何可选配置都没有显示,还有和接口相关的端点的细节。这些信息可以从usbfs文件系统找到,该文件系统被挂载到系统的/proc/bus/usb/目录。/proc/bus/usb/devices文件确实显示了和sysfs所展示的所有信息相同的信息,还有系统中存在的所有USB设备的可选配置和端点信息。usbfs还允许用户空间的程序直接访问USB设备,这使得许多内核驱动程序可以迁移到用户空间,从而更容易维护和调试。USB扫描仪是一个很好的例子,它不再存在于内核中,因为它的功能现在包含在了用户空间的SANE库程序中。

转载地址:http://szpci.baihongyu.com/

你可能感兴趣的文章
01Java基础语法-19. 循环跳转控制语句
查看>>
Django框架全面讲解 -- Form
查看>>
socket,accept函数解析
查看>>
今日互联网关注(写在清明节后):每天都有值得关注的大变化
查看>>
”舍得“大法:把自己的优点当缺点倒出去
查看>>
[今日关注]鼓吹“互联网泡沫,到底为了什么”
查看>>
[互联网学习]如何提高网站的GooglePR值
查看>>
[关注大学生]求职不可不知——怎样的大学生不受欢迎
查看>>
[关注大学生]读“贫困大学生的自白”
查看>>
[互联网关注]李开复教大学生回答如何学好编程
查看>>
[关注大学生]李开复给中国计算机系大学生的7点建议
查看>>
[茶余饭后]10大毕业生必听得歌曲
查看>>
VC++ MFC SQL ADO数据库访问技术使用的基本步骤及方法
查看>>
VUE-Vue.js之$refs,父组件访问、修改子组件中 的数据
查看>>
Vue-子组件改变父级组件的信息
查看>>
Python自动化之pytest常用插件
查看>>
Python自动化之pytest框架使用详解
查看>>
【正则表达式】以个人的理解帮助大家认识正则表达式
查看>>
性能调优之iostat命令详解
查看>>
性能调优之iftop命令详解
查看>>