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

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

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

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

  1. Можно было бы отдавать как CDROM, было бы вообще отлично для загрузки ISO, но пока этого ещё нет (смотрите патчи [1] и [2])
Источник — «http://xgu.ru/wiki/USB_slave»