从linux usb bus节点来认识usb linux usb认识

首先从linux dmesg来认识usb:

<6>[   19.610046] msm_hsic_host msm_hsic_host: Qualcomm EHCI Host Controller using HSIC

<6>[   19.620391] msm_hsic_host msm_hsic_host: new USB bus registered, assigned bus number 1
<6>[   19.659942] msm_hsic_host msm_hsic_host: irq 261, io mem 0x12510000
<6>[   19.679931] msm_hsic_host msm_hsic_host: USB 2.0 started, EHCI 1.00
<6>[   19.685363] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002
<6>[   19.699890] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
<6>[   19.706085] usb usb1: Product: Qualcomm EHCI Host Controller using HSIC
<6>[   19.729888] usb usb1: Manufacturer: Linux 3.4.0-svn9114 ehci_hcd
<6>[   19.734863] usb usb1: SerialNumber: msm_hsic_host
<6>[   19.750549] hub 1-0:1.0: USB hub found
<6>[   19.753295] hub 1-0:1.0: 1 port detected
<6>[   20.809967] usb 1-1: new high-speed USB device number 2 using msm_hsic_host
<6>[   20.882781] usb 1-1: New USB device found, idVendor=05c6, idProduct=9048
<6>[   20.888427] usb 1-1: New USB device strings: Mfr=3, Product=2, SerialNumber=0
<6>[   20.899902] usb 1-1: Product: Qualcomm CDMA Technologies MSM
<6>[   20.904541] usb 1-1: Manufacturer: Qualcomm, Incorporated
<6>[   20.947814] rmnet_usb 1-1:1.5: rmnet_usb0: register 'rmnet_usb' at usb-msm_hsic_host-1, RmNET net device, f2:a7:5f:22:49:61
<6>[   20.960266] rmnet_usb 1-1:1.6: rmnet_usb1: register 'rmnet_usb' at usb-msm_hsic_host-1, RmNET net device, f2:a7:5f:22:49:61
<6>[   21.062225] rmnet_usb 1-1:1.7: rmnet_usb2: register 'rmnet_usb' at usb-msm_hsic_host-1, RmNET net device, f2:a7:5f:22:49:61
<6>[   21.181701] rmnet_usb 1-1:1.8: rmnet_usb3: register 'rmnet_usb' at usb-msm_hsic_host-1, RmNET net device, f2:a7:5f:22:49:61

首先说明该usb接口是干吗的?apq8064与mdm 9x15通信的接口;

上面前9行log说明发现了Qualcomm EHCI Host Controller这样的usb device,host controller也属于usb device,同时给出了PID VID等描叙信息。
注意从log上看出usb是从usb1开始并非其他的像mmc i2c bus是从0开始。任何usb host controller都是与hub同时存在,这里也不例外,1-0就是
hub,1-1:说明是在1 port上的,1-1:1.0也就是1 port上第一个接口。

比如电脑主机上前面的2个usb port其实都是一个hub下面的,我的电脑主机usb1上的第5个端口挂了个hub,同时手机插在该hub上的第4个port,那么节点 该是啥样?1-5.4:1. ?这些就是linux usb节点规范。

下面是我的主机给出的信息:
root@hd:~$ ls /sys/bus/usb/devices/1-5.4/
1-5.4:1.0/           avoid_reset_quirk    bMaxPacketSize0      dev                  ltm_capable          removable            version
1-5.4:1.1/           bcdDevice            bMaxPower            devnum               manufacturer         remove               
1-5.4:1.2/           bConfigurationValue  bNumConfigurations   devpath              maxchild             serial               
1-5.4:1.3/           bDeviceClass         bNumInterfaces       driver/              port/                speed                
1-5.4:1.4/           bDeviceProtocol      busnum               ep_00/               power/               subsystem/           
1-5.4:1.5/           bDeviceSubClass      configuration        idProduct            product              uevent               
authorized           bmAttributes         descriptors          idVendor             quirks               urbnum    


回归到上面的正题上来:下面是hub节点信息:
cat /sys/bus/usb/devices/1-0\:1.0/uevent                                       <
DEVTYPE=usb_interface
DRIVER=hub
PRODUCT=1d6b/2/304
TYPE=9/0/1
INTERFACE=9/0/0
MODALIAS=usb:v1D6Bp0002d0304dc09dsc00dp01ic09isc00ip00in00

