This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] Linux/PROCESSOR-SDK-AM335X:动态禁用和启用配置为 OTG/外设的 USB 端口

Guru**** 2551110 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/621613/linux-processor-sdk-am335x-dynamically-disable-and-enable-usb-port-configured-as-otg-peripheral

器件型号:PROCESSOR-SDK-AM335X

工具/软件:Linux

我们正在运行由 AM335x Sitara 处理器供电的定制板、它具有2个 USB 端口。

USB 1配置为"主机"模式、并连接到外部蜂窝调制解调器。

USB0被配置为"外设"模式并用于调试。

这两个端口都使用 USB 驱动程序(RNDIS g_ether)上的网络来检测为网络接口。

到目前为止一切都正常。 现在,由于我们的产品正在投入生产,我们想要禁用 USB0外设端口(支持团队可以在需要时通过脚本/命令启用该端口)。

我已从/etc/network/interfaces 文件中删除了 usb0接口、但当我将此特定 USB 端口插入到 PC 时、由于 g_ether 内核模块仍处于启用状态、它仍会被检测为网络接口。 我无法禁用 g_ether ko、因为它被其他 USB 接口(主机)(USB1)接口用于与蜂窝调制解调器通信。

当此 usb0 (外设模式)端口连接到任何 PC 时、是否有办法禁用该端口的检测、以便终端用户不会收到检测到外部硬件的提示并请求下载任何驱动程序。

请注意,如果需要在现场调试产品,我无法通过设备树禁用它,因为我们可能需要在不重新编译固件的情况下启用它。

