From 95f1448a371f563071a755b9ed507cd64d70ed5b Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Fri, 18 Apr 2025 09:18:55 +0200 Subject: kernel, boot: improvements and tweaks on the kernel's filesystems. - HeFS requires a 4gb disk at minimum now. - make_app fully supports STEPS. - Errata of NeFS.tex, add HeFS.tex. - Better boot flow. - New filesystems for FileMgr. Signed-off-by: Amlal El Mahrouss --- dev/boot/modules/BootNet/BootNet.cc | 2 +- dev/boot/src/HEL/AMD64/BootEFI.cc | 2 +- dev/boot/src/HEL/ARM64/BootEFI.cc | 2 +- dev/kernel/FSKit/Ext2.h | 40 ++++++++++++++++++-------------- dev/kernel/FSKit/HeFS.h | 7 +++++- dev/kernel/FirmwareKit/EFI/EFI.h | 30 ++++++++++++------------ dev/kernel/FirmwareKit/GPT.h | 4 ++-- dev/kernel/FirmwareKit/Handover.h | 16 ++++++------- dev/kernel/HALKit/AMD64/HalKernelMain.cc | 13 ++++++----- dev/kernel/HALKit/AMD64/Processor.h | 14 +++++------ dev/kernel/HALKit/ARM64/Processor.h | 2 +- dev/kernel/KernelKit/FileMgr.h | 10 +++----- dev/kernel/src/FS/Ext2+FileMgr.cc | 14 +++++++++++ dev/kernel/src/FS/HeFS+FileMgr.cc | 14 +++++++++++ dev/kernel/src/FS/NeFS+FileMgr.cc | 6 ++--- dev/user/SystemCalls.h | 4 ++++ 16 files changed, 109 insertions(+), 71 deletions(-) create mode 100644 dev/kernel/src/FS/Ext2+FileMgr.cc create mode 100644 dev/kernel/src/FS/HeFS+FileMgr.cc (limited to 'dev') diff --git a/dev/boot/modules/BootNet/BootNet.cc b/dev/boot/modules/BootNet/BootNet.cc index 050148c4..92f7aa7a 100644 --- a/dev/boot/modules/BootNet/BootNet.cc +++ b/dev/boot/modules/BootNet/BootNet.cc @@ -12,7 +12,7 @@ #include #include -STATIC EfiGUID kEfiSimpleProtoGUID = EFI_SIMPLE_NETWORK_PROTOCOL_GUID; +STATIC EfiGUID kEfiSimpleProtoGUID = EFI_SIMPLE_NETWORK_PROTOCOL_GUID; STATIC EFI_SIMPLE_NETWORK_PROTOCOL* kEfiProtocol = nullptr; STATIC Void bootnet_read_ip_packet(BOOTNET_INTERNET_HEADER); diff --git a/dev/boot/src/HEL/AMD64/BootEFI.cc b/dev/boot/src/HEL/AMD64/BootEFI.cc index 58f04491..b55cd3ef 100644 --- a/dev/boot/src/HEL/AMD64/BootEFI.cc +++ b/dev/boot/src/HEL/AMD64/BootEFI.cc @@ -226,7 +226,7 @@ EFI_EXTERN_C EFI_API Int32 BootloaderMain(EfiHandlePtr image_handle, handover_hdr->f_Magic = kHandoverMagic; handover_hdr->f_Version = kHandoverVersion; - handover_hdr->f_HardwareTables.f_ImageKey = map_key; + handover_hdr->f_HardwareTables.f_ImageKey = map_key; handover_hdr->f_HardwareTables.f_ImageHandle = image_handle; // Provide fimware vendor name. diff --git a/dev/boot/src/HEL/ARM64/BootEFI.cc b/dev/boot/src/HEL/ARM64/BootEFI.cc index 8008d846..e071def1 100644 --- a/dev/boot/src/HEL/ARM64/BootEFI.cc +++ b/dev/boot/src/HEL/ARM64/BootEFI.cc @@ -81,7 +81,7 @@ EFI_EXTERN_C EFI_API Int32 BootloaderMain(EfiHandlePtr image_handle, HEL::BootInfoHeader* handover_hdr = new HEL::BootInfoHeader(); - UInt32 map_key = 0; + UInt32 map_key = 0; #ifdef ZBA_USE_FB if (!boot_init_fb()) diff --git a/dev/kernel/FSKit/Ext2.h b/dev/kernel/FSKit/Ext2.h index 81b6853e..856654d6 100644 --- a/dev/kernel/FSKit/Ext2.h +++ b/dev/kernel/FSKit/Ext2.h @@ -6,31 +6,35 @@ #pragma once +#include +#include +#include #include +#include /// @file Ext2.h /// @brief EXT2 filesystem structures and constants. -#define kExt2FSMagic (0xEF53) -#define kExt2FSMaxFileNameLen (255U) -#define kExt2FSSuperblockOffset (1024) -#define kExt2FSRootInodeNumber (2) +#define kExt2FSMagic (0xEF53) +#define kExt2FSMaxFileNameLen (255U) +#define kExt2FSSuperblockOffset (1024) +#define kExt2FSRootInodeNumber (2) -#define kExt2FSInodeSize (128U) -#define kExt2FSBlockSizeBase (1024U) +#define kExt2FSInodeSize (128U) +#define kExt2FSBlockSizeBase (1024U) -#define kExt2FSRev0 (0) -#define kExt2FSRev1 (1) +#define kExt2FSRev0 (0) +#define kExt2FSRev1 (1) enum { - kExt2FileTypeUnknown = 0, - kExt2FileTypeRegular = 1, - kExt2FileTypeDirectory = 2, - kExt2FileTypeCharDevice = 3, - kExt2FileTypeBlockDevice = 4, - kExt2FileTypeFIFO = 5, - kExt2FileTypeSocket = 6, + kExt2FileTypeUnknown = 0, + kExt2FileTypeRegular = 1, + kExt2FileTypeDirectory = 2, + kExt2FileTypeCharDevice = 3, + kExt2FileTypeBlockDevice = 4, + kExt2FileTypeFIFO = 5, + kExt2FileTypeSocket = 6, kExt2FileTypeSymbolicLink = 7 }; @@ -91,7 +95,7 @@ struct PACKED EXT2_SUPER_BLOCK final Kernel::UInt32 fDefaultMountOpts; Kernel::UInt32 fFirstMetaBlockGroup; - Kernel::UInt8 fReserved[760]; // Padding to make 1024 bytes + Kernel::UInt8 fReserved[760]; // Padding to make 1024 bytes }; struct PACKED EXT2_INODE final @@ -113,10 +117,10 @@ struct PACKED EXT2_INODE final Kernel::UInt32 fGeneration; Kernel::UInt32 fFileACL; - Kernel::UInt32 fDirACL; // Only for revision 1+ + Kernel::UInt32 fDirACL; // Only for revision 1+ Kernel::UInt32 fFragmentAddr; - Kernel::UInt8 fOSD2[12]; + Kernel::UInt8 fOSD2[12]; }; struct PACKED EXT2_DIR_ENTRY final diff --git a/dev/kernel/FSKit/HeFS.h b/dev/kernel/FSKit/HeFS.h index cf1bebfc..92f396e9 100644 --- a/dev/kernel/FSKit/HeFS.h +++ b/dev/kernel/FSKit/HeFS.h @@ -6,7 +6,11 @@ #pragma once +#include +#include +#include #include +#include /// @file HeFS.h /// @brief HeFS filesystem support. @@ -18,9 +22,10 @@ #define kHeFSFileNameLen (256U) #define kHeFSPartNameLen (256U) -#define kHeFSMinimumDiskSize (mib_cast(256)) +#define kHeFSMinimumDiskSize (gib_cast(4)) struct HeFS_BOOT_NODE; +struct HeFS_INDEX_NODE; enum { diff --git a/dev/kernel/FirmwareKit/EFI/EFI.h b/dev/kernel/FirmwareKit/EFI/EFI.h index 24f474d1..2772582b 100644 --- a/dev/kernel/FirmwareKit/EFI/EFI.h +++ b/dev/kernel/FirmwareKit/EFI/EFI.h @@ -380,25 +380,25 @@ typedef UInt8 EfiMacAddress[32]; typedef struct { - UInt32 State; - UInt32 HwAddressSize; - UInt32 MediaHeaderSize; - UInt32 MaxPacketSize; - UInt32 NvRamSize; - UInt32 NvRamAccessSize; - UInt32 ReceiveFilterMask; - UInt32 ReceiveFilterSetting; - UInt32 MaxMCastFilterCount; - UInt32 MCastFilterCount; + UInt32 State; + UInt32 HwAddressSize; + UInt32 MediaHeaderSize; + UInt32 MaxPacketSize; + UInt32 NvRamSize; + UInt32 NvRamAccessSize; + UInt32 ReceiveFilterMask; + UInt32 ReceiveFilterSetting; + UInt32 MaxMCastFilterCount; + UInt32 MCastFilterCount; EfiMacAddress MCastFilter[MAX_MCAST_FILTER_CNT]; EfiMacAddress CurrentAddress; EfiMacAddress BroadcastAddress; EfiMacAddress PermanentAddress; - UInt8 IfType; - BOOL MacAddressChangeable; - BOOL MultipleTxSupported; - BOOL MediaPresentSupported; - BOOL MediaPresent; + UInt8 IfType; + BOOL MacAddressChangeable; + BOOL MultipleTxSupported; + BOOL MediaPresentSupported; + BOOL MediaPresent; } EFI_SIMPLE_NETWORK_MODE; typedef EFI_STATUS(EFIAPI* EFI_SIMPLE_NETWORK_TRANSMIT)( diff --git a/dev/kernel/FirmwareKit/GPT.h b/dev/kernel/FirmwareKit/GPT.h index 0515af8a..7ee5d10e 100644 --- a/dev/kernel/FirmwareKit/GPT.h +++ b/dev/kernel/FirmwareKit/GPT.h @@ -9,9 +9,9 @@ #include #include -#define kSectorAlignGPT_PartTbl (420U) +#define kSectorAlignGPT_PartTbl (420U) #define kSectorAlignGPT_PartEntry (72U) -#define kPartNameGPT (8U) +#define kPartNameGPT (8U) namespace Kernel { diff --git a/dev/kernel/FirmwareKit/Handover.h b/dev/kernel/FirmwareKit/Handover.h index 4ff04e6d..3a5e9e19 100644 --- a/dev/kernel/FirmwareKit/Handover.h +++ b/dev/kernel/FirmwareKit/Handover.h @@ -75,11 +75,11 @@ namespace Kernel::HEL struct { - VoidPtr f_SmBios; - VoidPtr f_VendorPtr; - VoidPtr f_MpPtr; - Bool f_MultiProcessingEnabled; - UInt32 f_ImageKey; + VoidPtr f_SmBios; + VoidPtr f_VendorPtr; + VoidPtr f_MpPtr; + Bool f_MultiProcessingEnabled; + UInt32 f_ImageKey; EfiHandlePtr f_ImageHandle; } f_HardwareTables; @@ -98,9 +98,9 @@ namespace Kernel::HEL enum { - kHandoverSpecificKind, - kHandoverSpecificAttrib, - kHandoverSpecificMemoryEfi, + kHandoverTableBS, + kHandoverTableST, + kHandoverTableCount, }; /// @brief Alias of bootloader main type. diff --git a/dev/kernel/HALKit/AMD64/HalKernelMain.cc b/dev/kernel/HALKit/AMD64/HalKernelMain.cc index b716279d..1d2689eb 100644 --- a/dev/kernel/HALKit/AMD64/HalKernelMain.cc +++ b/dev/kernel/HALKit/AMD64/HalKernelMain.cc @@ -4,7 +4,6 @@ ------------------------------------------- */ -#include "modules/CoreGfx/CoreGfx.h" #include #include #include @@ -19,12 +18,11 @@ #include #include - EXTERN_C Kernel::VoidPtr kInterruptVectorTable[]; EXTERN_C Kernel::VoidPtr mp_user_switch_proc; EXTERN_C Kernel::Char mp_user_switch_proc_stack_begin[]; -STATIC Kernel::Void hal_init_scheduler_team() +STATIC Kernel::Void hal_pre_init_scheduler() { for (Kernel::SizeT i = 0U; i < Kernel::UserProcessScheduler::The().CurrentTeam().AsArray().Count(); ++i) { @@ -52,8 +50,6 @@ EXTERN_C Int32 hal_init_platform( fw_init_efi((EfiSystemTable*)handover_hdr->f_FirmwareCustomTables[1]); Boot::ExitBootServices(handover_hdr->f_HardwareTables.f_ImageKey, handover_hdr->f_HardwareTables.f_ImageHandle); - hal_init_scheduler_team(); - /************************************** */ /* INITIALIZE BIT MAP. */ /************************************** */ @@ -92,6 +88,8 @@ EXTERN_C Int32 hal_init_platform( EXTERN_C Kernel::Void hal_real_init(Kernel::Void) noexcept { + hal_pre_init_scheduler(); + Kernel::NeFS::fs_init_nefs(); Kernel::HAL::mp_init_cores(kHandoverHeader->f_HardwareTables.f_VendorPtr); @@ -103,5 +101,8 @@ EXTERN_C Kernel::Void hal_real_init(Kernel::Void) noexcept idt_loader.Load(idt_reg); - dbg_break_point(); + while (YES) + { + ; + } } diff --git a/dev/kernel/HALKit/AMD64/Processor.h b/dev/kernel/HALKit/AMD64/Processor.h index b813e1d9..f2e9c2ea 100644 --- a/dev/kernel/HALKit/AMD64/Processor.h +++ b/dev/kernel/HALKit/AMD64/Processor.h @@ -68,13 +68,13 @@ namespace Kernel::HAL /// @brief Memory Manager mapping flags. enum { - kMMFlagsInvalid = 1 << 0, - kMMFlagsPresent = 1 << 1, - kMMFlagsWr = 1 << 2, - kMMFlagsUser = 1 << 3, - kMMFlagsNX = 1 << 4, - kMMFlagsPCD = 1 << 5, - kMMFlagsCount = 4, + kMMFlagsInvalid = 1 << 0, + kMMFlagsPresent = 1 << 1, + kMMFlagsWr = 1 << 2, + kMMFlagsUser = 1 << 3, + kMMFlagsNX = 1 << 4, + kMMFlagsPCD = 1 << 5, + kMMFlagsCount = 4, }; struct PACKED Register64 final diff --git a/dev/kernel/HALKit/ARM64/Processor.h b/dev/kernel/HALKit/ARM64/Processor.h index 4cead7ea..3a04bed1 100644 --- a/dev/kernel/HALKit/ARM64/Processor.h +++ b/dev/kernel/HALKit/ARM64/Processor.h @@ -28,7 +28,7 @@ namespace Kernel::HAL kMMFlagsWr = 1 << 1, kMMFlagsUser = 1 << 2, kMMFlagsNX = 1 << 3, - kMMFlagsPCD = 1 << 4, + kMMFlagsPCD = 1 << 4, kMMFlagsCount = 4, }; diff --git a/dev/kernel/KernelKit/FileMgr.h b/dev/kernel/KernelKit/FileMgr.h index 03e74ee8..e5f67080 100644 --- a/dev/kernel/KernelKit/FileMgr.h +++ b/dev/kernel/KernelKit/FileMgr.h @@ -21,13 +21,9 @@ #ifndef INC_FILEMGR_H #define INC_FILEMGR_H -#ifdef __FSKIT_INCLUDES_NEFS__ -#include -#endif // __FSKIT_INCLUDES_NEFS__ - -#ifdef __FSKIT_INCLUDES_HeFS__ +#include #include -#endif // __FSKIT_INCLUDES_HeFS__ +#include #include #include @@ -55,7 +51,7 @@ @note Refer to first enum. */ #define kFileOpsCount (4U) -#define kFileMimeGeneric "n-application-kind/all" +#define kFileMimeGeneric "ne-application-kind/all" /** @brief invalid position. (n-pos) */ #define kNPos (SizeT)(-1); diff --git a/dev/kernel/src/FS/Ext2+FileMgr.cc b/dev/kernel/src/FS/Ext2+FileMgr.cc new file mode 100644 index 00000000..cb17b587 --- /dev/null +++ b/dev/kernel/src/FS/Ext2+FileMgr.cc @@ -0,0 +1,14 @@ +/* ------------------------------------------- + + Copyright (C) 2024-2025, Amlal El Mahrouss, all rights reserved. + +------------------------------------------- */ + +#ifndef __NE_MINIMAL_OS__ +#ifdef __FSKIT_INCLUDES_EXT2__ + +#include +#include + +#endif // ifdef __FSKIT_INCLUDES_EXT2__ +#endif // ifndef __NE_MINIMAL_OS__ diff --git a/dev/kernel/src/FS/HeFS+FileMgr.cc b/dev/kernel/src/FS/HeFS+FileMgr.cc new file mode 100644 index 00000000..e6719e1b --- /dev/null +++ b/dev/kernel/src/FS/HeFS+FileMgr.cc @@ -0,0 +1,14 @@ +/* ------------------------------------------- + + Copyright (C) 2024-2025, Amlal El Mahrouss, all rights reserved. + +------------------------------------------- */ + +#ifndef __NE_MINIMAL_OS__ +#ifdef __FSKIT_INCLUDES_HEFS__ + +#include +#include + +#endif // ifdef __FSKIT_INCLUDES_HEFS__ +#endif // ifndef __NE_MINIMAL_OS__ diff --git a/dev/kernel/src/FS/NeFS+FileMgr.cc b/dev/kernel/src/FS/NeFS+FileMgr.cc index 0107bd9e..348ae61b 100644 --- a/dev/kernel/src/FS/NeFS+FileMgr.cc +++ b/dev/kernel/src/FS/NeFS+FileMgr.cc @@ -4,12 +4,12 @@ ------------------------------------------- */ -#include -#include - #ifndef __NE_MINIMAL_OS__ #ifdef __FSKIT_INCLUDES_NEFS__ +#include +#include + /// @brief NeFS File manager. /// BUGS: 0 diff --git a/dev/user/SystemCalls.h b/dev/user/SystemCalls.h index df91bc1e..cfbd99a8 100644 --- a/dev/user/SystemCalls.h +++ b/dev/user/SystemCalls.h @@ -60,6 +60,10 @@ IMPORT_C Ref IoOpenFile(const Char* fs_path, const Char* drive_letter); /// @return Function doesn't return a type. IMPORT_C Void IoCloseFile(_Input Ref file_desc); +/// @brief Gets the file mime (if any) +/// @param file_desc the file descriptor. +IMPORT_C const Char* IoMimeFile(_Input Ref file_desc); + /// @brief Write data to a file. /// @param file_desc the file descriptor. /// @param out_data the data to write. -- cgit v1.2.3