操作系统: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
更改中的值/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 等)也 存在类似的限制。