0%

eCos 文件系统

工作中遇到/tmp/tmp_file打开保存失败,记录原因以及解决方案

#1

开发过程中需要保存一些临时文件在内存中,一般路径为/tmp/xxx,在Linux下测试正常,而在Ecos系统下执行open出现异常

测试代码

const char * tmp_file = "/tmp/cache";
int dst = -1, wsize = 0;
char buf[128] = {0};
dst = open(tmp_file, "w+");
printf("dst:%d\n", dst);
wsize = write(dst, buf, sizeof(buf));
printf("wsize:%d\n", wsize);

出现错误

cramfs_open() error:cramfs is readonly filesystem
dst:-1
wsize:-1

检查ecos/fs发现存在多个文件系统

  • cramfs
  • ramfs
  • romfs
  • minifs
  • fat
  • ntfs

应用中注册如下

MOD_FAT
MOD_NTFS
//MOD_JFFS2
MOD_CAMFS
MOD_MINIFS
MOD_ROMFS
MOD_RAMFS

已经支持ramfs内存文件系统,继续检查mount pointfstab如下

/dev/flash/0/5  /home/gx  minifs
NONE  /mnt  ramfs

可以看到内存文件系统ramfs挂载点为/mnt,修改之后解决问题

ramfs 与 tmpfs

ramfs是下一种基于RAM做存储的文件系统,不会用swap,会因为数据的写入自动增长空间,所以可能导致最后系统所有的内存耗完

tmpfsLinux下的一个文件系统,它将所有的文件都保存在虚拟内存中,umount tmpfs后所有的数据也会丢失,tmpfs就是ramfs的衍生品。tmpfs使用了虚拟内存的机制,它会进行swap,但是它有一个相比ramfs的好处:mount时指定的size参数是起作用的,这样就能保证系统的安全,而不是像ramfs那样,一不留心因为写入数据太大吃光系统所有内存导致系统被hang住。