
作業系統: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!
問題就這樣解決了。
HIDG_MINORS
更改中的值/usr/src/linux-$(uname -r)/drivers/usb/gadget/function/f_hid.c
。- 重新編譯內核模組
/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 等)也 存在類似的限制。