Linux as usb slave

USB slave

Многие компьютеры умеют загружаться с USB. Если бы можно было не записывать загрузочный образ на flash-диск, а передавать его прямо с одного компьютера на другой, это позволило бы ускорить процедуру инсталляции операционной системы на компьютер, особенно для тех систем, которые не поддерживают инсталляцию по PXE. LiveCD тоже можно было бы загружать без записи на диск.

Теоретически, это можно было бы сделать, если соединить два компьютера при помощи host-to-host-кабеля USB, такого как тот, что используется при поднятии сети usbnet.

Похоже, что сейчас нет софта, который позволяет это сделать, но (опять же, теоретически), его можно было бы смастерить на основе кода usbnet и прочего кода usb-gadget.

Пример использования g_file_storage из usb-gadget:

%# modprobe g_file_storage file=/root/data/backing_file

Можно указать ещё опцию removable=y, тогда файл backing_file можно менять через sysfs-интерфейс.

Если есть поддержка USB-slave, то всё работает. Но в том-то всё и дело, что в обычных компьютерах её нет!

Например, для телефона Nokia N900, такое организовать очень просто.

Ниже описывается пример использования, в котором мы создаём загрузочный файл, который телефон отдаёт как загрузочное устроство. Понятно, что в данном случае быстрее было бы использовать обычную флэшку, но здесь важно то, что загрузка выполняется с файла, который лежит на устройстве. И на его месте могло быть всё, что угодно (образ диска с другого компьютера, iSCSI-устройство, образ виртуального диска машины или что-нибудь ещё).

[править] Пример подготовки загрузочного файла для эскпорта по USB

$# dd if=/dev/zero of=file.img count=2048 bs=1024k

Ключевая часть. Отдаём файл как блочное устройство для компьютера [1] :

%# rmmod g_file_storage %# modprobe g_file_storage file=file.img

После выполнения последней команды на компьютере, к которому подключён телефон, увидится новое блочное устройство (usb-storage). Допустим, /dev/sdb .

Проинциализируем на нём таблицу разделов, отформатируем и проинсталлируем загрузчик:

%# fdisk /dev/sdb o n 1 w %# mkfs.vfat /dev/sdb1 %# mount /dev/sdb1 /mnt

Устанавливаем загрузчик grub4dos, который умеет выполнять загрузку с ISO-образов:

%$ wget http://download.gna.org/grub4dos/grub4dos-0.4.4.zip %$ unzip grub4dos-0.4.4.zip %$ grub4dos-0.4.4/bootlace.com /dev/sdb

Копируем файлы загрузчика:

%# grub4dos-0.4.4/grldr /mnt/ %# vi /mnt/menu.lst
title The CDROM emulation contiguous map (hd0,0)/test.iso (hd32) map --hook chainloader (hd32) boot

Размонтируем устройство, перезагружаемся.

[править] Дополнительная информация

  • Linux-USB Gadget API Framework (англ.)
  • The GNU/Linux «usbnet» Driver Framework (англ.)
  • [3] — некоторые рассуждения на тему
  • USB On-The-Go — спецификация, позволяющая устройствам менять роль slave—host.

[править] Примечания

  1. ↑ Можно было бы отдавать как CDROM, было бы вообще отлично для загрузки ISO, но пока этого ещё нет (смотрите патчи [1] и [2])

Источник

Как сделать из ПК «USB-Slave»?

Есть глупое устройство (ГУ), которое читает информацию только с USB-флешек.
Есть умный (в меру) ПК на онтопике, на обычном десктопном железе, с которого необходимо передавать на ГУ файлы.
Собственно, необходимо исключить лишнее звено в виде флешки и подключить в качестве флешки ПК. В моем понимании, нужно как-то дергать порт USB и монтировать туда образ ФС, генерируемый отдельно. Но. нужны советы специалистов.
P.S. допускаются хардварные изменения.

Читайте также:  Команда find linux параметры

http://www.linux-usb.org/gadget/ не оно? А так вообще вроде есть USB-кабели с какой-то электронной штукой в середине, которые могут такое провернуть.

Кабель нужен с микросхемой на борту, вроде usb smart link гуглить

Что за УГ? Какого размера файлы?
Из USB-host (который на ПК) USB-gadget (который на флешке) не сделаешь.
Глупое устройство с «умным» кабелем тоже вряд ли подружится, там вроде сетевое устройство эмулируется.
Берешь какую-нибудь cubiboard с usb-host и usb-gadget/otg, ставишь linux . . Поддержка usb-gadget в ядре есть, возможно предется пересобрать ядро.

Схемотехника приёмопередатчика USB для хоста и устройства отличается. Там даже банально подтяжки разных проводов к разным полюсам (девайс должен подтянуть D+ или D- к VCC через 1.5 кОм, а хост должен что-то там подтянуть к GND через 15 кОм). В случае USB OTG (умеют некоторые ARM-чипы) приёмопередатчик переключает свой режим работы в зависимости от положения перемычки в кабеле (вводится дополнительный контакт ID). То есть внутри чипа предусмотрена схема как для хоста, так и для девайса и они могут переключаться. USB-контроллер в PC банально не имеет нужной схемотехники внутри чипа.

