Заставьте компьютер выступать в качестве виртуального USB-устройства для другого оборудования

18

Некоторые приложения имитируют виртуальный USB или CD-ROM, как будто USB-диск подключен к компьютеру.

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

Поэтому у меня будет виртуальный жесткий диск (например, *.vdiфайл) в компьютере, который через USB-разъем подключен в качестве USB-накопителя к другому оборудованию (например, к мобильному телефону или ноутбуку).

user62511
источник

Ответы:

12

Вам потребуется добавить USB-устройство / периферийный контроллер к компьютеру, в отличие от хост-контроллера USB, к которому они обычно прилагаются.

Примерно так: https://www.maximintegrated.com/en/products/interface/controllers-expanders/MAX3420E.html

К сожалению, вам нужно найти способ подключить его к материнской плате. Технически это можно сделать. Практически, вам придется изменить дизайн материнской платы, чтобы включить его. Возможно, вам повезет найти шину SPI или I2C, выставленную где-нибудь на вашей материнской плате, чтобы позволить вам добавить ее, но обычно они подключаются напрямую к тому, для чего они используются, если только вы не используете плату разработчика или одиночную плату. бортовой компьютер с открытым GPIO и другими портами, такими как Raspberry Pi.

Другим вариантом будет USB On-the-Go контроллер. Материнские платы, предназначенные для встраиваемых и переносных устройств, обычно имеют контроллер USB OTG (On-the-go), который может функционировать как контроллер хоста или устройства. Например, вышеупомянутый Raspberry Pi имеет контроллер On-the-Go, но на всех моделях, кроме Pi Zero, который подключается к хост-порту или встроенному USB-концентратору, что запрещает использование функциональности USB-устройства. У BeagleBone Black есть порт OTG.

