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 не показывает устройство, а поиск в Интернете об ошибке просто показывает информацию об отладке при установке принтера.

Я думаю, что мне нужно сказать моей системе, чтобы она воспринималась как устройство хранения данных, но я не знаю как.

Вот мой 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 ответ1

3

Примечание (редактирование): оказалось, что мой оригинальный ответ (ниже) не решает проблему ОП, а только сужает ее. Пытаясь изо всех сил удалить ответ или нет, я оставляю его в образовательных целях.


Ваш USB, кажется, сообщает 5a07 вместо 5307 (?). Сравните usb.ids. 5a07 нет, но, возможно, какой-то драйвер принтера как-то соответствует этому. Механизм описан в этом ответе (который кажется чрезмерно пессимистичным при ручном подключении драйвера).

Я не знаю, что именно произошло. На самом деле usb-storage 3-3:1.0 из вашего syslog заставляет меня подозревать, что usb-storage (который является подходящим модулем для флэш-накопителя) был загружен, а затем hpmud (?) пнул в; Я не уверен.

Но давайте предположим:

  • ошибочно сообщаемое idProduct является единственной проблемой (т.е. во всех других аспектах ваш USB-накопитель работает нормально),
  • действительно подключен какой-то неправильный драйвер
  • и все, что вам нужно, это отсоединить его и прикрепить правильный.

Посмотрите этот другой ответ, он указывает на эту статью LWN и выглядит как хорошее руководство (есть также этот ответ, указывающий на эту статью). Общий пример:

Чтобы отсоединить устройство от драйвера, просто запишите идентификатор шины устройства в файл unbind:

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

[...]

Чтобы связать устройство с драйвером, сначала устройство не должно управляться каким-либо другим драйвером.

[...]

Затем просто введите идентификатор шины устройства, которое вы хотите связать, в файл связывания для этого драйвера:

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

В вашем случае идентификатор автобуса 3-3:1.0 . Обратите внимание, что это зависит от используемого USB-порта, поэтому он будет другим, если вы вставите флэш-накопитель в другой разъем. Через минуту нам понадобится root-доступ, и из-за перенаправлений (>) проще запустить отдельную оболочку (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 из корневой оболочки.

Решение не является постоянным. Пока я не знаю, как сказать Linux, чтобы он всегда загружал нужный драйвер (я мог бы написать скрипт для автоматизации вышеперечисленного, но это не похоже на правильный путь). Тем не менее, флеш- накопитель предположительно изменил свой idProduct после неудачного извлечения, поэтому я не буду доверять ему в долгосрочной перспективе. Когда он работал с принудительным драйвером usb-storage , я запускал ddrescue для защиты всех данных от него.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .