存储设备被检测为打印机


2

我有一个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 不显示设备,并且Internet搜索错误仅显示打印机安装调试信息。

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

这是我的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

现在,我需要知道如何处理此信息。

Answers:


3

注意(编辑):原来我的原始答案(如下)并不能解决OP的问题,只是缩小了范围。我一直在努力是否要删除答案,所以为了教育目的,我一直保留它。


您的USB似乎报告5a07而不是5307(?)。比较usb.ids5a07不存在,但也许某些打印机驱动程序与此匹配。此答案中描述了该机制(在手动附加驱动程序方面,这似乎过于悲观)。

我不知道到底发生了什么。实际上usb-storage 3-3:1.0,您的syslog使我怀疑usb-storage已加载了(这是指驱动器的正确模块),然后插入了hpmud(?);我不确定。

但让我们假设

  • 错误地报告idProduct是唯一的问题(即USB驱动器在其他各个方面都可以正常工作),
  • 确实存在错误的驱动程序
  • 而您所需要做的就是拆下它并连接正确的一个。

看到其他答案,它指向这篇LWN文章,看起来很不错(也有指向本文的答案)。通用示例是:

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

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

[…]

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

[…]

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

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

在您的情况下,公交车ID为3-3:1.0。请注意,这取决于您使用的USB端口,因此,如果将Thumbdrive插入另一个插槽,则将有所不同。稍后,我们将需要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

不要忘exit了root shell。

解决方案不是永久性的。现在,我还不知道如何告诉Linux始终加载所需的驱动程序(我可以编写脚本来自动执行上述操作,但是感觉不正确)。但是,拇指驱动器可能idProduct在弹出错误后更改了它,因此从长远来看,我不会相信它。与强制usb-storage驱动程序一起使用后,我将ddrescue设法从中保护所有数据。


非常感谢您的详细评论。不过,我很困惑。readlink ./driver返回../../../../../../bus/usb/drivers/usb-storage
12/15取消

@recluze,我认为这意味着已经有了合适的驱动程序。请编辑您的问题以表明这一事实。我的答案不适用,我可能会删除它。
卡米尔Maciorowski

可以,但是请不要删除您的答案。(也许只是在顶部发表评论。)它帮助我了解了很多有关此问题的信息。
recluze
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.