From b4d6315deab5c351646ddff496e4f5d39fd2af68 Mon Sep 17 00:00:00 2001 From: kamkow1 Date: Wed, 19 Nov 2025 15:54:17 +0100 Subject: [PATCH] Add FAT32 support --- kernel/vfs/vfs.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/kernel/vfs/vfs.c b/kernel/vfs/vfs.c index c4c7ebc..77d7f1f 100644 --- a/kernel/vfs/vfs.c +++ b/kernel/vfs/vfs.c @@ -104,6 +104,31 @@ int32_t vfs_init_fat16(VfsMountPoint *mp, bool format) { return E_OK; } +int32_t vfs_init_fat32(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", "FAT32 mount failed %d\n", err); + return E_MOUNTERR; + } + if (format) { + fatfs_format_fat32(&mp->fs.fatfs.instance, + &mp->fs.fatfs.instance._fs, + mp->backingsd->capacity(mp->backingsd) / FAT_SECTOR_SIZE, + "MOP2 FAT32" + ); + } + + 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) { VfsMountPoint *mp = NULL; @@ -188,6 +213,9 @@ int32_t vfs_mount(char *mountpoint, int32_t fstype, StoreDev *backingsd, bool fo case VFS_FAT16: err = vfs_init_fat16(mp, format); break; + case VFS_FAT32: + err = vfs_init_fat32(mp, format); + break; default: return E_UNKNOWN_FSTYPE; }