Port fat_io_lib, mount atasd0mp1 as sys:

This commit is contained in:
2025-11-19 15:50:00 +01:00
parent 5d77974586
commit 0cc78a7247
35 changed files with 7071 additions and 7 deletions

View File

@ -4,6 +4,10 @@
#include "spinlock/spinlock.h"
#include "util/util.h"
#include "fs/portlfs/portlfs.h"
#include "fs/portfatfs/portfatfs.h"
#include "fs/fatfs/fat_filelib.h"
#include "fs/fatfs/fat_format.h"
#include "fs/fatfs/fat_opts.h"
#include "storedev/storedev.h"
#include "baseimg/baseimg.h"
#include "dlmalloc/malloc.h"
@ -36,7 +40,7 @@ VfsBusyObjs VFS_BUSY_VOBJS;
\
dlfree(tmpbuf);
void vfs_init_littlefs(VfsMountPoint *mp, bool format) {
int32_t vfs_init_littlefs(VfsMountPoint *mp, bool format) {
struct lfs_config *cfg = dlmalloc(sizeof(*cfg));
memset(cfg, 0, sizeof(*cfg));
cfg->context = mp;
@ -63,6 +67,7 @@ void vfs_init_littlefs(VfsMountPoint *mp, bool format) {
int err = lfs_mount(&mp->fs.littlefs.instance, cfg);
if (err < 0) {
ERR("vfs", "Little FS mount failed %d\n", err);
return E_MOUNTERR;
}
mp->cleanup = &littlefs_cleanup;
@ -71,6 +76,32 @@ void vfs_init_littlefs(VfsMountPoint *mp, bool format) {
mp->fetchdirent = &littlefs_fetchdirent;
mp->mkdir = &littlefs_mkdir;
mp->delete = &littlefs_delete;
return E_OK;
}
int32_t vfs_init_fat16(VfsMountPoint *mp, bool format) {
mp->fs.fatfs.instance.extra = mp;
fl_init(&mp->fs.fatfs.instance);
int err = fl_attach_media(&mp->fs.fatfs.instance, &portfatfs_diskio_read, &portfatfs_diskio_write);
if (err != FAT_INIT_OK) {
ERR("vfs", "FAT16 mount failed %d\n", err);
return E_MOUNTERR;
}
if (format) {
fatfs_format_fat16(&mp->fs.fatfs.instance,
&mp->fs.fatfs.instance._fs,
mp->backingsd->capacity(mp->backingsd) / FAT_SECTOR_SIZE,
"MOP2 FAT16"
);
}
mp->cleanup = &fatfs_cleanup;
mp->open = &fatfs_open;
mp->stat = &fatfs_stat;
mp->fetchdirent = &fatfs_fetchdirent;
mp->mkdir = &fatfs_mkdir;
mp->delete = &fatfs_delete;
return E_OK;
}
int32_t vfs_stat(char *mountpoint, const char *path, FsStat *stat) {
@ -149,15 +180,19 @@ int32_t vfs_mount(char *mountpoint, int32_t fstype, StoreDev *backingsd, bool fo
memcpy(mp->label, mountpoint, strlen(mountpoint));
mp->backingsd = backingsd;
mp->fstype = fstype;
int32_t err;
switch (fstype) {
case VFS_LITTLEFS:
vfs_init_littlefs(mp, format);
err = vfs_init_littlefs(mp, format);
break;
case VFS_FAT16:
err = vfs_init_fat16(mp, format);
break;
default:
return E_UNKNOWN_FSTYPE;
}
return E_OK;
return err != E_OK ? err : E_OK;
}
int32_t vfs_unmount(char *mountpoint) {