仅为特定的usb接口加载cdc_acm模块

时间:2015-02-17 20:36:21

标签: ubuntu usb

我正在尝试USB设备,它代表自己有多个(七个)USB子接口,每个加载一个cdc_acm内核模块。当我尝试连接更多USB设备时,cdc_acm模块报告“没有更多免费的acm设备”。

我尝试了udev规则但没有成功。

ACTION=="add", SUBSYSTEMS=="usb", DRIVERS=="cdc_acm", ATTRS{bInterfaceNumber}!="00", RUN+="/bin/sh -c 'echo -n $id > /sys/bus/usb/drivers/cdc_acm/unbind'"

此规则取消绑定cdc_acm驱动程序,但它在驱动程序检测到所有子接口并遇到可用空间问题后发生。

我正在寻找如何仅为一个SUB子接口加载cdc_acm驱动程序的方法。

1 个答案:

答案 0 :(得分:1)

您可以在cdc_acm的源代码中看到“没有更多免费的acm设备”消息的位置:

http://lxr.free-electrons.com/source/drivers/usb/class/cdc-acm.c#L1320

看了一下这段代码之后,看起来cdc_acm驱动程序有一个只能容纳32个条目的表,当表填满后你就会得到那个错误信息。表的大小由cdc-acm.h中的ACM_TTY_MINORS宏确定。

您可以通过重新编译具有较高ACM_TTY_MINORS值的cdc-acm模块,然后将其加载到内核中来解决您的问题。

重新编译内核模块是一个非常复杂的过程。我以前做过,但我不知道所有细节。许多其他人已经在其他环境中完成了它,因此您应该能够搜索“重新编译Linux内核模块”以找到有关它的好教程。