博客
关于我
强烈建议你试试无所不能的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://izpci.baihongyu.com/

你可能感兴趣的文章
Silverlight Toolkit例子代码中缺少System.Windows.Controls.Samples.Common.dll的解决办法
查看>>
项目经理培训后的一点感概
查看>>
vc学习之窗口大小发生变更时使控件自动摆放到合适的位置
查看>>
Oracle 获取系统日期时间,导出数据库
查看>>
黄巢的菊花,非常喜欢,贴出来共享一下
查看>>
在光纤环网中的b/s与c/s的比对
查看>>
根据程序名称和程序路径判断程序是否启动
查看>>
史记翻译-汉初三杰-萧何-萧相国世家第二十三
查看>>
史记翻译-汉初三杰-张良-留侯世家第二十五
查看>>
史记翻译-汉初三杰-韩信-淮阴侯列传第三十二
查看>>
帝王封赏之道和老板的封赏之道
查看>>
工作分解结构在软件开发中的应用
查看>>
关于系统崩溃后的Oracle恢复
查看>>
遭遇蚊子的獠牙,想起一种叫黄鸡婆的小虫子
查看>>
使用批处理命令给客户更新oracle数据库
查看>>
回首考研路:那年,那月,还有那条孤独的考研狗
查看>>
GCD小结
查看>>
IOS 第三方库介绍
查看>>
iPhone架构xmpp聊天工具 -xmpp协议初识《一》
查看>>
iOS提交后申请加急审核
查看>>