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