我目前正在尝试在设备模式下设置带有 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
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
我如何指定该接口的更多属性?例如端点?