From 91d1e1d0f24c0ab3274043374881dd8f56297131 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rn=20Guldberg?= Date: Thu, 6 Jun 2019 13:59:24 +0000 Subject: [PATCH] Correct loading of master table from MBR --- lsfs_disk_controller.h | 51 +++++++++++++++++++++++++++++++---------- lsfs_fuse | Bin 30592 -> 36640 bytes lsfs_fuse.c | 20 ++++++++-------- lsfs_fuse.o | Bin 34672 -> 31344 bytes 4 files changed, 49 insertions(+), 22 deletions(-) diff --git a/lsfs_disk_controller.h b/lsfs_disk_controller.h index f42e156..edc51a9 100644 --- a/lsfs_disk_controller.h +++ b/lsfs_disk_controller.h @@ -46,6 +46,7 @@ int save_modified_file_information(lsfs_file* file); #define SECTOR_SIZE 512 +#define NUMBER_OF_MBR_PARTITIONS 4 #define DEFAULT_FILE_SIZE 4 // This is in sectors #define DEFAULT_MASTER_TABLE_SIZE 64 #define DEFAULT_TAG_TABLE_SIZE 64 // correspond to 262144 bytes in sectors - 16384 files pr. default. (minus one, the last is a pointer to a table more ) @@ -62,6 +63,23 @@ typedef struct struct_partition_control{ table_entry* master_table; } __attribute__((packed)) partition_control; +typedef struct Partition_Entry +{ + uint8_t active_falg; // This has value 0x80 if it is a bootable partition / it is an active partition. + uint8_t CHS_start_addr[3]; // [0] = H, [1] = S, [2] = C + uint8_t partition_type; // This has a value such that one can idenfity which file system the partition is. + uint8_t CHS_last_addr[3]; // [0] = H, [1] = S, [2] = C + uint32_t LBA_abs_first_sector; + uint32_t number_of_sectors; + +} __attribute__((packed)) Partition_Entry; + +typedef struct Master_Boot_record { + uint8_t offset_on_disk[446]; // The code for the bootloader + Partition_Entry partitions[4]; + uint8_t master_tag_records[2]; // Signature +} __attribute__((packed)) Master_Boot_record; + typedef struct File_System_Control_Information { uint64_t offset_on_disk; uint64_t next_partition; @@ -82,7 +100,7 @@ typedef struct struct_table_entry { struct { uint32_t is_filename : 1; } control_bits; - lsfs_sector_offset data_pointer[NUM_DATA_POINTERS] + lsfs_sector_offset data_pointer[NUM_DATA_POINTERS]; } __attribute__((packed)) table_entry; @@ -237,7 +255,6 @@ time_t lsfs_disk_truncate_file(lsfs_file *file, off_t offset) { //read_data_from_disk(file_id, &file_mif); time_t result = lsfs_disk_update_timestamps(file); - file->size = (int) offset; // p_control.master_table[i].data_pointer[0]; //; save_modified_file_information(file); @@ -515,16 +532,26 @@ int create_file_system() { } int lsfs_disk_load_disk() { - - // First we find the Mater Table. - fseek ( disk , 24 * SECTOR_SIZE, SEEK_SET ); - fread(p_control.master_table, 1, sizeof(table_entry) * DEFAULT_MASTER_TABLE_SIZE , disk); - - // Now we can finde the FSCI data - //fseek ( disk , 0, SEEK_SET ); - //fread(p_control.fsci, 1, sizeof(FSCI), disk); - - return 1; + // Find the partition talbe: + // This makes is BIOS dependent. + // UEFI is not supported. + Master_Boot_record mbr; + fseek( disk , 0 * SECTOR_SIZE, SEEK_SET ); + fread(&mbr, 1, sizeof(mbr), disk); + + for (int i = 0; i < NUMBER_OF_MBR_PARTITIONS; ++i) + { + // TODO (Jørn) We maybe wnat to optimize, such that we can detect if we have more than one partition opn the system. + if (mbr.partitions[i].partition_type == 0x18) + { + printf("%d\n", mbr.partitions[i].LBA_abs_first_sector); + // First we find the Mater Table. + fseek ( disk , mbr.partitions[i].LBA_abs_first_sector * SECTOR_SIZE, SEEK_SET ); + fread(p_control.master_table, 1, sizeof(table_entry) * DEFAULT_MASTER_TABLE_SIZE , disk); + return 1; + } + } + return 0; } diff --git a/lsfs_fuse b/lsfs_fuse index f69dac46f34c5f7881fd2c91c115dac6bac2011c..9247428123684d8cc133bdee1ea01f27bbb92d16 100755 GIT binary patch literal 36640 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 STl6QtcDLl1pCFI`8vhITAl2aj literal 30592 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 diff --git a/lsfs_fuse.c b/lsfs_fuse.c index 4676cfb..5bb2a5b 100644 --- a/lsfs_fuse.c +++ b/lsfs_fuse.c @@ -305,6 +305,7 @@ int lsfs_mknod(const char *path, mode_t mode, dev_t device) { end: lsfs_destroy_string_array(split_path); return res;*/ + return 0; } int main( int argc, char *argv[] ) { @@ -312,14 +313,13 @@ int main( int argc, char *argv[] ) { disk = fopen ("/home/rhodez-x/Documents/github/SingOS/SingOS.img", "r+b"); p_control.fsci = malloc(sizeof(FSCI)); p_control.master_table = malloc(sizeof(table_entry) * DEFAULT_MASTER_TABLE_SIZE); - lsfs_disk_load_disk(); - - //tag_record *tag_table = calloc(1, SECTOR_SIZE); - //mif* mif_data = calloc(1, SECTOR_SIZE); - - //free(mif_data); - //free(tag_table); - //free(seen_file_ids); - - return fuse_main( argc, argv, &lsfs_oper ); + if (lsfs_disk_load_disk()) + { + return fuse_main( argc, argv, &lsfs_oper ); + } + else + { + printf("[ERROR] - Correct file format not found \n"); + return 0; + } } diff --git a/lsfs_fuse.o b/lsfs_fuse.o index 0e79c22f9523e7de987244b3ff7c2d7c0939449c..148ceb9684ea5f8db386ea5520f24da454771d58 100644 GIT binary patch literal 31344 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 literal 34672 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 S?scSp`%EA}`7b40>;FGYLNXx$