在cFS中使用OS_creat

时间:2018-12-22 09:35:25

标签: c core-flight-system

似乎我无法使用OS_creat创建文件。我总是收到这个:

EVS端口1 66/1 / TFTP_APP 134:DecodeRequestString():/tmp/dest.txt,八位字节EVS端口1 66/1 / TFTP_APP 139:TFTP错误打开WRQ文件/tmp/dest.txt状态= -108

我尝试从其他应用程序使用OS_creat,但似乎对我而言永远无效。

您知道与此相关的一些典型问题吗?。

1 个答案:

答案 0 :(得分:2)

OS_creat()调用实际上是在OSAL中实现的。您看到的值-108表示OSAL错误代码,可以在文件osapi-os-filesys.h中以以下形式找到该错误代码:

#define OS_FS_ERR_PATH_INVALID         (-108)

重要的是要了解OSAL不直接使用底层OS文件系统,而是使用“虚拟安装点”系统。

与文件有关的所有操作(例如打开或创建文件)都将从虚拟文件名(例如,您提供的名称/tmp/dest.txt)转换为基础系统中的实际文件名。之所以采用这种方式,是因为某些RTOS具有不同的文件名指定方式,特别是如果驻留在单独的块设备上,而某些RTOS没有类似UNIX的统一虚拟文件系统的概念。

此转换由OS_TranslatePath()函数实现,该函数依次引用系统卷表OS_VolumeTable,该表通常由您使用的平台支持包定义。如果此翻译失败,则返回OS_ERR_PATH_INVALID(-108)。

系统卷表具有多个字段,例如:

{"/eedev0",  "./cf",      FS_BASED,        FALSE,     FALSE,    TRUE,     "CF",      "/cf",     512   },

对于所有字段的含义,源文件应具有更完整的密钥,但要注意的是,在POSIX部署中,仅真正支持FS_BASED模式,这是对基础文件系统的映射。对于这种模式,PhysDev(第二个参数)实际上是指基础文件系统(不是物理设备)中的现有路径。

要解决您的问题,您需要执行以下一项操作:

  • /tmp的映射添加到PSP中的OS_VolumeTable,以将其映射到基础文件系统。
  • 使用已经具有映射关系的路径,例如上例中的/cf

希望这会有所帮助!