Embedded 如何共享对FAT32文件系统的访问

Embedded 如何共享对FAT32文件系统的访问,embedded,usb,fat32,fat,Embedded,Usb,Fat32,Fat,我正在使用SD卡存储的嵌入式设备上工作,需要允许PC通过USB访问SD卡 我能想到的最好的方法是虚拟化磁盘,并将虚拟化的图片呈现给电脑。这将允许电脑读写文件,而我的设备也在读写 这个问题出现在你认为PC可能已经缓存了读,所以当设备创建它们时,PC用户不可能看到新的文件——PC只会看到在它连接的时候存在的文件。 另一个缺点是,在电脑断开连接之前卸下闪存卡是不安全的 有什么解决办法吗?现代相机是如何处理的?我相信媒体传输协议就是为了这个目的而创建的,但是它并没有以透明的方式得到广泛的支持。我不是在处

我正在使用SD卡存储的嵌入式设备上工作,需要允许PC通过USB访问SD卡

我能想到的最好的方法是虚拟化磁盘,并将虚拟化的图片呈现给电脑。这将允许电脑读写文件,而我的设备也在读写

这个问题出现在你认为PC可能已经缓存了读,所以当设备创建它们时,PC用户不可能看到新的文件——PC只会看到在它连接的时候存在的文件。 另一个缺点是,在电脑断开连接之前卸下闪存卡是不安全的

有什么解决办法吗?现代相机是如何处理的?我相信媒体传输协议就是为了这个目的而创建的,但是它并没有以透明的方式得到广泛的支持。我不是在处理“媒体”文件,尽管我认为这无关紧要

是否有一些我缺少的常用的聪明变通方法


感谢您在同一SD卡上构建两个不同的分区-让您的设备使用一个分区,并向PC公开一个分区。由于不会同时访问同一个文件系统,因此问题得到了解决。

据我所知,两个设备无法使用常见文件系统(如FAT)协作共享块设备。(除非可能是只读文件系统)

解决方案是只让一个设备(即摄像头)拥有低级别(块级别)的文件系统。然后,该设备可以使用更高级别的协议(高于原始块操作)共享文件。正如你所说,USB就是一个例子。更高级别的文件共享协议的其他示例是NFS和SMB,尽管我认为它们不适用于此场景

引述自:

使用MTP而不是例如USB大容量存储设备类(MSC)的主要原因是后者在大容量存储设备块(通常在实践中是FAT块)的粒度上操作,而不是在逻辑文件级别。换句话说,USB大容量存储类旨在为主机提供对大容量存储(如compact flash)的无差别访问,而不是对可能与目标设备安全共享的文件系统的无差别访问(主机可能正在修改/访问的特定文件除外)。因此,在实践中,当USB主机安装了MSC分区时,它假定对存储器具有绝对控制权,在主机断开连接之前,设备可能无法安全地修改存储器而不会造成数据损坏的风险


这一点很好,但关键是允许PC处理设备生成的文件。我认为使用FAT的面向块文件系统的方法是不可行的。使用USB通过NDIS连接并使用CIFS网络共享这是Android解决相同问题的方法。以前,为了通过USB(大容量存储)访问它,必须从Android设备上卸下SD存储,但使用MTP,这个问题得到了解决。然而,它提出了一个新的问题,即MTP仍然没有得到很好的支持(仍然是在这个答案发布三年之后)。