0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Gadget框架构造描述符

麦辣鸡腿堡 来源:嵌入式Linux系统开发 作者:嵌入式Linux系统开 2023-07-13 11:34 次阅读

假设你要【模拟】一个 USB 设备:

这个 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 结构体

它把各层串联起来,里面构造有设备描述符、配置描述符、接口描述符、端点描述符

图片

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    4983

    文章

    18286

    浏览量

    288497
  • Linux
    +关注

    关注

    87

    文章

    10990

    浏览量

    206738
  • 框架
    +关注

    关注

    0

    文章

    297

    浏览量

    17045
收藏 人收藏

    评论

    相关推荐

    请问SPI DMA描述符列表如何单次触发?

    要求如下: 定义两个个描述符类型的数组,如 SpiTxDesptr[3]= {{ SpiTxDesptr[1], X, X,X,X},{ SpiTxDesptr[2], X, X,X,X
    发表于 01-12 08:07

    转:HID报表描述符分析及编辑工具介绍

    复杂、涉及内容最多的报表描述符,好好跟大伙揉开了,捏碎了,细细的聊上一聊。由于HID协议就有70来页,再加上HID用途表又有170多页。如果逐个介绍的话,那工作量大了去啊,再说也没必要完全掌握,咱们
    发表于 06-06 12:02

    USB描述符详解

    对于实现USB功能的项目,不管是实现CDC,大容量存储、HID等都必须使用实现USB标准描述符,从而实现USB枚举过程。这里共享一个USB描述符的详解。
    发表于 06-12 14:46

    类型描述符

    引用句柄的类型描述符的每个数值元素都表示什么信息,找了好多资料都没有介绍这个问题的,请高手们帮忙分析一下,谢谢!
    发表于 04-30 13:04

    UBL UBOOT 描述符

       在DM368的开发包目录下/psp/flash-utils/DM36x/GNU:执行make 可以省成UBL:ubl_DM36x_nand.bin ;我想问的是如何添加UBL 的描述符?烧写到
    发表于 06-21 08:48

    请问host buff 描述符为什么没有回到return qum,而host pkt 描述符能够正常归还?

    host buff 和 host pkt 描述符设置的return qmgr 和return qnum 是一样的,pkt dma 搬移后 host pkt描述符能够回到return qnum,host buff 描述符却不能呢?
    发表于 08-06 06:22

    zigbee描述符匹配请求方式,请问协调器可以通过什么得到其组网的终端的终端描述符

    请问一下,协调器可以通过什么得到其组网的终端的终端描述符?从一个终端查找终端描述符afFindEndPointDesc(byte endpoint),这个方法是指终端本身查找,还是说协调器可以通过这个函数,根据终端号得到其组网的终端的终端
    发表于 08-09 07:35

    请问SPIDMA描述符列表如何单次触发?

    要求如下:定义两个个描述符类型的数组,如SpiTxDesptr[3]= {{&SpiTxDesptr[1], X, X,X,X},{&SpiTxDesptr[2], X, X,X,X
    发表于 10-12 09:16

    USB设备检测过程的USB设备的描述符

    `标准的 USB 描述符包括设备(Device)描述符、配置(Configuration)描述符、接口(Interface)描述符、端点(Endpoint)
    发表于 11-12 09:23

    FX2的多个配置描述符

    我想使用多个配置描述符。其中一个会有DirectSound接口(和界面不会从柏树驱动器接收数据),其他的就没有接口,而Cypress司机会提供DirectSound会使用定义的接口供应商数据。我已经
    发表于 04-19 09:19

    HID报告描述符生成工具

    HID报告描述符生成工具
    发表于 07-25 15:58

    传递文件描述符是什么?

    我买了一本书《Linux网络编程》。 看到第11章高级套接字。有个例子,传递文件描述符。 其中,进程A根据用户输入的文件名打开一个文件,将文件描述符打包到消息结构中,然后发送给进程B. 进程A的代码
    发表于 05-07 02:18

    ARM中,Linux 文件描述符到底是什么?

    一个 Linux 进程启动后,会在内核空间中创建一个 PCB 控制块,PCB 内部有一个文件描述符表(File descriptor table),记录着当前进程所有可用的文件描述符,也即当前
    发表于 10-23 16:11

    以太网数据帧的发送描述符队列是什么意思?

    这个描述符是什么呀,类似linux系统的文件描述符
    发表于 05-26 06:15

    从获取描述符的角度理解Gadget框架

    安装好 gadget 驱动程序后(比如 modprobe g_zero), 它只是构造好了各类描述符。在设备的枚举过程会读取描述符。 使用 OTG 线连接电脑和开发板时,电脑软件会执行
    的头像 发表于 07-13 11:38 539次阅读
    从获取<b class='flag-5'>描述符</b>的角度理解<b class='flag-5'>Gadget</b><b class='flag-5'>框架</b>