Automount initial steps

This commit is contained in:
Wiesner András 2023-11-11 06:39:21 +01:00
parent 8b8dcbe170
commit af2db137f9
8 changed files with 67 additions and 10 deletions

View File

@ -12,4 +12,7 @@ add_library(embpart embpart.c
MassStorage.c
MassStorage.h
file_interface.c
file_interface.h)
file_interface.h
mount/mount.c
mount/mount.h
fs/fs_driver.h)

View File

@ -1,7 +1,3 @@
//
// Created by epagris on 2023.09.28..
//
#include <memory.h>
#include <stdbool.h>
#include "fat32.h"
@ -654,4 +650,8 @@ uint32_t fat32_read_file_stream(const Fat32_CtrlBlock *ctrl, Fat32_FileHelper *f
}
return read_len;
}
}
// ----------------------
Fs_Driver fat32_driver = { (fs_drv_open) fat32_open_file };

View File

@ -6,6 +6,7 @@
#ifdef __linux
#include <stdio.h>
#include "../../MassStorage.h"
#include "../fs_driver.h"
#define MSG(...) printf(__VA_ARGS__)
#endif
@ -100,12 +101,14 @@ typedef struct {
} Fat32_SeekHint;
typedef struct {
const Fat32_CtrlBlock * ctrl; // pointer FAT32 control block
const Fat32_CtrlBlock * ctrl; // pointer to FAT32 control block
Fat32_SeekHint last_pos; // last read position
uint32_t entry_ba; // FileEntry byte address on the mass storage
uint32_t size; // file size
} Fat32_FileHelper;
extern Fs_Driver fat32_driver;
int fat32_load(Fat32_CtrlBlock *ctrl, uint32_t bpb_s, const MassStorage * mstg);
int fat32_list_dir(const Fat32_CtrlBlock *ctrl, const char * dir);
@ -120,4 +123,5 @@ uint32_t fat32_seek_stream(const Fat32_CtrlBlock *ctrl, uint32_t pos, Fat32_File
uint32_t fat32_read_file_stream(const Fat32_CtrlBlock *ctrl, Fat32_FileHelper *file_helper, uint32_t len, uint8_t *p);
#endif //EMBPART_FAT32_H

15
fs/fs_driver.h Normal file
View File

@ -0,0 +1,15 @@
#ifndef EMBPART_FS_DRIVER_H
#define EMBPART_FS_DRIVER_H
typedef int (*fs_drv_open)(const void * ctrl, const char * path, void * file);
typedef int (*fs_drv_seek)(const void * ctrl, void * file, unsigned long pos);
typedef int (*fs_drv_read)(const void * ctrl, void * file, unsigned long len, void * buf);
// File system driver
typedef struct {
fs_drv_open open;
fs_drv_seek seek;
fs_drv_read read;
} Fs_Driver;
#endif //EMBPART_FS_DRIVER_H

View File

@ -1,7 +1,18 @@
#include "mbr.h"
#include <stddef.h>
#define MBR_PART_TABLE_OFFSET (446)
#define MBR_BOOT_SIGNATURE_OFFSET (510)
#define MBR_BOOT_SIGNATURE0 (0x55)
#define MBR_BOOT_SIGNATURE1 (0xAA)
const PartEntry *mbr_get_partitions(const uint8_t *mbr_sec) {
return (PartEntry *)(mbr_sec + MBR_PART_TABLE_OFFSET);
}
// check if disk is MBR type
if ((mbr_sec[MBR_BOOT_SIGNATURE_OFFSET] != MBR_BOOT_SIGNATURE0) ||
(mbr_sec[MBR_BOOT_SIGNATURE_OFFSET + 1] != MBR_BOOT_SIGNATURE1)) {
return NULL; // if not
} else {
return (PartEntry *) (mbr_sec + MBR_PART_TABLE_OFFSET); // if it is
}
}

View File

@ -12,7 +12,7 @@ typedef struct {
uint8_t chsa_la[3]; // CHS address of last absolute sector in partition
uint32_t lba_fa; // LBA of first absolute sector
uint32_t sector_count; // number of sectors the partition includes
} PartEntry;
} __attribute__((packed)) PartEntry;
/**
* Get pointer to partition table

5
mount/mount.c Normal file
View File

@ -0,0 +1,5 @@
#include "mount.h"
int mnt_automount_disk() {
}

19
mount/mount.h Normal file
View File

@ -0,0 +1,19 @@
#ifndef EMBPART_MOUNT_H
#define EMBPART_MOUNT_H
#include <stdint.h>
#define MNT_MAX_MOUNTED_VOLUMES (4)
#define MNT_MAX_MOUNT_NAME_LENGTH (15)
typedef struct {
void * fs_control_block; // pointer to file system control block
uint32_t part_size; // partition size
char mnt_name[MNT_MAX_MOUNT_NAME_LENGTH + 1]; // name of the mount
} Mnt_MountEntry;
typedef struct {
Mnt_MountEntry vols[MNT_MAX_MOUNTED_VOLUMES]; // volume slots
} Mnt_MountTable;
#endif //EMBPART_MOUNT_H