summaryrefslogtreecommitdiff
path: root/components/dfs/filesystems/devfs/devfs.c
diff options
context:
space:
mode:
Diffstat (limited to 'components/dfs/filesystems/devfs/devfs.c')
-rw-r--r--components/dfs/filesystems/devfs/devfs.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/components/dfs/filesystems/devfs/devfs.c b/components/dfs/filesystems/devfs/devfs.c
index 969c5d3321..1f4569558f 100644
--- a/components/dfs/filesystems/devfs/devfs.c
+++ b/components/dfs/filesystems/devfs/devfs.c
@@ -131,6 +131,7 @@ int dfs_device_fs_close(struct dfs_fd *file)
int dfs_device_fs_open(struct dfs_fd *file)
{
+ rt_err_t result;
rt_device_t device;
if (file->flags & DFS_O_CREAT)
@@ -186,9 +187,16 @@ int dfs_device_fs_open(struct dfs_fd *file)
if (device == RT_NULL)
return -DFS_STATUS_ENODEV;
- file->data = device;
-
- return DFS_STATUS_OK;
+ /* to open device */
+ result = rt_device_open(device, RT_DEVICE_OFLAG_RDWR);
+ if (result == RT_EOK || result == -RT_ENOSYS)
+ {
+ file->data = device;
+ return DFS_STATUS_OK;
+ }
+
+ /* open device failed. */
+ return -DFS_STATUS_EIO;
}
int dfs_device_fs_stat(struct dfs_filesystem *fs, const char *path, struct stat *st)