下面信息说明HUB有一个endpoint 同时是输入中断类型:
root@android:/ # cat /sys/bus/usb/devices/1-0\:1.0/                            
bAlternateSetting         bNumEndpoints             subsystem/          
bInterfaceClass           driver/                   supports_autosuspend
bInterfaceNumber          ep_81/                    uevent              
bInterfaceProtocol        modalias                  
bInterfaceSubClass        power/
root@android:/ # cat /sys/bus/usb/devices/1-0\:1.0/ep_81/direction             
in
root@android:/ # cat /sys/bus/usb/devices/1-0\:1.0/ep_81/type                  
Interrupt

下面的第一个port上节点信息,信息都是从usb devices上获取的descriptors,解析后有个pid vid 
Interface等,其中bNumInterfaces是9,从1-1:1.8/也说明是9个Interface,speed 480也就是usb2.0的
速率。

root@android:/ # cat /sys/bus/usb/devices/1-1/                                 
1-1:1.0/            bConfigurationValue configuration       power/             
1-1:1.1/            bDeviceClass        descriptors         product            
1-1:1.2/            bDeviceProtocol     dev                 quirks             
1-1:1.3/            bDeviceSubClass     devnum              removable          
1-1:1.4/            bMaxPacketSize0     devpath             remove             
1-1:1.5/            bMaxPower           driver/             speed         
1-1:1.6/            bNumConfigurations  ep_00/              subsystem/         
1-1:1.7/            bNumInterfaces      idProduct           uevent             
1-1:1.8/            bcdDevice           idVendor            urbnum //5850            
authorized          bmAttributes        manufacturer        usb_device/        
avoid_reset_quirk   busnum              maxchild            version 

再看下面的1-1\:1.0对应host的usb driver name为diag_bridge,那么上层可以操作该文件,与usb devices

通信,注意本质上是host端1-1\:1.0下面的endpoint与usb device的对应的endpoint通信,通信的数据流都是诊断信息,

该diag_bridge设备写入的数据通过ep_01端点发送给usb_device,同时在端点ep_81读取数据,跑的都是diag_bridge管道数据流。

每个endpoint就如同一个高速串口一样,这样usb就是由许多高速串口构成,这就是usb最大的特点。 USB通信最基本的形式是通过端点(USB端点分中断、批量、等时、控制四种,每种用途不同),除了endpoint 0(后面另说)

其他的端点只能是输入或者输出,这个在usb device出厂前就定义好了,包括descriptors,还有一些usb设备descriptors

会有额外的信息,host端usb可以通过额外的信息获取有价值的东西。DRIVER=diag_bridge这个是有Host端的驱动做好的,

driver匹配了对应的PID VID interface0,也有match PID VID bDeviceClass bDeviceProtocol bDeviceSubClass这些项的,

由厂家定。假如没有driver DRIVER这项就没有。


root@android:/ # cat  /sys/bus/usb/devices/1-1/1-1\:1.0/uevent                 
DEVTYPE=usb_interface
DRIVER=diag_bridge
PRODUCT=5c6/9048/0
TYPE=0/0/0
INTERFACE=255/255/255
MODALIAS=usb:v05C6p9048d0000dc00dsc00dp00icFFiscFFipFFin002


再下看下面的endpoint 0,端点0是一个特殊的endpoint,当插入usb设备,host就是通过默认的端点0获取描叙符的,
端点0是usb设备缺省的配置,在host端没有配置好该usb device时使用端口0通信,当配置好后有其他的endpoint还
可以使用端点0,端点0是双向传输控制类型,这个可能许多人不知道。

root@android:/ # cat sys/bus/usb/devices/1-1/ep_00/                                                <
bEndpointAddress    bmAttributes        power/              wMaxPacketSize  
bInterval           direction           type                
bLength             interval            uevent  


再看下面的1-1\:1.5,interface 5 rmnet_usb driver,该driver上有2个设备,一个字符设备hsicctl0供AP与MODEM
传输控制类信息,比如DATA CALL等等,还有一个net网卡也就是建在该driver上;
有个问题就来了该接口下面有3个端点,而这里起码有2类数据,控制类命令与net socket buf数据流。
之前看了好几次端点是怎么使用来分开传输的。后来终于明白了,该接口下3个端点都是供usbnet使用的,一个输入一个输出(传输类型为bulk)
一个中断。 那么data数据的端点呢?很明显是端点0,同时仔细研究代码确实是端口0,在8064上高通的qmi通道走的就是端点0。

root@android:/ # cat /sys/bus/usb/devices/1-1/1-1\:1.5/uevent                  
DEVTYPE=usb_interface
DRIVER=rmnet_usb
PRODUCT=5c6/9048/0
TYPE=0/0/0
INTERFACE=255/255/255
MODALIAS=usb:v05C6p9048d0000dc00dsc00dp00icFFiscFFipFFin05

 

再看下图是usb设备,配置,接口,端点的关联:

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
提供的源码资源涵盖了小程序应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值