usb gadget driver上层驱动如何加载?

how usb gadget driver upper layer driver get loaded?

我的嵌入式 linux 开发板具有 usb-net 小工具功能。从我的主机上,我可以通过 usb 连接建立以太网。我试图了解 usb 小工具子系统层的不同层如何协同工作。

在设备树中,我可以看到特定于平台的 udc 驱动程序,在内核配置中,我可以看到在内核驱动程序中启用了 USB Gadget 和 Ethernet Gadget 支持。据我了解,g_ether 驱动程序是内核的内置部分。

什么配置创建了 usb gadget 接口和端点并将其链接到上层驱动程序 (g_ether) 并创建了 usb-net gadget 以太网接口? 小工具的usbclass函数在哪里定义,加载不同的上层驱动?

我的系统上 运行 版本 5.10.36 内核。经过一些研究和学习,这就是我目前所知道的。 所以在 linux 内核构建期间,我在 menuconfig 中设置了以下选项。

Symbol: USB_ETH [=m]
Prompt: Ethernet Gadget (with CDC Ethernet support)
 Defined at drivers/usb/gadget/Kconfig:628
 Depends on: <choice> && NET
 Location:
   -> Kernel configuration
     -> Device Drivers
       -> USB support (USB_SUPPORT [=y])
         -> USB Gadget Support (USB_GADGET [=y])
           -> USB Gadget Drivers (<choice> [=y])

此配置提供预定义的 USB 网络小工具接口,支持 CDC 以太网和所需的 end-point 配置。这个driver就是g_ether。 端点配置在文件中预定义

drivers->usb->gadget->function->f_ecm.c 

configFS 可用于从 user-space 级别配置自定义 usb 小工具接口。