2

切入正题

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

背景

Linux USB 复合小工具包括一个海量存储功能,可以支持多个逻辑单元,每个逻辑单元映射到一个驱动器映像文件(如 FAT 或 ISO)。据我所知,大容量存储功能似乎从以前的独立g_mass_storage 小工具继承了部分或全部配置接口

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

我试过的

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

USB 从属设备是英特尔 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 接口来构建和配置设备。这也可能是一种选择,但我仍在研究相关文档。

谢谢!

4

1 回答 1

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

瞧。当然,您需要按照 OP 所暗示的方式将可移除 = 1 传递给 go g_file。

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

echo >.../lun0/file

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

于 2018-12-04T20:30:57.137 回答