存储设备被检测为打印机

存储设备被检测为打印机

我有一个 HP USB 拇指驱动器。它工作正常,但在弹出错误后就停止了。现在,当我插入它时,它会被检测为打印机(据我所知)。

syslog当我插入 USB 时就显示这个。

Dec 15 09:10:44 namviper kernel: [  797.472422] usb 3-3: new high-speed USB device number 10 using xhci_hcd
Dec 15 09:10:44 namviper kernel: [  797.614558] usb 3-3: New USB device found, idVendor=03f0, idProduct=5a07
Dec 15 09:10:44 namviper kernel: [  797.614562] usb 3-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
Dec 15 09:10:44 namviper kernel: [  797.614565] usb 3-3: Product: v220w
Dec 15 09:10:44 namviper kernel: [  797.614566] usb 3-3: Manufacturer: HP
Dec 15 09:10:44 namviper kernel: [  797.614568] usb 3-3: SerialNumber: 0426400000006660
Dec 15 09:10:44 namviper kernel: [  797.615308] usb-storage 3-3:1.0: USB Mass Storage device detected
Dec 15 09:10:44 namviper kernel: [  797.615599] scsi host6: usb-storage 3-3:1.0
Dec 15 09:10:44 namviper root: loading HP Device 003 010
Dec 15 09:10:45 namviper python3: io/hpmud/musb.c 2183: [3413] hpmud_make_usb_uri() bus=003 dev=010
Dec 15 09:10:45 namviper python3: io/hpmud/musb.c 2281: hpmud_make_usb_uri() uri=hp:/usb/v220w?serial=SMART_INSTALL_ENABLED bytes_read=42
Dec 15 09:10:45 namviper /hp-config_usb_printer: hp-config_usb_printer[3413]: error: This is not a valid device
Dec 15 09:10:45 namviper colord[1002]: (colord:1002): Cd-WARNING **: CdMain: failed to emit DeviceAdded: failed to register object: An object is already exported for the interface org.freedesktop.ColorManager.Device at /org/freedesktop/ColorManager/devices/sysfs_HP_v220w

lsblk没有显示设备并且在互联网上搜索错误仅显示打印机安装调试信息。

我想我需要告诉我的系统将其视为存储设备,但我不确定如何做。

这是我的uname -a

Linux namviper 4.10.0-42-generic #46~16.04.1-Ubuntu SMP Mon Dec 4 15:57:59 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

更新:根据 KamilMaciorowski 的回答,正确的驱动程序已经被检测到:

$> cd "/sys/bus/usb/devices/3-3:1.0/"
$> readlink ./driver
../../../../../../bus/usb/drivers/usb-storage

现在我需要知道如何处理这些信息。

答案1

注(编辑):事实证明,我原来的答案(如下)并没有解决 OP 的问题,只是缩小了范围。在犹豫是否要删除答案之后,我决定保留它以供教育之用。


您的 USB 似乎报告的5a075307(?)。比较usb.ids.5a07不存在,但可能某些打印机驱动程序以某种方式匹配此设置。该机制在这个答案(对于手动连接驱动程序而言,这似乎过于悲观)。

我不知道到底发生了什么。实际上,usb-storage 3-3:1.0从您的syslog描述来看,我怀疑usb-storage(哪个是拇指驱动器的正确模块)已加载,然后hpmud(?)启动;我不确定。

但让我们认为

  • 错误报告idProduct是唯一的问题(即,您的 USB 驱动器在其他所有方面都运行正常),
  • 确实连接了错误的驱动程序
  • 您需要做的就是将其拆下,然后安装正确的那个。

另一个答案,它指向这篇 LWN 文章这看起来是个不错的线索(还有这个答案指向本文)通用示例为:

为了从驱动程序解除设备绑定,只需将设备的总线 ID 写入解除绑定文件:

echo -n "1-1:1.0" > /sys/bus/usb/drivers/usb/unbind

[…]

要将设备绑定到驱动程序,该设备首先必须不被任何其他驱动程序控制。

[…]

然后,只需将您想要绑定的设备的总线 ID 写入该驱动程序的绑定文件中:

echo -n "1-1:1.0" > /sys/bus/usb/drivers/usb-storage/bind

您的总线 ID 为3-3:1.0。请注意,这取决于您使用的 USB 端口,因此如果您将 U 盘插入另一个插槽,则总线 ID 会有所不同。稍后我们将需要 root 访问权限,并且由于重定向 ( >),启动单独的 shell ( sudo -s) 会更容易。

首先检查当前连接的驱动程序:

cd "/sys/bus/usb/devices/3-3:1.0/"
readlink ./driver

如果你是对的,那它将会是别的东西usb-storage

分离驱动程序,无论它是什么:

echo -n "3-3:1.0" > ./driver/unbind

如果尚未加载,请加载正确的驱动程序:

modprobe usb-storage

将其附加到设备:

echo -n "3-3:1.0" > /sys/bus/usb/drivers/usb-storage/bind

并确认:

readlink ./driver
lsblk

不要忘记exitroot shell。

该解决方案并非一劳永逸。目前,我不知道如何告诉 Linux 始终加载所需的驱动程序(我可以编写一个脚本来自动执行上述操作,但感觉这不是正确的方法)。尽管如此,拇指驱动器idProduct在弹出错误后可能已经更改了其设置,因此我不会长期信任它。一旦它与强制usb-storage驱动程序配合使用,我就会运行ddrescue以确保其中的所有数据安全。

相关内容