diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2025-03-27 20:35:24 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@nekernel.org> | 2025-03-27 20:35:24 +0100 |
| commit | a3da0eaaf7569948f83c65ff7997c4d1fc868603 (patch) | |
| tree | 735b9feba07568c802365169761efe0bc730f16b /dev/boot | |
| parent | e263653c2c1d1858827ac45061ecaefd9047fbb2 (diff) | |
BootZ: Introduce NetBoot module & consolidate STANDALONE macro
- Renamed __BOOTLDR_STANDALONE__ → __BOOTZ_STANDALONE__ across all modules.
- Introduced NetBoot module to support fallback booting via packets.
- Updated amd64-desktop build to bundle netboot.sys as part of system image.
- NetBoot now properly zeroes out its header and performs sanity check on PatchLength.
- Boot flow now attempts to fallback to NetBoot if neoskrnl.exe fails to start.
- Reorganized disk formatting logic for clarity and better failure recovery.
- HeFS & NeFS minimum disk size lowered (64GiB → 256MiB and 4GiB → 8MiB).
- Renamed `IndexProperty` to `Index` in FSKit::Indexer.
- Moved HintKit → hint/, updated includes and guards.
- Removed deprecated LPC.{cc,h}, replaced by ProcessCodes.h.
- Modernized SystemCalls.h typedefs: SCIObject → Ref, ThreadObject → ThreadRef, etc.
- Updated userland tools `make_app` and `open` with copyright and behavior fixes.
This prepares the BootZ infrastructure for headless/network environments.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'dev/boot')
| -rw-r--r-- | dev/boot/amd64-desktop.make | 7 | ||||
| -rw-r--r-- | dev/boot/arm64-desktop.make | 4 | ||||
| -rw-r--r-- | dev/boot/arm64-mobile.make | 4 | ||||
| -rw-r--r-- | dev/boot/modules/NetBoot/Boot.S | 10 | ||||
| -rw-r--r-- | dev/boot/modules/NetBoot/NetBoot.cc | 8 | ||||
| -rw-r--r-- | dev/boot/modules/NetBoot/amd64.json | 4 | ||||
| -rw-r--r-- | dev/boot/modules/SysChk/amd64.json | 4 | ||||
| -rw-r--r-- | dev/boot/modules/SysChk/arm64.json | 2 | ||||
| -rw-r--r-- | dev/boot/src/BootSupport.cc | 2 | ||||
| -rw-r--r-- | dev/boot/src/HEL/AMD64/BootEFI.cc | 63 | ||||
| -rw-r--r-- | dev/boot/src/HEL/AMD64/BootPlatform.cc | 4 | ||||
| -rw-r--r-- | dev/boot/src/HEL/ARM64/BootPlatform.cc | 4 | ||||
| -rw-r--r-- | dev/boot/src/New+Delete.cc | 4 |
13 files changed, 67 insertions, 53 deletions
diff --git a/dev/boot/amd64-desktop.make b/dev/boot/amd64-desktop.make index 5a827643..9e47788c 100644 --- a/dev/boot/amd64-desktop.make +++ b/dev/boot/amd64-desktop.make @@ -60,7 +60,7 @@ endif LD_FLAGS=-e Main --subsystem=10 -STANDALONE_MACRO=-D__BOOTLDR_STANDALONE__ +STANDALONE_MACRO=-D__BOOTZ_STANDALONE__ OBJ=*.o REM=rm @@ -74,7 +74,7 @@ FLAG_GNU=-fshort-wchar -D__EFI_x86_64__ -mno-red-zone -D__NEOSKRNL__ -D__BOOTZ__ BOOTLOADER=bootz.exe KERNEL=neoskrnl.exe SYSCHK=syschk.sys -STARTUP=startup.sys +NETBOOT=netboot.sys SCIKIT=libuser.dylib .PHONY: invalid-recipe @@ -90,13 +90,14 @@ all: compile-amd64 $(COPY) src/$(BOOTLOADER) src/Root/EFI/BOOT/BOOTZ.EFI $(COPY) ../kernel/$(KERNEL) src/Root/$(KERNEL) $(COPY) ./modules/SysChk/$(SYSCHK) src/Root/$(SYSCHK) + $(COPY) ./modules/NetBoot/$(NETBOOT) src/Root/$(NETBOOT) $(COPY) ../user/$(SCIKIT) src/Root/$(SCIKIT) $(COPY) src/$(BOOTLOADER) src/Root/$(BOOTLOADER) .PHONY: disk disk: dd if=/dev/zero of=$(BOOT) bs=30M count=100 - mformat -i $(BOOT) -F -v "NEOS_ESP" + mformat -i $(BOOT) -F -v "NeKernel" ifneq ($(DEBUG_SUPPORT), ) diff --git a/dev/boot/arm64-desktop.make b/dev/boot/arm64-desktop.make index 5b38d46c..72708c3f 100644 --- a/dev/boot/arm64-desktop.make +++ b/dev/boot/arm64-desktop.make @@ -36,7 +36,7 @@ EMU_FLAGS=-net none -smp 4 -m 8G -cpu max -M virt \ LD_FLAGS=-subsystem:efi_application -entry:Main /nodefaultlib -STANDALONE_MACRO=-D__BOOTLDR_STANDALONE__ +STANDALONE_MACRO=-D__BOOTZ_STANDALONE__ OBJ=*.o REM=rm @@ -45,7 +45,7 @@ REM_FLAG=-f FLAG_ASM=-f win64 FLAG_GNU=-fshort-wchar -c -ffreestanding -MMD -mno-red-zone -D__NE_ARM64__ -fno-rtti -fno-exceptions -I./ \ -target aarch64-unknown-windows \ - -std=c++20 -DBOOTZ_EPM_SUPPORT -DZBA_USE_FB -D__FSKIT_USE_NEFS__ -D__BOOTLDR_STANDALONE__ -D__NEOSKRNL__ -D__BOOTZ__ -D__HAVE_NE_APIS__ -D__NE__ -I../ -I../kernel + -std=c++20 -DBOOTZ_EPM_SUPPORT -DZBA_USE_FB -D__FSKIT_USE_NEFS__ -D__BOOTZ_STANDALONE__ -D__NEOSKRNL__ -D__BOOTZ__ -D__HAVE_NE_APIS__ -D__NE__ -I../ -I../kernel BOOT_LOADER=bootz.exe KERNEL=neoskrnl.exe diff --git a/dev/boot/arm64-mobile.make b/dev/boot/arm64-mobile.make index 485bfed0..274a29cb 100644 --- a/dev/boot/arm64-mobile.make +++ b/dev/boot/arm64-mobile.make @@ -37,7 +37,7 @@ EMU_FLAGS=-net none -smp 4 -m 8G -cpu max -M virt-9.1 \ LD_FLAGS=-subsystem:efi_application -entry:Main /nodefaultlib -STANDALONE_MACRO=-D__BOOTLDR_STANDALONE__ +STANDALONE_MACRO=-D__BOOTZ_STANDALONE__ OBJ=*.o REM=rm @@ -46,7 +46,7 @@ REM_FLAG=-f FLAG_ASM=-f win64 FLAG_GNU=-fshort-wchar -c -ffreestanding -MMD -mno-red-zone -D__NE_ARM64__ -fno-rtti -fno-exceptions -I./ \ -target aarch64-unknown-windows \ - -std=c++20 -DBOOTZ_EPM_SUPPORT -DkExpectedWidth=320 -DkExpectedHeight=480 -D__FSKIT_USE_NEFS__ -D__BOOTLDR_STANDALONE__ -D__NEOSKRNL__ -D__BOOTZ__ -D__HAVE_NE_APIS__ -D__NE__ -I../ -I../kernel + -std=c++20 -DBOOTZ_EPM_SUPPORT -DkExpectedWidth=320 -DkExpectedHeight=480 -D__FSKIT_USE_NEFS__ -D__BOOTZ_STANDALONE__ -D__NEOSKRNL__ -D__BOOTZ__ -D__HAVE_NE_APIS__ -D__NE__ -I../ -I../kernel BOOT_LOADER=bootz.exe KERNEL=neoskrnl.exe diff --git a/dev/boot/modules/NetBoot/Boot.S b/dev/boot/modules/NetBoot/Boot.S index 2095b91d..8ebfb352 100644 --- a/dev/boot/modules/NetBoot/Boot.S +++ b/dev/boot/modules/NetBoot/Boot.S @@ -7,8 +7,10 @@ ;; * ======================================================== ;; */ +#ifdef __NE_AMD64__ .code64 .intel_syntax noprefix +#endif #define kTypeDriver 101 #define kArchAmd64 122 @@ -18,11 +20,3 @@ .quad kHandoverMagic .word kTypeDriver - -.text - -.extern main -.global __main - -__main: - ret diff --git a/dev/boot/modules/NetBoot/NetBoot.cc b/dev/boot/modules/NetBoot/NetBoot.cc index 1787045e..4a169d33 100644 --- a/dev/boot/modules/NetBoot/NetBoot.cc +++ b/dev/boot/modules/NetBoot/NetBoot.cc @@ -15,12 +15,14 @@ EXTERN_C Int32 ModuleMain(NeOS::HEL::BootInfoHeader* handover) { NETBOOT_INTERNET_HEADER inet{}; + memset(&inet, 0, sizeof(NETBOOT_INTERNET_HEADER)); + /// TODO: Read packet from JSON file 'netboot.json' - if (inet.PatchLength < 0) + if (inet.PatchLength < 1) { Boot::BootTextWriter writer; - writer.Write("NetBootLauncher: No Patch attached to packet.\r"); + writer.Write("NetBootLauncher: No executable attached to the packet, aborting.\r"); return kEfiFail; } @@ -31,6 +33,8 @@ EXTERN_C Int32 ModuleMain(NeOS::HEL::BootInfoHeader* handover) if (thread.IsValid()) return thread.Start(handover, YES); + + return kEfiFail; } else { diff --git a/dev/boot/modules/NetBoot/amd64.json b/dev/boot/modules/NetBoot/amd64.json index db035094..db39cced 100644 --- a/dev/boot/modules/NetBoot/amd64.json +++ b/dev/boot/modules/NetBoot/amd64.json @@ -10,12 +10,12 @@ "-fPIC", "-fno-rtti", "-fno-exceptions", - "-Wl,--subsystem=17,--image-base,0x10000000,-e,ModuleMain" + "-Wl,--subsystem=17,--image-base,0x1000000,-e,ModuleMain" ], "cpp_macros": [ "__NEOSKRNL__", "__BOOTZ__", - "__BOOTLDR_STANDALONE__", + "__BOOTZ_STANDALONE__", "__NE_AMD64__", "kNetBootVersionHighest=0x0100", "kNetBootVersionLowest=0x0100", diff --git a/dev/boot/modules/SysChk/amd64.json b/dev/boot/modules/SysChk/amd64.json index 97b6c418..7f013b39 100644 --- a/dev/boot/modules/SysChk/amd64.json +++ b/dev/boot/modules/SysChk/amd64.json @@ -10,12 +10,12 @@ "-fPIC", "-fno-rtti", "-fno-exceptions", - "-Wl,--subsystem=17,--image-base,0x10000000,-e,ModuleMain" + "-Wl,--subsystem=17,--image-base,0x1000000,-e,ModuleMain" ], "cpp_macros": [ "__NEOSKRNL__", "__BOOTZ__", - "__BOOTLDR_STANDALONE__", + "__BOOTZ_STANDALONE__", "__NE_AMD64__", "kChkVersionHighest=0x0100", "kChkVersionLowest=0x0100", diff --git a/dev/boot/modules/SysChk/arm64.json b/dev/boot/modules/SysChk/arm64.json index 6d9161ea..502c75cd 100644 --- a/dev/boot/modules/SysChk/arm64.json +++ b/dev/boot/modules/SysChk/arm64.json @@ -17,7 +17,7 @@ "cpp_macros": [ "__NEOSKRNL__", "__BOOTZ__", - "__BOOTLDR_STANDALONE__", + "__BOOTZ_STANDALONE__", "__NE_ARM64__", "kChkVersionHighest=0x0100", "kChkVersionLowest=0x0100", diff --git a/dev/boot/src/BootSupport.cc b/dev/boot/src/BootSupport.cc index 4d808ddc..efe6602a 100644 --- a/dev/boot/src/BootSupport.cc +++ b/dev/boot/src/BootSupport.cc @@ -12,7 +12,7 @@ #include <KernelKit/MSDOS.h> #include <KernelKit/PE.h> -#ifdef __BOOTLDR_STANDALONE__ +#ifdef __BOOTZ_STANDALONE__ /// @brief memset definition in C++. /// @param dst destination pointer. diff --git a/dev/boot/src/HEL/AMD64/BootEFI.cc b/dev/boot/src/HEL/AMD64/BootEFI.cc index 0840bc31..4744892f 100644 --- a/dev/boot/src/HEL/AMD64/BootEFI.cc +++ b/dev/boot/src/HEL/AMD64/BootEFI.cc @@ -202,47 +202,46 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr image_handle, handover_hdr->f_FirmwareCustomTables[0] = (VoidPtr)BS; handover_hdr->f_FirmwareCustomTables[1] = (VoidPtr)ST; + // ------------------------------------------ // + // If we succeed in reading the blob, then execute it. + // ------------------------------------------ // + +#if defined(__ATA_PIO__) Boot::BootFileReader reader_syschk(L"syschk.sys", image_handle); reader_syschk.ReadAll(0); Boot::BootThread* syschk_thread = nullptr; - // ------------------------------------------ // - // If we succeed in reading the blob, then execute it. - // ------------------------------------------ // - if (reader_syschk.Blob()) { syschk_thread = new Boot::BootThread(reader_syschk.Blob()); - syschk_thread->SetName("BootZ: System Recovery Check"); - syschk_thread->Start(handover_hdr, NO); - } + syschk_thread->SetName("BootZ: System Check"); -#if defined(__ATA_PIO__) - Boot::BDiskFormatFactory<BootDeviceATA> partition_factory; + Boot::BDiskFormatFactory<BootDeviceATA> partition_factory; - if (syschk_thread->Start(handover_hdr, NO) != kEfiOk) - { - if (partition_factory.IsPartitionValid() == NO) + if (syschk_thread->Start(handover_hdr, NO) != kEfiOk) { - Boot::BDiskFormatFactory<BootDeviceATA>::BFileDescriptor root{}; + if (partition_factory.IsPartitionValid() == NO) + { + Boot::BDiskFormatFactory<BootDeviceATA>::BFileDescriptor root{}; - root.fFileName[0] = kNeFSRoot[0]; - root.fFileName[1] = 0; + root.fFileName[0] = kNeFSRoot[0]; + root.fFileName[1] = 0; - root.fKind = kNeFSCatalogKindDir; + root.fKind = kNeFSCatalogKindDir; - const auto kFSName = "SSD"; + const auto kFSName = "SSD"; - partition_factory.Format(kFSName, &root, 1); + partition_factory.Format(kFSName, &root, 1); - fb_init(); + fb_init(); - FB::fb_clear_video(); + FB::fb_clear_video(); - FBDrawBitMapInRegion(zka_has_disk, NE_HAS_DISK_WIDTH, NE_HAS_DISK_HEIGHT, (kHandoverHeader->f_GOP.f_Width - NE_HAS_DISK_WIDTH) / 2, (kHandoverHeader->f_GOP.f_Height - NE_HAS_DISK_HEIGHT) / 2); + FBDrawBitMapInRegion(zka_has_disk, NE_HAS_DISK_WIDTH, NE_HAS_DISK_HEIGHT, (kHandoverHeader->f_GOP.f_Width - NE_HAS_DISK_WIDTH) / 2, (kHandoverHeader->f_GOP.f_Height - NE_HAS_DISK_HEIGHT) / 2); - fb_clear(); + fb_clear(); + } } } #endif @@ -265,7 +264,6 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr image_handle, handover_hdr->f_FirmwareVendorLen); handover_hdr->f_FirmwareVendorLen = Boot::BStrLen(sys_table->FirmwareVendor); - // Assign to global 'kHandoverHeader'. WideChar kernel_path[256U] = L"neoskrnl.exe"; @@ -318,7 +316,24 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr image_handle, // Finally load the OS kernel. // ---------------------------------------------------- // - kernel_thread->Start(handover_hdr, YES); + if (kernel_thread->Start(handover_hdr, YES) != kEfiOk) + { + Boot::BootFileReader reader_netboot(L"netboot.sys", image_handle); + reader_netboot.ReadAll(0); + + Boot::BootThread* netboot_thread = nullptr; + // ------------------------------------------ // + // If we succeed in reading the blob, then execute it. (That is NetBoot) + // ------------------------------------------ // + + if (reader_netboot.Blob()) + { + netboot_thread = new Boot::BootThread(reader_netboot.Blob()); + netboot_thread->SetName("BootZ: NetBoot"); + netboot_thread->Start(handover_hdr, YES); + } + } + CANT_REACH(); } diff --git a/dev/boot/src/HEL/AMD64/BootPlatform.cc b/dev/boot/src/HEL/AMD64/BootPlatform.cc index c7ae4085..aab1c6b4 100644 --- a/dev/boot/src/HEL/AMD64/BootPlatform.cc +++ b/dev/boot/src/HEL/AMD64/BootPlatform.cc @@ -9,7 +9,7 @@ #include <BootKit/Protocol.h> #include <BootKit/BootKit.h> -#ifdef __BOOTLDR_STANDALONE__ +#ifdef __BOOTZ_STANDALONE__ using namespace Boot; @@ -103,4 +103,4 @@ void rt_hlt() NeOS::HAL::rt_halt(); } -#endif // __BOOTLDR_STANDALONE__ +#endif // __BOOTZ_STANDALONE__ diff --git a/dev/boot/src/HEL/ARM64/BootPlatform.cc b/dev/boot/src/HEL/ARM64/BootPlatform.cc index 9713b80d..ebb9f9b0 100644 --- a/dev/boot/src/HEL/ARM64/BootPlatform.cc +++ b/dev/boot/src/HEL/ARM64/BootPlatform.cc @@ -8,7 +8,7 @@ #include <BootKit/Protocol.h> #include <BootKit/BootKit.h> -#ifdef __BOOTLDR_STANDALONE__ +#ifdef __BOOTZ_STANDALONE__ using namespace Boot; @@ -34,4 +34,4 @@ EXTERN_C void rt_std() { } -#endif // __BOOTLDR_STANDALONE__ +#endif // __BOOTZ_STANDALONE__ diff --git a/dev/boot/src/New+Delete.cc b/dev/boot/src/New+Delete.cc index 03a1bb68..fa6bc146 100644 --- a/dev/boot/src/New+Delete.cc +++ b/dev/boot/src/New+Delete.cc @@ -8,7 +8,7 @@ #include <BootKit/Protocol.h> #include <BootKit/BootKit.h> -#ifdef __BOOTLDR_STANDALONE__ +#ifdef __BOOTZ_STANDALONE__ EXTERN EfiBootServices* BS; /// @brief Allocates a new object. @@ -57,4 +57,4 @@ void operator delete(void* buf, size_t size) BS->FreePool(buf); } -#endif // __BOOTLDR_STANDALONE__ +#endif // __BOOTZ_STANDALONE__ |
