summaryrefslogtreecommitdiffhomepage
path: root/dev/boot/src
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-03-31 11:00:59 +0200
committerAmlal El Mahrouss <amlal@nekernel.org>2025-03-31 11:00:59 +0200
commitaa595fad9c8062910778bd6fa01ee487eab1a3e9 (patch)
tree2faa45d3984d15b2742a3657af6ab31f25bcfab3 /dev/boot/src
parentb91ada1d1fec572ee5d7ae9b98ff54ac929c7a72 (diff)
boot: fix framebuffer init and restore boot on real hardware
Framebuffer mode selection now defaults gracefully when the expected resolution is unavailable. EFI binaries now boot successfully on physical hardware using a fixed image base and simplified jump logic. Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'dev/boot/src')
-rw-r--r--dev/boot/src/BootloaderRsrc.rsrc2
-rw-r--r--dev/boot/src/HEL/AMD64/BootAPI.S9
-rw-r--r--dev/boot/src/HEL/AMD64/BootEFI.cc32
-rw-r--r--dev/boot/src/HEL/ARM64/BootEFI.cc4
4 files changed, 28 insertions, 19 deletions
diff --git a/dev/boot/src/BootloaderRsrc.rsrc b/dev/boot/src/BootloaderRsrc.rsrc
index 96953911..c634a8f6 100644
--- a/dev/boot/src/BootloaderRsrc.rsrc
+++ b/dev/boot/src/BootloaderRsrc.rsrc
@@ -13,7 +13,7 @@ BEGIN
VALUE "FileVersion", BOOTLOADER_VERSION
VALUE "InternalName", "bootz"
VALUE "LegalCopyright", "Copyright (C) 2024, Amlal El Mahrouss all rights reserved."
- VALUE "OriginalFilename", "bootz.exe"
+ VALUE "OriginalFilename", "bootz.efi"
VALUE "ProductName", "bootz"
VALUE "ProductVersion", BOOTLOADER_VERSION
END
diff --git a/dev/boot/src/HEL/AMD64/BootAPI.S b/dev/boot/src/HEL/AMD64/BootAPI.S
index 963ef46a..c4a7ad39 100644
--- a/dev/boot/src/HEL/AMD64/BootAPI.S
+++ b/dev/boot/src/HEL/AMD64/BootAPI.S
@@ -11,15 +11,10 @@
rt_jump_to_address:
mov rbx, rcx
mov rcx, rdx
- push rbx
- push rdx
mov rsp, r8
- push rax
- jmp rbx
- pop rdx
- pop rbx
- pop rax
+ cli
+ jmp rbx
ret
diff --git a/dev/boot/src/HEL/AMD64/BootEFI.cc b/dev/boot/src/HEL/AMD64/BootEFI.cc
index fba3d227..7b912025 100644
--- a/dev/boot/src/HEL/AMD64/BootEFI.cc
+++ b/dev/boot/src/HEL/AMD64/BootEFI.cc
@@ -20,15 +20,15 @@
// Makes the compiler shut up.
#ifndef kMachineModel
-#define kMachineModel "ZkaOS"
+#define kMachineModel "NeKernel"
#endif // !kMachineModel
#ifndef kExpectedWidth
-#define kExpectedWidth (1280)
+#define kExpectedWidth (800)
#endif
#ifndef kExpectedHeight
-#define kExpectedHeight (720)
+#define kExpectedHeight (600)
#endif
/** Graphics related. */
@@ -98,7 +98,12 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr image_handle,
#ifdef ZBA_USE_FB
if (!boot_init_fb())
- return 1; ///! Init the GOP.
+ {
+ Boot::BootTextWriter writer;
+ writer.Write("BootZ: Invalid Framebuffer, can't boot NeKernel.\r");
+
+ CANT_REACH();
+ }
for (SizeT index_vt = 0; index_vt < sys_table->NumberOfTableEntries;
++index_vt)
@@ -207,7 +212,7 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr image_handle,
// ------------------------------------------ //
#if defined(__ATA_PIO__)
- Boot::BootFileReader reader_syschk(L"chk.sys", image_handle);
+ Boot::BootFileReader reader_syschk(L"chk.efi", image_handle);
reader_syschk.ReadAll(0);
Boot::BootThread* syschk_thread = nullptr;
@@ -266,7 +271,7 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr image_handle,
handover_hdr->f_FirmwareVendorLen = Boot::BStrLen(sys_table->FirmwareVendor);
// Assign to global 'kHandoverHeader'.
- WideChar kernel_path[256U] = L"vkrnl.exe";
+ WideChar kernel_path[256U] = L"vmkrnl.efi";
UInt32 kernel_path_sz = 256U;
if (ST->RuntimeServices->GetVariable(L"/props/boot_path", kEfiGlobalNamespaceVarGUID, nullptr, &kernel_path_sz, kernel_path) != kEfiOk)
@@ -283,6 +288,15 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr image_handle,
ST->RuntimeServices->GetVariable(L"/props/kern_ver", kEfiGlobalNamespaceVarGUID, nullptr, &sz_ver, &ver);
Boot::BootTextWriter writer;
+
+ if (ver != KERNEL_VERSION_BCD)
+ {
+ ver = KERNEL_VERSION_BCD;
+
+ ST->RuntimeServices->SetVariable(L"/props/kern_ver", kEfiGlobalNamespaceVarGUID, nullptr, &sz_ver, &ver);
+ writer.Write("BootZ: Kernel Version Updated: ").Write(ver).Write("\r");
+ }
+
writer.Write("BootZ: Kernel Version: ").Write(ver).Write("\r");
Boot::BootFileReader reader_kernel(kernel_path, image_handle);
@@ -310,17 +324,17 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr image_handle,
Boot::Stop();
}
- Boot::BootFileReader reader_netboot(L"net.sys", image_handle);
+ Boot::BootFileReader reader_netboot(L"net.efi", image_handle);
reader_netboot.ReadAll(0);
Boot::BootThread* netboot_thread = nullptr;
- Boot::ExitBootServices(map_key, image_handle);
-
// ---------------------------------------------------- //
// Finally load the OS kernel.
// ---------------------------------------------------- //
+ Boot::ExitBootServices(map_key, image_handle);
+
if (kernel_thread->Start(handover_hdr, YES) != kEfiOk)
{
// ------------------------------------------ //
diff --git a/dev/boot/src/HEL/ARM64/BootEFI.cc b/dev/boot/src/HEL/ARM64/BootEFI.cc
index 5016214f..6839c2ec 100644
--- a/dev/boot/src/HEL/ARM64/BootEFI.cc
+++ b/dev/boot/src/HEL/ARM64/BootEFI.cc
@@ -20,7 +20,7 @@
// Makes the compiler shut up.
#ifndef kMachineModel
-#define kMachineModel "ZkaOS"
+#define kMachineModel "NeKernel"
#endif // !kMachineModel
#ifndef kExpectedWidth
@@ -196,7 +196,7 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr image_handle,
// Assign to global 'kHandoverHeader'.
- Boot::BootFileReader reader_kernel(L"vkrnl.exe", image_handle);
+ Boot::BootFileReader reader_kernel(L"vmkrnl.efi", image_handle);
reader_kernel.ReadAll(0);