Usb
使用 configfs 可以創建的 USB 小工具的數量是否有限制?
作業系統:Ubuntu 18.04.3
核心:5.3.8
大家好:)
我正在嘗試使用 configfs 創建一堆 HID 小工具。
在設置第四個小工具之前它是成功的,
但是核心在創建第五個小工具期間發出錯誤消息。
錯誤資訊如下。
# 4 successive gadget creation g_mouse1 : /dev/hidg0 g_mouse2 : /dev/hidg1 g_mouse3 : /dev/hidg2 g_kbd1 : /dev/hidg3 # error occured mkdir: cannot create directory ‘/config/usb_gadget/g_kbd2/functions/hid.usb0’: No such device
似乎無法再創建 HID 功能。
所以我的問題是
“小工具的數量是否有限?” 和
“如果使用者可以調整限制,怎麼可能?”
根據進一步研究,
我發現mass_storage函式最多可以創建5個,
midi函式可以創建10個以上。
因此每個USB類都有特定的限制。
但是,我的項目需要超出 HID 類的限制。
有誰知道操縱這些限制的方法?
感謝**@mosvy**!
問題通過這種方式解決。
- 更改
HIDG_MINORS
in的值/usr/src/linux-$(uname -r)/drivers/usb/gadget/function/f_hid.c
。- 重新編譯核心模組
/usr/src/linux-$(uname -r)/drivers/usb/gadget
。需要更新的核心模組如下。
- udc_core
- libcomposite
- usb_f_hid
現在您最多可以創建 HID 小工具
HIDG_MINORS
是的,您只能創建 4 個 HID 小工具,這是一個硬編碼限制:繞過它的唯一方法是修改程式碼並重新編譯
usb_f_hid.ko
模組。此限制與 Linux 如何為
/dev/hidg#
設備分配動態主要/次要編號有關。來自
drivers/usb/gadget/function/f_hid.c
:#define HIDG_MINORS 4 static inline int hidg_get_minor(void) { ... if (ret >= HIDG_MINORS) { ida_simple_remove(&hidg_ida, ret); ret = -ENODEV; static struct usb_function_instance *hidg_alloc_inst(void) { ... status = ghid_setup(NULL, HIDG_MINORS); int ghid_setup(struct usb_gadget *g, int count) { ... status = alloc_chrdev_region(&dev, 0, count, "hidg");
其他創建設備節點的小工具也存在類似的限制(
/dev/g_printer#
= 列印機、/dev/ttyGS#
= gser + obex + acm 等)。