Re: [Yaffs] YAFFS2 in eCOS

Top Page
Attachments:
Message as email
+ (text/plain)
Delete this message
Reply to this message
Author: Emmanuel Blot
Date:  
To: Rutger Hofman
CC: yaffs
Subject: Re: [Yaffs] YAFFS2 in eCOS
> Hmmm... I am writing/debugging a YAFFS interface layer to get it known as an
> eCos filesystem. Did you also do that? Is there a way that we can share code
> and/or work? Our intention is to fully feed the NAND Flash layer and YAFFS2
> filesystem interface to eCos.


I don't see why we could not :-)
The back end (NAND vs. SPI flash) is different, but this is not
relevant for the eCos "VFS" API - I mean the triplet (filesystem op,
file op, directory op) functions (see below)

I have virtually no time to work on this implementation right now, but
it does not mean I could not post the code somewhere, for sure.

Cheers,
Manu

The eCos API for YAFFS2:

// --- Filesystem operations ---
static int yaffs2_fs_mount(cyg_fstab_entry * fste, cyg_mtab_entry * mte);
static int yaffs2_fs_umount(cyg_mtab_entry * mte);
static int yaffs2_fs_open(cyg_mtab_entry * mte,
                          cyg_dir dir, const char * path, int oflag,
                          cyg_file * file);
static int yaffs2_fs_unlink(cyg_mtab_entry * mte,
                            cyg_dir dir, const char * path);
static int yaffs2_fs_mkdir(cyg_mtab_entry * mte,
                           cyg_dir dir, const char * path);
static int yaffs2_fs_rmdir(cyg_mtab_entry * mte,
                           cyg_dir dir, const char * path);
static int yaffs2_fs_rename(cyg_mtab_entry * mte,
                            cyg_dir sdir, const char * spath,
                            cyg_dir ddir, const char * dpath);
static int yaffs2_fs_link(cyg_mtab_entry * mte,
                          cyg_dir sdir, const char * spath,
                          cyg_dir ddir, const char * dpath, int type);
static int yaffs2_fs_opendir(cyg_mtab_entry * mte,
                             cyg_dir dir, const char * path, cyg_file * fte);
static int yaffs2_fs_chdir(cyg_mtab_entry * mte,
                           cyg_dir dir, const char * path, cyg_dir * dir_out);
static int yaffs2_fs_stat(cyg_mtab_entry * mte,
                          cyg_dir dir, const char * name, struct stat * buf);
static int yaffs2_fs_getinfo(cyg_mtab_entry * mte,
                             cyg_dir dir, const char * path,
                             int key, void * buf, int len);
static int yaffs2_fs_setinfo(cyg_mtab_entry * mte,
                             cyg_dir dir, const char * path,
                             int key, void * buf, int len);


// --- File operations ---
static int yaffs2_fo_read(struct CYG_FILE_TAG * fp, struct CYG_UIO_TAG * uio);
static int yaffs2_fo_write(struct CYG_FILE_TAG * fp, struct CYG_UIO_TAG * uio);
static int yaffs2_fo_lseek(struct CYG_FILE_TAG * fp, off_t * pos, int whence);
static int yaffs2_fo_ioctl(struct CYG_FILE_TAG * fp, CYG_ADDRWORD com,
                           CYG_ADDRWORD data);
static int yaffs2_fo_fsync(struct CYG_FILE_TAG * fp, int mode);
static int yaffs2_fo_close(struct CYG_FILE_TAG * fp);
static int yaffs2_fo_fstat(struct CYG_FILE_TAG * fp, struct stat * buf);
static int yaffs2_fo_getinfo(struct CYG_FILE_TAG * fp, int key, void * buf,
                             int len);
static int yaffs2_fo_setinfo(struct CYG_FILE_TAG * fp, int key, void * buf,
                             int len);


// --- Directory operations ---
static int yaffs2_fo_readdir(struct CYG_FILE_TAG * fp,
                             struct CYG_UIO_TAG * uio);
static int yaffs2_fo_seekdir(struct CYG_FILE_TAG * fp, off_t * pos,
                              int whence);
static int yaffs2_fo_closedir(struct CYG_FILE_TAG * fp);


// --- Helpers ---
static yaffs_Object * yaffs2_lookup_dir(yaffs_Object * start, const
char * path,
                                        const char ** name, int symdepth);
static yaffs_Object * yaffs2_lookup_object(yaffs_Object * reldir,
                                           const char * path, int symdepth);
static yaffs_Object * yaffs2_follow_link(yaffs_Object *obj, int symdepth);


static int yaffs2_fs_pathconf(struct cyg_pathconf_info * info);
#ifdef CYGSEM_FILEIO_INFO_DISK_USAGE
static int yaffs2_fs_disk_usage(cyg_mtab_entry * mte,
                                struct cyg_fs_disk_usage * disk_usage);
#endif // CYGSEM_FILEIO_INFO_DISK_USAGE




--
Manu