如何热插拔Linux组合USB小工具中的海量存储LUN后备文件?

时间:2015-04-03 21:10:56

标签: embedded-linux usb-drive intel-edison hotswap usb-mass-storage

切入大通

Linux组合USB小工具大容量存储功能是否支持热插拔LUN媒体备份文件?如果是这样,有没有人让它工作?

背景

Linux USB composite gadget包括一个Mass Storage功能,它可以支持多个逻辑单元,每个逻辑单元映射到一个驱动器映像文件(如FAT或ISO)。据我所知,Mass Storage功能似乎继承了之前独立的g_mass_storage gadget

中的部分或全部配置界面。

文档暗示您可以将存储映像作为大容量存储LUN挂载,然后在以后卸载它并重新装入新的存储映像,其方式与物理CD / DVD驱动器的工作方式类似。正是我试图访问这个功能。

我尝试过什么

我使用insmod / modprobe和rmmod来挂载和卸载映射到ISO映像的单个LUN。 modprobe参数是Edison config库存的修改版本,用于公开其“固件更新”驱动器映像。

USB slave是英特尔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接口来构建和配置设备。这也许是一种选择,但我仍在研究这方面的文档。

谢谢!

1 个答案:

答案 0 :(得分:0)

至少在:

$ 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

前缀在很大程度上取决于您的硬件,但是小工具/ lun0 /文件之一是可写的。然后,您将:

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

,瞧。当然,您需要隐含OP来传递可移动= 1的go g_file。

要“弹出”设备,只需执行以下操作:

echo >.../lun0/file

如果文件系统仍安装在主机上,则最后一个失败。