mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2026-11-06 02:40:45 +08:00
add flush, statfs, mkfs to device file system interface.
git-svn-id: https://rt-thread.googlecode.com/svn/trunk@802 bbd45198-f89e-11dd-88c7-29a3b14d5316
This commit is contained in:
1 parent
fd12462d57
commit
33feb176d0
12 files changed
+462
-1594
No files matched your search
@@ -4,11 +4,10 @@ Import('RTT_ROOT')
|
||||
Import('projects')
|
||||
|
||||
dfs = Split("""
|
||||
src/dfs.c
|
||||
src/dfs_fs.c
|
||||
src/dfs_init.c
|
||||
src/dfs_file.c
|
||||
src/dfs_posix.c
|
||||
src/dfs_raw.c
|
||||
src/dfs_util.c
|
||||
""")
|
||||
|
||||
# DFS-FatFs options
|
||||
|
||||
@@ -1,20 +1,18 @@
|
||||
/*
|
||||
+------------------------------------------------------------------------------
|
||||
| Device FileSystem
|
||||
+------------------------------------------------------------------------------
|
||||
| Copyright 2004, 2005 www.fayfayspace.org.
|
||||
| All rights reserved.
|
||||
|------------------------------------------------------------------------------
|
||||
| File : dfs_def.h, the definitions of Device FileSystem
|
||||
|------------------------------------------------------------------------------
|
||||
| Chang Logs:
|
||||
| Date Author notes
|
||||
| 2004-10-01 ffxz The first version.
|
||||
| 2004-10-14 ffxz Clean up the code.
|
||||
| 2005-01-22 ffxz Clean up the code, port to MinGW
|
||||
+------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
* File : dfs_def.h
|
||||
* This file is part of Device File System in RT-Thread RTOS
|
||||
* COPYRIGHT (C) 2004-2010, RT-Thread Development Team
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.rt-thread.org/license/LICENSE.
|
||||
*
|
||||
* Change Logs:
|
||||
* Date Author Notes
|
||||
* 2004-10-01 Beranard The first version.
|
||||
* 2004-10-14 Beranard Clean up the code.
|
||||
* 2005-01-22 Beranard Clean up the code, port to MinGW
|
||||
*/
|
||||
#ifndef __DFS_DEF_H__
|
||||
#define __DFS_DEF_H__
|
||||
|
||||
@@ -113,15 +111,6 @@
|
||||
#define DEVICE_FORMAT 2
|
||||
#define DEVICE_CLEAN_SECTOR 3
|
||||
|
||||
struct device_geometry
|
||||
{
|
||||
rt_uint32_t sector_count; /* count of sectors */
|
||||
rt_uint32_t cylinder_count; /* count of cylinder */
|
||||
rt_uint32_t sectors_per_track; /* number of sectors per track */
|
||||
rt_uint32_t head_count; /* count of head */
|
||||
rt_uint32_t bytes_per_sector; /* number of bytes per sector */
|
||||
};
|
||||
|
||||
struct dfs_stat
|
||||
{
|
||||
rt_device_t st_dev;
|
||||
@@ -130,7 +119,13 @@ struct dfs_stat
|
||||
rt_time_t st_mtime;
|
||||
rt_uint32_t st_blksize;
|
||||
};
|
||||
#define stat dfs_stat
|
||||
|
||||
struct dfs_statfs
|
||||
{
|
||||
rt_size_t f_bsize; /* block size */
|
||||
rt_size_t f_blocks; /* total data blocks in file system */
|
||||
rt_size_t f_bfree; /* free blocks in file system */
|
||||
};
|
||||
|
||||
/* File types */
|
||||
#define FT_REGULAR 0 /* regular file */
|
||||
@@ -141,7 +136,7 @@ struct dfs_stat
|
||||
/* file descriptor */
|
||||
struct dfs_fd
|
||||
{
|
||||
char path[DFS_PATH_MAX + 1];/* Name (below mount point) */
|
||||
char* path; /* Name (below mount point) */
|
||||
int type; /* Type (regular or socket) */
|
||||
int ref_count; /* Descriptor reference count */
|
||||
|
||||
@@ -162,14 +157,9 @@ struct dfs_dirent
|
||||
{
|
||||
rt_uint8_t d_type; /* The type of the file */
|
||||
rt_uint8_t d_namlen; /* The length of the not including the terminating null file name */
|
||||
rt_uint16_t d_reclen; /* length of this record */
|
||||
char d_name[256]; /* The null-terminated file name */
|
||||
rt_uint16_t d_reclen; /* length of this record */
|
||||
char d_name[DFS_PATH_MAX]; /* The null-terminated file name */
|
||||
};
|
||||
#define dirent dfs_dirent
|
||||
|
||||
struct dfs_session
|
||||
{
|
||||
rt_mailbox_t mbox;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -1,29 +0,0 @@
|
||||
/*
|
||||
+------------------------------------------------------------------------------
|
||||
| Project : Device Filesystem
|
||||
+------------------------------------------------------------------------------
|
||||
| Copyright 2004, 2005 www.fayfayspace.org.
|
||||
| All rights reserved.
|
||||
|------------------------------------------------------------------------------
|
||||
| File : dfs_fat.h, FAT 12/16/32 file system definitions
|
||||
|------------------------------------------------------------------------------
|
||||
| Chang Logs:
|
||||
| Date Author Notes
|
||||
| 2003-03-30 ffxz
|
||||
+------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef __DFS_FAT_H__
|
||||
#define __DFS_FAT_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
int fatfs_init(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -1,17 +1,16 @@
|
||||
/*
|
||||
+------------------------------------------------------------------------------
|
||||
| Project : Device Filesystem
|
||||
+------------------------------------------------------------------------------
|
||||
| Copyright 2004, 2005 www.fayfayspace.org.
|
||||
| All rights reserved.
|
||||
|------------------------------------------------------------------------------
|
||||
| File : dfs_fs.h, the filesystem related defines of Device FileSystem
|
||||
|------------------------------------------------------------------------------
|
||||
| Chang Logs:
|
||||
| Date Author Notes
|
||||
| 2005-02-22 ffxz The first version.
|
||||
+------------------------------------------------------------------------------
|
||||
*/
|
||||
* File : dfs_fs.h
|
||||
* This file is part of Device File System in RT-Thread RTOS
|
||||
* COPYRIGHT (C) 2004-2010, RT-Thread Development Team
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.rt-thread.org/license/LICENSE.
|
||||
*
|
||||
* Change Logs:
|
||||
* Date Author Notes
|
||||
* 2005-02-22 Bernard The first version.
|
||||
*/
|
||||
#ifndef __DFS_FS_H__
|
||||
#define __DFS_FS_H__
|
||||
|
||||
@@ -26,16 +25,22 @@ struct dfs_dirent;
|
||||
/* File system operations struct */
|
||||
struct dfs_filesystem_operation
|
||||
{
|
||||
char name[DFS_FS_NAME_MAX + 1];
|
||||
char *name;
|
||||
|
||||
/* mount and unmount file system */
|
||||
int (*mount) (struct dfs_filesystem* fs, unsigned long rwflag, const void* data);
|
||||
int (*unmount) (struct dfs_filesystem* fs);
|
||||
|
||||
int (*open) (struct dfs_fd* fd);
|
||||
/* make a file system */
|
||||
int (*mkfs) (const char* device_name);
|
||||
int (*statfs) (struct dfs_filesystem* fs, struct dfs_statfs *buf);
|
||||
|
||||
int (*open) (struct dfs_fd* fd);
|
||||
int (*close) (struct dfs_fd* fd);
|
||||
int (*ioctl) (struct dfs_fd* fd, int cmd, void *args);
|
||||
int (*read) (struct dfs_fd* fd, void* buf, rt_size_t count);
|
||||
int (*read) (struct dfs_fd* fd, void* buf, rt_size_t count);
|
||||
int (*write) (struct dfs_fd* fd, const void* buf, rt_size_t count);
|
||||
int (*flush) (struct dfs_fd* fd);
|
||||
int (*lseek) (struct dfs_fd* fd, rt_off_t offset);
|
||||
int (*getdents) (struct dfs_fd* fd, struct dfs_dirent* dirp, rt_uint32_t count);
|
||||
|
||||
@@ -47,13 +52,12 @@ struct dfs_filesystem_operation
|
||||
/* Mounted file system */
|
||||
struct dfs_filesystem
|
||||
{
|
||||
rt_device_t dev_id; /* Attached device */
|
||||
rt_device_t dev_id; /* Attached device */
|
||||
|
||||
char path[DFS_PATH_MAX + 1]; /* File system mount point */
|
||||
struct dfs_filesystem_operation* ops; /* Operations for file system type */
|
||||
rt_uint32_t block_id; /* Current block_id on attached device */
|
||||
char* path; /* File system mount point */
|
||||
const struct dfs_filesystem_operation* ops; /* Operations for file system type */
|
||||
|
||||
void *data; /* Specific file system data */
|
||||
void *data; /* Specific file system data */
|
||||
};
|
||||
|
||||
/* file system partition table */
|
||||
@@ -65,7 +69,7 @@ struct dfs_partition
|
||||
rt_sem_t lock;
|
||||
};
|
||||
|
||||
int dfs_register(struct dfs_filesystem_operation* ops);
|
||||
int dfs_register(const struct dfs_filesystem_operation* ops);
|
||||
struct dfs_filesystem* dfs_filesystem_lookup(const char *path);
|
||||
rt_err_t dfs_filesystem_get_partition(struct dfs_partition* part, rt_uint8_t* buf, rt_uint32_t pindex);
|
||||
|
||||
@@ -75,12 +79,13 @@ int dfs_mount(const char* device_name, const char* path,
|
||||
int dfs_unmount(const char *specialfile);
|
||||
|
||||
/* extern variable */
|
||||
extern struct dfs_filesystem_operation* filesystem_operation_table[];
|
||||
extern const struct dfs_filesystem_operation* filesystem_operation_table[];
|
||||
extern struct dfs_filesystem filesystem_table[];
|
||||
|
||||
extern char working_directory[];
|
||||
|
||||
void dfs_lock(void);
|
||||
void dfs_unlock(void);
|
||||
int dfs_statfs(const char* path, struct dfs_statfs* buffer);
|
||||
|
||||
#endif
|
||||
@@ -1,21 +1,21 @@
|
||||
/*
|
||||
+------------------------------------------------------------------------------
|
||||
| Project : Device Filesystem
|
||||
+------------------------------------------------------------------------------
|
||||
| Copyright 2004, 2005 www.fayfayspace.org.
|
||||
| All rights reserved.
|
||||
|------------------------------------------------------------------------------
|
||||
| File : dfs_posix.h, the filesystem related defines of Device FileSystem
|
||||
|------------------------------------------------------------------------------
|
||||
| Chang Logs:
|
||||
| Date Author Notes
|
||||
| 2009-05-27 Yi.qiu The first version.
|
||||
+------------------------------------------------------------------------------
|
||||
*/
|
||||
* File : dfs_def.h
|
||||
* This file is part of Device File System in RT-Thread RTOS
|
||||
* COPYRIGHT (C) 2004-2010, RT-Thread Development Team
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.rt-thread.org/license/LICENSE.
|
||||
*
|
||||
* Change Logs:
|
||||
* Date Author Notes
|
||||
* 2009-05-27 Yi.qiu The first version.
|
||||
* 2010-07-18 Bernard add stat and statfs structure definitions.
|
||||
*/
|
||||
#ifndef __DFS_POSIX_H__
|
||||
#define __DFS_POSIX_H__
|
||||
|
||||
#include <dfs_raw.h>
|
||||
#include <dfs_file.h>
|
||||
|
||||
#define O_RDONLY DFS_O_RDONLY
|
||||
#define O_WRONLY DFS_O_WRONLY
|
||||
@@ -74,6 +74,15 @@ typedef struct
|
||||
int cur;
|
||||
} DIR;
|
||||
|
||||
struct stat
|
||||
{
|
||||
struct dfs_stat parent;
|
||||
};
|
||||
struct statfs
|
||||
{
|
||||
struct dfs_statfs parent;
|
||||
};
|
||||
|
||||
/* file api*/
|
||||
int open(const char *file, int flags, int mode);
|
||||
int close(int d);
|
||||
@@ -83,6 +92,7 @@ int lseek(int fd, int offset, int dir);
|
||||
int rename(const char* old, const char* new );
|
||||
int unlink(const char *pathname);
|
||||
int stat(const char *file, struct dfs_stat *buf);
|
||||
int statfs(const char *path, struct dfs_statfs *buf);
|
||||
|
||||
/* directory api*/
|
||||
int mkdir (const char *path, rt_uint16_t mode);
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
/*
|
||||
+------------------------------------------------------------------------------
|
||||
| Project : Device Filesystem
|
||||
+------------------------------------------------------------------------------
|
||||
| Copyright 2004, 2005 www.fayfayspace.org.
|
||||
| All rights reserved.
|
||||
|------------------------------------------------------------------------------
|
||||
| File : dfs_raw.h, the raw APIs of Device FileSystem
|
||||
|------------------------------------------------------------------------------
|
||||
| Chang Logs:
|
||||
| Date Author Notes
|
||||
| 2005-01-26 ffxz The first version
|
||||
+------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef __DFS_RAW_H__
|
||||
#define __DFS_RAW_H__
|
||||
|
||||
#include <dfs_def.h>
|
||||
#include <dfs_fs.h>
|
||||
|
||||
int dfile_raw_open(struct dfs_fd* fd, const char *path, int flags);
|
||||
int dfile_raw_close(struct dfs_fd* fd);
|
||||
int dfile_raw_ioctl(struct dfs_fd* fd, int cmd, void *args);
|
||||
int dfile_raw_read(struct dfs_fd* fd, void *buf, rt_size_t len);
|
||||
int dfile_raw_getdents(struct dfs_fd* fd, struct dfs_dirent* dirp, rt_size_t nbytes);
|
||||
int dfile_raw_unlink(const char *path);
|
||||
int dfile_raw_write(struct dfs_fd* fd, const void *buf, rt_size_t len);
|
||||
int dfile_raw_lseek(struct dfs_fd* fd, rt_off_t offset);
|
||||
int dfile_raw_stat(const char *path, struct dfs_stat *buf);
|
||||
int dfile_raw_rename(const char* oldpath, const char* newpath);
|
||||
|
||||
/* FD APIs */
|
||||
int fd_new(void);
|
||||
struct dfs_fd* fd_get(int fd);
|
||||
void fd_put(struct dfs_fd* fd);
|
||||
|
||||
#endif
|
||||
@@ -1,36 +0,0 @@
|
||||
/*
|
||||
+------------------------------------------------------------------------------
|
||||
| Project : Device Filesystem
|
||||
+------------------------------------------------------------------------------
|
||||
| Copyright 2004, 2005 www.fayfayspace.org.
|
||||
| All rights reserved.
|
||||
|------------------------------------------------------------------------------
|
||||
| File : dfs_util.h, some misc definitions of Device FileSystem
|
||||
|------------------------------------------------------------------------------
|
||||
| Chang Logs:
|
||||
| Date Author Notes
|
||||
| 2005-01-26 ffxz The first version
|
||||
+------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef __DFS_UTIL_H__
|
||||
#define __DFS_UTIL_H__
|
||||
|
||||
#include <dfs_def.h>
|
||||
|
||||
int dir_name(const char* path, char* dirname, int len);
|
||||
int file_name(const char* path, char* filename, int len);
|
||||
|
||||
int next_dir_name(const char* path, int pos, char* next);
|
||||
void build_fullpath(const char *directory, const char *filename, char *fullpath);
|
||||
int str_is_prefix(const char* prefix, const char* str);
|
||||
|
||||
#if !defined(RT_USING_MINILIBC) && !defined(RT_USING_NEWLIB)
|
||||
char *strrchr(const char *t, int c);
|
||||
#if defined (__ARMCC_VERSION) && (__ARMCC_VERSION / 10000 < 35)
|
||||
#include <stddef.h>
|
||||
int strncasecmp(const char* s1, const char* s2, size_t len);
|
||||
#endif /* end of __ARMCC_VERSION */
|
||||
#endif
|
||||
|
||||
#endif
|
||||
+151
-102
File diff suppressed because it is too large.
Load diff
@@ -1,84 +0,0 @@
|
||||
/*
|
||||
+------------------------------------------------------------------------------
|
||||
| Project : Device Filesystem
|
||||
+------------------------------------------------------------------------------
|
||||
| Copyright 2004, 2005 www.fayfayspace.org.
|
||||
| All rights reserved.
|
||||
|------------------------------------------------------------------------------
|
||||
| File : dfs.c, the implementation of Device FileSystem
|
||||
|------------------------------------------------------------------------------
|
||||
| Chang Logs:
|
||||
| Date Author Notes
|
||||
| 2002-12-31 ffxz The first version.
|
||||
| 2005-01-22 ffxz Clean up the code.
|
||||
+------------------------------------------------------------------------------
|
||||
*/
|
||||
#include <dfs_def.h>
|
||||
#include <dfs_config.h>
|
||||
|
||||
#include <dfs_fs.h>
|
||||
#include <dfs_raw.h>
|
||||
|
||||
#include <string.h>
|
||||
|
||||
/* Global variables */
|
||||
struct dfs_filesystem_operation* filesystem_operation_table[DFS_FILESYSTEM_TYPES_MAX + 1];
|
||||
struct dfs_filesystem filesystem_table[DFS_FILESYSTEMS_MAX + 1];
|
||||
|
||||
/* device filesystem lock */
|
||||
struct rt_mutex dlock;
|
||||
|
||||
#ifdef DFS_USING_WORKDIR
|
||||
char working_directory[DFS_PATH_MAX + 1];
|
||||
#endif
|
||||
|
||||
#ifdef DFS_USING_STDIO
|
||||
struct dfs_fd fd_table[3 + DFS_FD_MAX];
|
||||
#else
|
||||
struct dfs_fd fd_table[DFS_FD_MAX];
|
||||
#endif
|
||||
|
||||
/*
|
||||
+------------------------------------------------------------------------------
|
||||
| Function : dfs_init
|
||||
+------------------------------------------------------------------------------
|
||||
| Description : Inits the Device Filesystem
|
||||
| Parameters : null
|
||||
| Returns : null
|
||||
+------------------------------------------------------------------------------
|
||||
*/
|
||||
void dfs_init()
|
||||
{
|
||||
int index;
|
||||
|
||||
/* clear filesystem operations table */
|
||||
for (index = 0; index < DFS_FILESYSTEM_TYPES_MAX + 1; index++)
|
||||
filesystem_operation_table[index] = RT_NULL;
|
||||
|
||||
/* create device filesystem lock */
|
||||
rt_mutex_init(&dlock, "dlock", RT_IPC_FLAG_FIFO);
|
||||
|
||||
/* clear filesystem table */
|
||||
rt_memset(filesystem_table, 0, sizeof(filesystem_table));
|
||||
|
||||
#ifdef DFS_USING_WORKDIR
|
||||
/* set current working directory */
|
||||
strcpy(working_directory, "/");
|
||||
#endif
|
||||
|
||||
/* clean fd table */
|
||||
rt_memset(fd_table, 0, sizeof(fd_table));
|
||||
}
|
||||
|
||||
void dfs_lock()
|
||||
{
|
||||
rt_err_t result;
|
||||
|
||||
result = rt_mutex_take(&dlock, RT_WAITING_FOREVER);
|
||||
RT_ASSERT(result == RT_EOK);
|
||||
}
|
||||
|
||||
void dfs_unlock()
|
||||
{
|
||||
rt_mutex_release(&dlock);
|
||||
}
|
||||
+233
-252
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
Reference in new issue
Block a user