mufs: initial support for mounting/formatting
This commit is contained in:
parent
e131d77cf5
commit
19cd9d185f
2 changed files with 59 additions and 0 deletions
12
include/fs/mufs.h
Normal file
12
include/fs/mufs.h
Normal file
|
@ -0,0 +1,12 @@
|
|||
#pragma once
|
||||
|
||||
struct flash_dev;
|
||||
|
||||
struct mufs {
|
||||
struct flash_dev *dev;
|
||||
uint32_t nblocks;
|
||||
uint32_t root;
|
||||
};
|
||||
|
||||
int mufs_mount(struct mufs *fs, struct flash_dev *dev);
|
||||
int mufs_format(struct flash_dev *dev);
|
47
source/fs/mufs/super.c
Normal file
47
source/fs/mufs/super.c
Normal file
|
@ -0,0 +1,47 @@
|
|||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <flash.h>
|
||||
|
||||
#include <fs/mufs.h>
|
||||
|
||||
struct mufs_super {
|
||||
char magic[4];
|
||||
uint32_t nblocks;
|
||||
uint32_t root;
|
||||
} __attribute__((packed));
|
||||
|
||||
int mufs_mount(struct mufs *fs, struct flash_dev *dev)
|
||||
{
|
||||
struct mufs_super super;
|
||||
|
||||
if (!fs || !dev)
|
||||
return -1;
|
||||
|
||||
if (flash_read(dev, 0, &super, sizeof super) == 0)
|
||||
return -1;
|
||||
|
||||
if (memcmp(super.magic, "mufs", 4) != 0)
|
||||
return -1;
|
||||
|
||||
fs->dev = dev;
|
||||
fs->nblocks = super.nblocks;
|
||||
fs->root = super.root;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int mufs_format(struct flash_dev *dev)
|
||||
{
|
||||
struct mufs_super super;
|
||||
|
||||
memcpy(super.magic, "mufs", 4);
|
||||
super.nblocks = flash_get_capacity(dev) >> dev->log2_block_size;
|
||||
super.root = 0;
|
||||
|
||||
if (flash_write(dev, 0, &super, sizeof super) == 0)
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Reference in a new issue