Emmanuel Blot wrote: >> 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. Did you manage to get YAFFS running, e.g. create a file? Then, I am extremely interested in your "VFS" implementation. Rutger > 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 > > >