Как выполнить горячую замену резервного файла LUN запоминающего устройства в составном USB-гаджете Linux?

Переход к делу

Поддерживает ли функция запоминающего устройства композитного USB-гаджета Linux горячую замену файлов резервного копирования мультимедиа LUN? Если да, то у кого-нибудь заработало?

Фон

Составной USB-гаджет Linux включает функцию Mass Storage, которая может поддерживать несколько логических единиц, каждый из которых сопоставляется с файлом образа диска (например, FAT или ISO). Насколько я могу судить, функция Mass Storage, похоже, унаследовала часть или весь интерфейс конфигурации от предыдущего автономного гаджет g_mass_storage

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

Что я пробовал

Я использую insmod / modprobe и rmmod для монтирования и размонтирования одного LUN, сопоставленного с образом ISO. Параметры modprobe - это модифицированная версия стандартной конфигурации Edison, которую он использует для предоставления образа диска с «обновлением прошивки».

Ведомым USB-устройством является плата Intel Edison, на которой запущена слегка измененная сборка Yocto, хост - OS X 10.10.2:

# Step 1: mount an ISO
modprobe g_multi file=/home/root/first_image.iso removable=1 ro=1 stall=0 idVendor=0x8087 idProduct=0x0A9E iProduct=Edison iManufacturer=Intel

# at this point, the ISO appears on the host (I'm testing with OS X)

# Step 2, at some later time
rmmod g_multi

# The storage disappears from the OS X desktop. 
# It does not seem to complain unless you had files open on the media

# Step 3: mount a different ISO
modprobe g_multi file=/home/root/second_image.iso removable=1 ro=1 stall=0 idVendor=0x8087 idProduct=0x0A9E iProduct=Edison iManufacturer=Intel

# The operation appears to work on the device side, 
# but the new media does not appear in OS X.
# You can usually get it to work by unplugging the USB cable,
# which presumably resets the port somehow.

Я попытался найти способ сбросить порт устройства OTG под управлением программного обеспечения. Это может быть окончательным решением.

Я не (пока) пробовал использовать интерфейс configfs для сборки и настройки устройства. Это также может быть вариантом, но я все еще работаю над документацией по этому поводу.

Спасибо!


person fortyrod    schedule 03.04.2015    source источник
comment
Привет, ты когда-нибудь в этом догадывался? Я пытаюсь выполнить ту же задачу, что вы описали.   -  person BiN4RY    schedule 20.04.2017
comment
Нет, к сожалению, нет. Я отказался от использования Edison с намерением попробовать другую плату, например Orange Pi, но еще не перезагрузил проект. Если вам удастся это понять, мне это все равно понадобится в какой-то момент.   -  person fortyrod    schedule 21.04.2017


Ответы (1)


По крайней мере, на:

$ uname -r
4.9.87

Я нашел вот это:

$ find /sys -type f -a -name file
/sys/devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0/gadget/lun0/file
/sys/module/g_multi/parameters/file

Префикс будет сильно зависеть от вашего оборудования, но префикс gadget / lun0 / file доступен для записи. Тогда вы бы:

echo "/where/is/your/file" >.../lun0/file

и вуаля. Конечно, вам понадобится съемный = 1 переданный g_file, как подразумевается в OP.

Чтобы «извлечь» устройство, просто выполните следующие действия:

echo >.../lun0/file

Последний может выйти из строя, если файловая система все еще смонтирована на хосте.

person Alexandre Pereira Nunes    schedule 04.12.2018