Но это еще не все - когда у вас есть оборудование, вам также потребуется программное обеспечение. В Linux есть несколько полезных драйверов USB-гаджетов для ядра («USB-гаджет» - еще один термин для периферийных устройств / устройств USB), таких как g_serial и g_ethernet, которые позволяют подключать ваше устройство к другому компьютеру и отображать его как последовательное устройство или устройство Ethernet через USB. (есть и другие, которые позволяют отображать устройство в качестве запоминающего устройства, что позволяет использовать файл в качестве блочного устройства и выставлять компьютер в качестве устройства для хранения). BeagleBone Black обычно поставляется с включенным по умолчанию, поэтому вы можете просто подключить его к ПК через USB и увидеть его как сетевое устройство - и я считаю, что он также выглядит как запоминающее устройство с помощью композитного драйвера (который позволяет он должен отображаться как несколько типов USB-устройств через одно соединение. Pi Zero может использовать их , но не по умолчанию. Для Windows или других ОС вам, вероятно, придется написать этот драйвер устройства самостоятельно.

Таким образом, теоретически, вы можете сделать это. Вы можете сломать свой настольный ПК, попытаться найти где-нибудь неиспользуемую совместимую шину на материнской плате (скорее всего, некоторые неиспользуемые контакты на интегральной схеме контроллера), или способ расширить внутреннюю шину I2C или SPI, или что-то, что вы можете оторвать и замените и припаяйте на него USB OTG или микросхему контроллера устройства. Затем вы можете установить Linux и использовать драйвер гаджета или написать свой собственный для другой ОС. Практически, если вы не первоклассный инженер-электронщик, вы не сможете это сделать. По крайней мере, пока кто-то не выпустит этот неуловимый адаптер с устройством или портом OTG, который подключается к порту USB (теоретически это можно сделать с помощью микроконтроллера, такого как Arduino, подключенного к паре ИС контроллера USB-устройства), и пишет драйверы для его запуска.

Мэтт Томасон
источник
2
отличное объяснение, можете ли вы обновить ответ, если вы (с вашими знаниями) увидите что-то новое в отношении вашего предложения "пока кто-то не выпустит эксклюзивный адаптер ...". Есть ноутбуки с usb-c 2018 года, могут ли они быть решением?
Асаин Куйович
8

USB является несимметричным: одна сторона является хостом, а другая - периферийным устройством. Вы не можете заставить периферийное устройство выступать в качестве хоста или наоборот. USB-порт может выступать в качестве любой стороны; это называется USB на ходу и присутствует на некоторых мобильных телефонах и планшетах. Порты являются физически портами типа устройства, а не портами типа хоста. Я никогда не видел ПК с портом устройства. Это требует электроники на контроллере, недостаточно просто сделать кабель, который подходит к обоим концам.

Так что нет, вы не сможете превратить ПК в USB-устройство.

Если вы хотите использовать компьютер в качестве запоминающего устройства USB, вы можете использовать мобильный телефон или планшет с подключением USB вместо ПК.

Жиль "ТАК - прекрати быть злым"
источник
Не могли бы вы рассказать подробнее, как использование мобильного телефона может помочь мне превратить мой компьютер в USB-устройство хранения данных / хост, который я могу подключить к другому компьютеру, телевизору или устройству? Я думаю, я упускаю этот момент, хотя я думаю, что у меня есть достаточные знания о USB OTG.
Трейдер
@trejder Как я уже писал, я никогда не видел ПК с портом устройства («ПК», исключая планшеты x86).
Жиль "ТАК - перестань быть злым"
Да, но я прибегаю к последнему предложению: « Если вы хотите превратить компьютер в запоминающее устройство USB, вы можете использовать мобильный телефон или планшет с подключением USB ». Может быть, я что-то упускаю, но я понимаю это как «Вы можете использовать мобильный телефон или планшет, чтобы превратить компьютер в USB-накопитель». Если так, то вопрос: как?
Трейдер
1
@trejder Ах, «компьютер» в этом предложении не «ПК», это «компьютер». Телефон / планшет - это компьютер, отличный от ПК. Это тебя беспокоит?
Жиль "ТАК - перестань быть злым"
1
@trejder Нет. Обычно лучше всего устанавливать сетевое соединение тем или иным способом. Вы можете использовать Firewire как сетевое соединение между любыми двумя ПК с портом Firewire, но у многих ПК его нет. Большинство компьютеров имеют порт Ethernet, вы можете подключить два компьютера с помощью кабеля Ethernet (очень старые ПК требуют перекрестного кабеля, но современные могут использовать обычный кабель). Чтобы ПК служил в качестве устройства хранения для мобильного устройства, вам, как правило, нужно каким-то образом подключить ПК к Wi-Fi.
Жиль "ТАК - перестань быть злым"
2

Вы можете рассмотреть возможность использования одного из специальных «USB-USB-мостовых кабелей», иногда называемого «USB-сетевые кабели». Как упомянуто в этих статьях:

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

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

trejder
источник
2

Как объяснил в ответе Мэтт Томсон , Мэтт Томсон не может заставить физический USB-порт ПК действовать как подчиненное USB-устройство, поскольку ведомый USB-контроллер отсутствует.

Это означает, что если у нас есть адаптерная плата, которая может обеспечить USB-порт в подчиненном режиме (например, Raspberry Pi Zero), мы должны подключить ее к вашему хост-компьютеру по другому каналу, например, по проводному Ethernet. У меня есть два разных предложения, какой протокол вы можете запустить через это соединение Ethernet:

(1) Предоставьте доступ к USB-порту через IP-сеть.

Используйте программное обеспечение, чтобы выставить порт подчиненного режима USB Raspberry Pi Zero в качестве виртуального устройства USB на ваш ПК. Проект USB / IP обеспечивает это с помощью драйвера, который может передавать USB по IP-сетям. Вот пример использования USB / IP для предоставления имитируемого USB-устройства компьютеру - который будет вашим ПК здесь.

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

Но даже если это работает, вам все равно придется настроить или адаптировать драйверы устройств на вашем ПК таким образом, чтобы они (1) принимали входящее соединение USB / IP как соединение USB, (2) обеспечивали режим ведомого USB вместо Режим хоста USB, (3) имитирует запоминающее устройство USB, передавая данные из назначенного местоположения (ваш .vdiфайл).

В целом, это сложный способ сделать это.

(2) Разоблачить файл по IP-сети.

Это гораздо более простой способ использования соединения Ethernet с Raspberry Pi Zero: на Raspberry Pi Zero монтируйте данные, хранящиеся на вашем ПК, через сетевую файловую систему. Затем эти файлы логически появляются как часть файловой системы Pi Zero, и вы можете использовать их с драйвером USB-гаджета Linux для того, чтобы Raspberry Pi выглядел как запоминающее устройство USB для подключенных устройств.

tanius
источник