USB slave
Материал из Xgu.ru
- Короткий URL: 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
Копируем ISO-файлы:
%# cp knoppix.iso /mnt
Размонтируем устройство, перезагружаемся.
[править] Дополнительная информация
- Linux-USB Gadget API Framework (англ.)
- The GNU/Linux "usbnet" Driver Framework (англ.)
- [3] — некоторые рассуждения на тему
- USB On-The-Go — спецификация, позволяющая устройствам менять роль slave—host.