修改USB设备描述符

修改USB设备描述符

我目前正在尝试在设备模式下设置带有 USB OTG 端口的 Linux 系统。当使用预组合配置启用 NCM 小工具时,我已经可以加载小工具驱动程序,并且连接到 OTG 端口的主机可以识别 NCM 小工具。具有多个端点的两个接口列在 /sys/bus/usb/devices/3-1/ 下。现在,我想修改提供给主机的接口(和端点)。

根据我的研究,我认为 libcomposite 和 configfs 是解决这个问题的方法。因此,我启用了可通过 buildroot 中的 configfs 配置的 NCM。

对于配置,我尝试遵循有关通过 configfs 配置小工具的内核文档:https://www.kernel.org/doc/Documentation/usb/gadget_configfs.txt

我加载了 libcomposite.ko 并安装了 configfs。我可以在 /sys/kernel/config/usb_gadget/ 下创建一个文件夹。进入该文件夹时,它包含预期的文件和子文件夹:

total 0
-rw-r--r--    1 root     root        4.0K Feb 16 15:15 UDC
-rw-r--r--    1 root     root        4.0K Feb 16 15:15 bDeviceClass
-rw-r--r--    1 root     root        4.0K Feb 16 15:15 bDeviceProtocol
-rw-r--r--    1 root     root        4.0K Feb 16 15:15 bDeviceSubClass
-rw-r--r--    1 root     root        4.0K Feb 16 15:15 bMaxPacketSize0
-rw-r--r--    1 root     root        4.0K Feb 16 15:15 bcdDevice
-rw-r--r--    1 root     root        4.0K Feb 16 15:15 bcdUSB
drwxr-xr-x    2 root     root           0 Feb 16 14:43 configs
drwxr-xr-x    2 root     root           0 Feb 16 14:43 functions
-rw-r--r--    1 root     root        4.0K Feb 16 15:15 idProduct
-rw-r--r--    1 root     root        4.0K Feb 16 15:15 idVendor
drwxr-xr-x    2 root     root           0 Feb 16 14:43 os_desc
drwxr-xr-x    2 root     root           0 Feb 16 14:43 strings
我现在的问题是,我无法创建任何函数。在 ./functions 下创建一个文件夹给了我
mkdir functions/ncm.usb3
mkdir: can't create directory 'functions/ncm.usb3': No such file or directory

但是,在 /lib/modules/4.14.78-linux-v4.14-BSP0112/kernel/drivers/usb/gadget/function/ 下确实存在一个文件 usb_f_ncm.ko !

我尝试过几个名称(例如 usb0、usb、u1...)、其他小工具(如大容量存储小工具),但都没有成功。我可以在 ./configs 下创建配置,也可以在 ./strings 下创建子文件夹...我在这里缺少什么拼图?任何帮助表示赞赏

侧面信息:这是一个嵌入式系统,modprobe 不可用,只能 insmod...

更新我可以从上面解决这个问题。以前,我将 libcomposite 和 ncm 作为 buildroot 中的模块 (M)。当直接将它们包含到内核 (*) 中时,我可以添加 ncm 功能。这可能与缺少 modprobe 功能有关。但是,创建的函数文件夹中只出现四个配置文件:

total 0
-rw-r--r--    1 root     root        4.0K Feb 16 16:30 dev_addr
-rw-r--r--    1 root     root        4.0K Feb 16 16:30 host_addr
-r--r--r--    1 root     root        4.0K Feb 16 16:30 ifname
-rw-r--r--    1 root     root        4.0K Feb 16 16:30 qmult

我如何指定该接口的更多属性?例如端点?

答案1

当我做了更多研究时,我想回答我自己的问题。

简而言之:不可以,除了 configfs 中提供的内容之外,无法对 NCM 功能进行进一步配置。其余的 USB 描述符(如端点、数据包大小等)在源代码的函数。

主机看到的接口对应于设备端与小工具相关的功能。多个功能(如 MIDI、大容量存储设备、NCM 等)可以与同一个设备相关联,如内核配置文档对于小工具驱动程序。这些将在主机端显示为接口(NCM 等某些功能将显示为多个接口)。

相关内容