关于usb_modeswitch

背景

在Window上,我们在使用一些外接的USB设备(比如USB网卡,扩展坞等等)时,第一次插上去,会识别成一个存储设备或是模拟CD-ROM,打开该设备,里面是自带的该设备的Windows驱动程序,安装完驱动后,该设备就可以正常使用该设备的功能了。
在Linux系统中,这类设备同样最初可能被识别为大容量存储设备(所以有时候会觉得莫名其妙?插上去的明明不是一个U盘或者存储卡,还以为是个复合设备)。为了使其以正确的模式工作(例如,作为无线网卡或调制解调器),需要使用 usb_modeswitch 命令来改变其工作模式。

usb_modeswitch

usb_modeswitch 是一个Linux下用于控制具有多种模式的USB设备的模式切换工具。它主要用于那些在首次连接到电脑时被识别为存储设备(如U盘),但实际上具有其他功能(如USB调制解调器)的USB设备。这些设备通常自带Windows驱动程序,存储在设备的模拟CD-ROM中。

使用这个命令时,通常需要指定设备的供应商(vendor)和产品(product)代码。例如,对于某些USB无线网卡,可以使用如下命令:

sudo usb_modeswitch -KW -v 0bda -p 1a2b

说明: 这里的 -v 0bda -p 1a2b 分别代表网卡的供应商ID和产品ID,即USB设备的 PID 和 VID,这些信息可以通过 lsusb 命令查询得到。

usb_modeswitch 工具通常是自动使用的,通过 udev 事件和规则来触发,无需用户手动操作即可完成模式切换。但也可以作为命令行工具手动运行,尤其是在处理未知设备时。

切换为正常工作模式后,为了让该设备正常工作,可能还需要处理相应的Linux驱动程序等。