似乎我无法使用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,但似乎对我而言永远无效。
您知道与此相关的一些典型问题吗?。
答案 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
。希望这会有所帮助!