Источник

Make Debian act as USB device which I can plug into another machine

I have two computers, a Debian laptop and windows PC. I have data available in my Debian machine which I want to use in windows machine. I’m aware of NFS and network file sharing, but is it possible to use USB to solve this issue? Making Debian to act like USB device, I can connect it to windows PC to share some of my data stored on Debian Machine using USB male-to-male cable. Is it possible to accomplish it using USB?

5 Answers 5

Both the laptop and the PC are USB hosts with female type A connectors. You cannot directly connect two USB hosts with a Male-Male cable. One of the device’s would need to act as a peripheral, which wouldn’t be supported by the USB chipset on the motherboard.

Some devices support acting as a host or peripheral with USB on-the-go, but I don’t think any personal computers would support this.

There are active cables that act as two peripheral’s (one for each host), but you would have to make sure they were supported by the OS.

There are ways to connect devices using USB, such as http://www.linux-usb.org/usbnet/. This however simulates an ethernet network, which you are probably trying to avoid. I’m pretty sure it’s not possible to connect a computer as a USB drive.

Читайте также:  Linux добавление пользователя консоль

Your best bet is probably the regular network way, or you can write the USB interconnect driver yourself.

I’m pretty sure it’s not possible to connect a computer — I don’t believe that. But if you did do something you would probably have to present the storage to the remote computer as a block device. Since USB storage is not a network file sharing protocol, it most likely expects to have exclusive direct access to the filesystem.

The issue with using USB in this manner is that USB is a Master-Slave protocol, and most computers only come with Master or Host capable USB ports.

If you were to find a way to add a Slave (or Device) port to your laptop, then you could use the Mass Storage Gadget implementation found here to make your laptop show up as a mass storage device.

If you can’t find a way to add a Slave port to your laptop, you can go with the Ethernet(or similar)-over-USB method using a host-to-host network cable; this requires a special USB bridge cable, not a straight USB A to A cable. If you use a straight USB A to A cable, you can burn up your power supplies! This will create a USB based network connection between the machines, one that you can even bridge to your Ethernet network. You’ll also need the appropriate drivers for the cable for each system.

I can think of one solution: clone the laptop HDD to a USB. Change the BIOS settings in the Windows box to boot USB first and then you boot your Debian system on the Win computer like a USB. If the Windows partition is not encrypted, you will be able to mount it from your portable Debian system and can exchange files as you wish.

You might need a USB with 64 or 128 GB depending on how much info there’s in your Debian system. And I believe that you were not looking for a way to migrate your entire laptop to a USB, but nevertheless, this is a solution to the problem you want to solve:

«Make Debian act as a USB device which I can plug into another machine

I found this web page that describes some of the process of setting up a Debian system to make a virtual USB mass storage device: https://docs.embeddedarm.com/USB_Gadget_Mass_Storage

Is that helpful? I’m guessing that by setting up two block devices, mounted on both systems but each one set-up to be read only by one system, that way a person can have two way file transfer and not worry about either computer trying to write something at the same time. To move a file from Debian to Windows you can copy a file to the virtual drive it can write to, then go to the Windows computer and you should see that file appear and then copy it from there. To move a file the other way copy a file to the Windows read/write virtual drive and then copy it out of the read only virtual drive on Debian.

Читайте также:  System requirement linux mint

The hardware setup on Debian should be fairly trivial so long as it has a free USB-C port. Configure the «gadget» on that port and connect the port to the Windows computer by a USB-C to USB-C cable or USB-C to USB-A cable as appropriate. If the Debian computer does not have any USB-C ports then the USB connection is not so trivial.

From what I’ve seen many newer computers with USB-A ports use the same chips as those that have USB-C ports, so the port should support a slave mode like most any USB-C port would. What I don’t know is if there is a requirement for the cable to signal a switch to slave/device/gadget/whatever mode like the old USB-OTG ports did. If there is a means to set a USB-A port to device mode in software then this likely will mean the port cannot recognize the presence of a device being plugged in, such as a mouse or flash drive.

Cables to safely connect USB 3.x type-A ports together do exist. Here’s one example: https://www.datapro.net/products/usb-3-0-super-speed-a-a-debugging-cable.html In the product description is a link to a Microsoft document on how to set this up on Windows so a USB-A port can look like a device port to another computer. This is not likely all that helpful but it proves this is possible, and shows some of the pitfalls and caveats on making this work. One caveat is that the port needs to have a USB 3.x controller that supports debugging. Again, this appears to be relatively common now since computer makers are using the same chips behind their USB-A ports as they use for USB-C ports that are capable of entering a device mode (required for things like USB Power Delivery to charge a laptop battery).

Using an active USB-A to USB-A «bridge» or «file transfer» cable might not get what you want. This kind of cable will look to both computers as an Ethernet or serial device. This would allow for sharing of files but would mean limiting data transfer speeds to that of the chip in the middle. A quality passive USB cable should give 10 Gbps (with USB 3.x and USB-A port) or even 20 Gbps (USB 3.2 and USB-C) transfer speeds. With the right kind of «gadget» settings the Debian computer could appear as a multifunction dock with attached drives and an Ethernet port to the Windows computer.

Источник

Оцените статью
Adblock
detector