使用 configfs 建立的 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個以上。 但是,我的專案需要超出 HID 類別的限制。 有人知道如何操縱這些限制?



感謝@mosvy

問題就這樣解決了。

  1. HIDG_MINORS更改中的值/usr/src/linux-$(uname -r)/drivers/usb/gadget/function/f_hid.c
  2. 重新編譯內核模組/usr/src/linux-$(uname -r)/drivers/usb/gadget
    需要更新的核心模組如下。
    • udc_核心
    • 複合庫
    • usb_f_hid

現在您最多可以建立 HID 小工具HIDG_MINORS

答案1

是的,您只能建立 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 等)也 存在類似的限制。

相關內容