这个 USB 设备含有厂家信息:它记录在设备描述符里,所以设备描述符应该由你提供
这个芯片可能有多种配置,这也是由你决定,所以配置描述符应该由你提供
某个配置下多个接口,接口就是功能,Linux 内核里事先提供了很多功能的驱动程序,所以:接口描述符是内核提供的
某个接口下需要什么端点,也是内核里各类功能的驱动程序提供的
以 zero.c 为例:
配置 1:loopback,Host 写数据给它,就可以读出原样的数据
配置 2:sourcesink,Host 写数据给它(它只是记录下数据),Host 还可以读数据(读到的都是0)
从下到上涉及这些文件:

阅读源码时,入口函数是usb_composite_probe(&zero_driver):

函数调用过程中主要的函数如下,重点关注“xxx_bind”函数,bind 就是初始化的意思:
usb_composite_probe
composite_bind
zero_bind
sourcesink_bind/loopback_bind

深入解读描述符的构造过程,可以得到下面的图:
构造出一个 usb_composite_dev 结构体
它把各层串联起来,里面构造有设备描述符、配置描述符、接口描述符、端点描述符

-
嵌入式
+关注
关注
5186文章
20149浏览量
328855 -
Linux
+关注
关注
88文章
11628浏览量
217980 -
框架
+关注
关注
0文章
404浏览量
18317
发布评论请先 登录
USB描述符详解
UBL UBOOT 描述符
usb标准描述符之技巧
USB HID报告及报告描述符简介
Descriptor描述符解释
Linux中文件及文件描述符概述
USB设备键值表描述符说明资料免费下载
USB各描述符之间的依赖是怎么样的
Linux系统编程中的文件描述符调用
科普一下什么是USB的描述符
从获取描述符的角度理解Gadget框架
基于DWC_ether_qos的以太网驱动开发-描述符格式介绍
Python的优雅之处:Descriptor(描述符)

Gadget框架构造描述符
评论