Устройство хранения определяется как принтер

367
recluze

У меня есть флэш-накопитель 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 

Теперь мне нужно знать, что делать с этой информацией.

2

1 ответ на вопрос

3
Kamil Maciorowski

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


Ваш 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чтобы защитить все данные от него.

Большое спасибо за подробный комментарий. Я нахожусь в тупике на первом шаге, хотя. `readlink. / driver` возвращает` ../../../../../../bus/usb/drivers/usb-storage ` recluze 6 лет назад 0
@recluze Это означает, что правильный драйвер уже там, я думаю. Пожалуйста, измените ваш вопрос, чтобы указать этот факт. Мой ответ не применяется, и я, вероятно, удалю его. Kamil Maciorowski 6 лет назад 0
Конечно, но, пожалуйста, не удаляйте свой ответ. (Может быть, просто прокомментируйте сверху.) Это помогло мне многое узнать об этой проблеме. recluze 6 лет назад 0