提前感谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Surjit、

    我建议您使用软件方法来禁用 USB0上的 Linux 内核控制台。 有关如何配置内核设置的说明,请参见:
    www.linuxtopia.org/.../ch09s07.html

    BR
    Tsvetolin Shulev
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬 的 Tsvetolin:

    感谢您的快速响应。 我已禁用此 USB 端口上的 Linux 控制台访问。 我要解决的问题是、当此板连接到任何 Windows/Linux PC 时、不应将其检测为新硬件、从而导致 PC 弹出请求下载驱动程序等

    我知道的唯一方法是通过内核器件树、但我也有一个来自我们内部支持团队的请求、即提供允许通过脚本或 Linux 命令访问此 USB 的配置、以便他们可以访问日志等 在现场部署产品并在客户遇到任何问题时、如果需要、可使用此 USB 端口。

    除了器件树之外、我还可以通过 Linux 来动态启用/禁用该特定的 USB 小工具端口。

    再次感谢。

    此致、

    Surjit

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Surjit、

    我想知道"延迟初始化"呼叫是否能帮助您。 基本上、延迟初始化将在您通过/proc/deferred_initcalls.写入值后启用驱动程序 这样、您的支持团队只能在需要时加载脚本。 我已使用延迟初始化来优化一个 TI 芯片组的引导时间(但不是 AM335x)。

    如需更多信息、请参阅 elinux.org/Deferred_Initcalls

    希望这对您有所帮助。

    谢谢、
    Prabhuraj
    Black胡椒 技术
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Prabhuraj、您好!

    我需要尽早加载 g_ether (通过 USB 驱动程序进行网络)、因为我们需要使用该驱动程序来实现 USB1 (主机 USB)的功能。
    因此、取消初始化调用不会对我们有所帮助。
    我们只需通过 Linux 命令关闭 usb0 (外设/OTG USB 端口)、以屏蔽通过 USB 连接到任何 PC 时对器件的检测。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Surjit、

    您还可以探索通过 sysfs 禁用 USB 的选项。 例如"sudo sh -c "echo "0">/sys/bus/usb/devices/usbX...

    谢谢、
    Prabhuraj
    Black胡椒 技术
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Surjit、

    如果 USB1用作主机、则 g_ether。ko 将不会出现图片。 顾名思义、它用于外设/小工具"G_"。 因此、您可以将所有 USB 小工具驱动程序作为模块、并在需要时尝试插入。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Prabhuraj、您好!

    感谢您的快速响应。

    我只能通过 sysfs 看到我的主机 USB (USB1)。 peral/OTG USB (usb0)不会在/sys/bus USB sysfs 中枚举。

    [root@xxx ~]# cd /sys/bus/usb/devices
    [root@xxx 设备]# ls -ltr
    总计0
    lrwxrwxrwx 1根 根 0 Aug31 06:29 USB1 ->../../../devices/platform/ocp/47400000.usb/47401c00.usb/musb-hdrc.1.auto/usb1
    lrwxrwxrwx 1根 根 0 Aug31 06:29 1-1:1.3 ->/../../devices/platform/ocp/47400000.usb/47401c00.usb/musb-hdrc.1.auto/usb1/1-1/1-1:1.3/
    lrwxrwxrwx 1根 根 0 Aug.31 06:29 1-1:1.2 ->./../../devices/platform/ocp/47400000.usb/47401c00.usb/musb-hdrc.1.auto/usb1/1-1/1-1:1.2/
    lrwxrwxrwx 1根 根 0 Aug31 06:29 1-1:1.1->./../../devices/platform/ocp/47400000.usb/47401c00.usb/musb-hdrc.1.auto/usb1/1-1/1-1:1.1/
    lrwxrwxrwx 1根 根 0 Aug31 06:29 1-1:1.0 ->./../../devices/platform/ocp/47400000.usb/47401c00.usb/musb-hdrc.1.auto/usb1/1-1/1-1:1.0/
    lrwxrwxrwx 1根 根 0 Aug31 06:29 1-1 ->../../../devices/platform/ocp/47400000.usb/47401c00.usb/musb-hdrc.1.auto/usb1/1-1
    lrwxrwxrwx 1根 根 0 Aug31 06:29 1-0:1.0 ->./../../devices/platform/ocp/47400000.usb/47401c00.usb/musb-hdrc.1.auto/usb1/1-0:1.0/
    [root@xxx 设备]#

    但我尝试通过/sys/bus/platform/drivers/musb-hdrc/musb-hdrc.0.auto/power.来实现它
    # CD /sys/bus/platform/drivers/musb-hdrc/musb-hdrc.0.auto/power
    [root@cioffi power]# echo "0"> autosuspend_delay_ms
    [root@cioffi power]# echo "auto"> control

    但它不会关闭 usb0 (OTG)端口。 :( 当我将设备插入任何 PC 时,仍会检测到它:(

    此致、
    Surjit
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Dwarakesh、

    这是我第一次尝试、但一旦我禁用 g_ether 模块、通过 USB1的网络接口也会下降。 当我重新插入 g_ether 模块后、通过 USB 连接的 USB1 (主机)端口网络便开始工作。 因此完全卡住。 如果不是 g_ether、主机 USB 端口使用什么 RNDIS 驱动程序通过 USB 接口创建网络?

    感谢您的快速响应。 感谢您的支持。

    此致、
    Surjit
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Surjit、

    RNDIS 驱动程序通常是连接到 Windows 计算机的小工具驱动程序。

    对于使用 CDC_NCM、CDC_ACM、USBnet、CDC_Ether、CDC_WDM、 等等 使用的调制解调器是什么?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Dwarakesh、

    我们使用 USB1 (主机模式)连接到蜂窝式调制解调器。 因此、所有数据流量都将通过通过此接口创建的 IP 接口传输。
    我禁用了 g_ether、我可以看到这个特定的 USB1 (通过 USB 主机端口的 IP 接口)被关闭。 当我重新插入 g_ether 时、通过 USB 传输的 IP 接口再次出现、所有与蜂窝式调制解调器的连接都正常。

    此致、
    Surjit
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Surjit、

    在另一个节点上,请问您的定制板是否支持每端口 USB 电源处理? 我是说、您的电路板中 USB 端口的电源线是如何映射的?

    在某种程度上、如果可以控制连接到 USB0的电力线引脚、我会考虑一个选项
    请查看以下链接,这些链接可为您提供线索:

    e2e.ti.com/.../1215899
    e2e.ti.com/.../1382339
    e2e.ti.com/.../627977
    e2e.ti.com/.../1925709

    此外、PowerTOP 实用程序还可以帮助您从命令行禁用 USB 设备(提供了电源顶代码、您可以尝试交叉编译)
    github.com/.../powertop -源代码链接
    askubuntu.com/.../how-to-disable-auto-power-off-of-usb-devices-like-usb-mouse -示例 PowerTOP 命令

    希望这对您有所帮助

    谢谢、
    Prabhuraj
    Black胡椒 技术
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Surjit、

    有趣。 发生这种情况时,您在 dmesg 中看到了什么? 您使用的是什么调制解调器? 对于 USB 主机、RNDIS 驱动程序配置是符合 RDNIS 标准的 USB 调制解调器所必需的 USB_NET_RNDIS_HOST。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Dwarakesh、

    解决了这个问题。 这实际上是我的一个失误。 移除 g_ether 实际上仅会停用小工具(usb0)、而主机器件仍处于运行状态。 唯一的问题是它被枚举为 usb0而不是 USB1.Obvily 因为现在小工具不再存在、因此唯一的 USB 器件(主机)被枚举为 usb0。 我喜欢一个白痴在寻找 USB1。 由于我使用 ifplugd 守护程序来热插拔 USB1,因此它从不会热插拔 usb0,因此我错过了它。

    看一下 dmesg,我的脸就像一个耳光。 我本应该更早了解一下。

    感谢大家指引我正确的方向。

    此致、
    Surjit
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Surjit、

    很高兴知道您已经取得了进展。 祝你一切顺利。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Surjit、

    您可以解决该问题。


    谢谢、
    Prabhuraj
    Black胡椒 技术