如何阻止 USB 转以太网适配器在启动时将其自身显示为 CD 驱动器?

如何阻止 USB 转以太网适配器在启动时将其自身显示为 CD 驱动器?

序言:似乎有些用户不太喜欢这个问题,我不知道为什么。如果您认为这个问题值得反对,请考虑发表评论解释原因,以便我知道如何解决它。我需要一个解决方案来解决问题,如果需要,我非常愿意编辑我的问题。

我正在尝试将TP-Link UE200USB 到以太网适配器与 Debian Buster(撰写本文时的最新稳定版本)结合使用。在正常操作下,该适配器在首次插入时显示为 USB CD-ROM 驱动器,并依靠其驱动程序将其切换到以太网模式。

当我将适配器插入已经运行的系统时,该适配器工作正常:linux 正确检测到适配器并自动将设备切换到正确的模式。但是,当系统启动期间插入适配器时,我的系统无法自动切换正确的模式。

此外,当处于 CD-ROM 状态时,我无法找到一种方法来强制设备将自身显示为以太网适配器,而无需机械地拔出并重新插入设备。该系统旨在无需人工干预即可运行和重新启动,因此每次都必须手动干预是不可取的。

我的问题如下:如何让我的适配器(在系统启动时插入)将其自身显示为以太网适配器,而无需物理拔掉它?


旁注:

  • 我想补充一点,我在树莓派 4 + Ubuntu 19.10 上运行了类似的设置。即使系统在插入以太网适配器的情况下启动,以太网适配器也能被正确识别。到目前为止,我只在 Debian Buster/x86_64 上遇到过这个问题。

  • 就 USB 而言,适配器充当两个独立的 USB 设备。设备的两种模式中的每一种都有自己的 USB 产品 ID(即,作为 CD-ROM 驱动器运行时为 0601,作为以太网适配器运行时为 0602)。

  • 到目前为止我尝试过的事情:

    1. 通过以下方式解除绑定和重新绑定设备/sys/bus/usb/drivers/usb/{unbind,bind}:适配器再次呈现自身0601,内核再次将其注册为 CD-ROM 设备。我认为设备需要完全关闭电源才能正确重新初始化。

    2. usb-storage手动从设备上解除驱动程序绑定,并cdc_ether通过/sys/bus/usb/drivers/usb-storage/unbindand绑定驱动程序/sys/bus/usb/drivers/cdc_ether/bind(手动加载模块后):毫不奇怪,这不起作用,因为设备将自身作为 USB 大容量存储设备呈现给内核。

    3. 用于usb_modeswitch手动强制设备将自身显示为 0602:设备只是忽略消息或拒绝工作。弹出设备-K并重置它-R似乎没有任何效果。

    4. 通过以下方式断开设备连接/sys/bus/usb/devices/XXX/remove工作完美,但没有办法让 linux 在不物理重新插入设备的情况下“取消删除”设备经过进一步调查,可能不会,因为 linux 不会切断设备的电源。

    5. 将模块包含cdc_ether在我的 initramfs 中,并通过内核命令行参数预加载模块,modules_load徒劳地希望这个问题是由于早期启动时缺少内核模块引起的:Linux 仍然使用usb-storage

答案1

安装usb-modeswitch

sudo apt install usb-modeswitch

使用 获取设备 ID lsusb。例子:

Bus 001 Device 004: ID 2357:0601 TP-Link UE300 10/100/1000 LAN (ethernet mode) [Realtek RTL8153]

运行命令:

/usr/sbin/usb_modeswitch -v 2357 -p 0600 -R

而且它是固定的。我创建了在启动时执行此操作的服务。

这也适用于 TP-Link UE300

答案2

[很抱歉写了一个比评论更有价值的答案。如果某个模组可以转置,我将不胜感激。]

您的 BIOS 是否有可能将您的适配器作为可启动 USB 设备并锁定相关中断和 io 端口的处理,以便内核无法重新占用它?如果是这种情况,只需将 USB 设备强制从可启动设备列表中删除,并确保 BIOS 已配置为 PnP 系统即可。

相关内容