我在嵌入式Linux系统上工作,它挂载了一张SD卡(格式为FAT32),每秒连续写入大约500KB的数据。
现在为了处理电源故障,我们设计了一个电池,它提供大约3秒的备份。
这使我们能够完成正常的关闭。
我们只有一个进程将数据写入SD卡.So,其他进程无论如何都不会访问SD卡。
在断电和关机过程中,我们使用fflush和fsync,最后对写入数据的当前文件进行fclose。
我们甚至用示波器通过探测硬件线路来验证,当我们在关机过程中调用fflush和fsync时,SD卡的数据事务变得活跃。在此期间,正在尝试将ie缓存数据写入SD卡。这让我相信fflush和fsync是正确实现的。
我唯一没有做的事情就是卸载SD卡,因为它需要更长的时间。
但在大约10次尝试后,我们仍然可以看到SDCARD根分区被损坏,文件丢失。
是正常正常关机所必需的。据我所知,mount只创建了此文件系统根目录的inode与文件系统的其余部分的链接。umount只删除链接。
在嵌入式Linux中,确保SD卡关机时保护SD卡的完美方法或步骤是什么?
下面是当前在关机过程中执行的代码。有必要打个电话吗?
if(fflush(file)<0)
printf("Failed fflush errno=%d",errno);
if(fsync(fileno(file))<0)
printf ("Failed fsync errno=%d",errno);
if(fclose(file)<0)
printf("Failed fclose errno=%d",errno);
file=NULL;发布于 2019-06-11 19:37:39
你做得几乎是对的,然而,有一个问题:你的SD设备可能需要额外的时间来刷新它自己的内部缓冲区。
所需的时间取决于精确的芯片组(当然还有品牌、型号等)。
为了正确关闭系统,您需要一个备用电池来保证您的安全:考虑到企业RAID卡上的备用电池的使用时间从2分钟到5分钟不等,并且制造商确切地知道每个硬件的详细信息。
不幸的是,在fsync()之后,你必须等待更多的时间。在类似的情况下,我们的RasperryPi设备是安全的,有一个备用电池,允许设备操作至少20秒(尽管在我们的情况下10-15是安全的),只是为了玩得轻松。
https://stackoverflow.com/questions/56541592
复制相似问题