summaryrefslogtreecommitdiffhomepage
path: root/dev/boot
diff options
context:
space:
mode:
Diffstat (limited to 'dev/boot')
-rw-r--r--dev/boot/amd64-desktop.make7
-rw-r--r--dev/boot/arm64-desktop.make4
-rw-r--r--dev/boot/arm64-mobile.make4
-rw-r--r--dev/boot/modules/NetBoot/Boot.S10
-rw-r--r--dev/boot/modules/NetBoot/NetBoot.cc8
-rw-r--r--dev/boot/modules/NetBoot/amd64.json4
-rw-r--r--dev/boot/modules/SysChk/amd64.json4
-rw-r--r--dev/boot/modules/SysChk/arm64.json2
-rw-r--r--dev/boot/src/BootSupport.cc2
-rw-r--r--dev/boot/src/HEL/AMD64/BootEFI.cc63
-rw-r--r--dev/boot/src/HEL/AMD64/BootPlatform.cc4
-rw-r--r--dev/boot/src/HEL/ARM64/BootPlatform.cc4
-rw-r--r--dev/boot/src/New+Delete.cc4
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__