From ce607a045293b07aa99e60f29fae6b3a00a94148 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wiesner=20Andr=C3=A1s?= Date: Thu, 28 Sep 2023 10:00:34 +0200 Subject: [PATCH] initial --- CMakeLists.txt | 9 +++++++++ embpart.c | 7 +++++++ embpart.h | 6 ++++++ mbr/mbr.c | 7 +++++++ mbr/mbr.h | 24 ++++++++++++++++++++++++ 5 files changed, 53 insertions(+) create mode 100644 CMakeLists.txt create mode 100644 embpart.c create mode 100644 embpart.h create mode 100644 mbr/mbr.c create mode 100644 mbr/mbr.h diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..fa3c453 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,9 @@ +cmake_minimum_required(VERSION 3.22) +project(libembpart C) + +set(CMAKE_C_STANDARD 11) + +add_library(embpart embpart.c + mbr/mbr.c + mbr/mbr.h + ../test/main.c) \ No newline at end of file diff --git a/embpart.c b/embpart.c new file mode 100644 index 0000000..f9142a2 --- /dev/null +++ b/embpart.c @@ -0,0 +1,7 @@ +#include "embpart.h" + +#include + +void hello(void) { + printf("Hello, World!\n"); +} diff --git a/embpart.h b/embpart.h new file mode 100644 index 0000000..ea64aed --- /dev/null +++ b/embpart.h @@ -0,0 +1,6 @@ +#ifndef EMBPART_EMBPART_H +#define EMBPART_EMBPART_H + +#include "mbr/mbr.h" + +#endif //EMBPART_EMBPART_H diff --git a/mbr/mbr.c b/mbr/mbr.c new file mode 100644 index 0000000..9c0303c --- /dev/null +++ b/mbr/mbr.c @@ -0,0 +1,7 @@ +#include "mbr.h" + +#define MBR_PART_TABLE_OFFSET (446) + +const PartEntry *mbr_get_partitions(const uint8_t *mbr_sec) { + return (PartEntry *)(mbr_sec + MBR_PART_TABLE_OFFSET); +} diff --git a/mbr/mbr.h b/mbr/mbr.h new file mode 100644 index 0000000..1dda15e --- /dev/null +++ b/mbr/mbr.h @@ -0,0 +1,24 @@ +#ifndef EMBPART_MBR_H +#define EMBPART_MBR_H + +#include + +// partition entry + +typedef struct { + uint8_t status; // partition status + uint8_t chsa_fa[3]; // CHS address of first absolute sector in partition + uint8_t part_type; // partition type + 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; + +/** + * Get pointer to partition table + * @param mbr_sec pointer to the sector containing the MBR, MUST BE DWORD ALIGNED + * @return pointer to first partition entry + */ +const PartEntry * mbr_get_partitions(const uint8_t * mbr_sec); + +#endif //EMBPART_MBR_H