summaryrefslogtreecommitdiffhomepage
path: root/dev/boot
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
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')
-rw-r--r--dev/boot/amd64-ci.make12
-rw-r--r--dev/boot/amd64-desktop.make16
-rw-r--r--dev/boot/arm64-desktop.make10
-rw-r--r--dev/boot/modules/BootNet/amd64.json2
-rw-r--r--dev/boot/modules/SysChk/amd64.json2
-rw-r--r--dev/boot/modules/SysChk/arm64.json2
-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
10 files changed, 50 insertions, 41 deletions
diff --git a/dev/boot/amd64-ci.make b/dev/boot/amd64-ci.make
index 6134e79c..ed73f3d3 100644
--- a/dev/boot/amd64-ci.make
+++ b/dev/boot/amd64-ci.make
@@ -28,7 +28,7 @@ BIOS=OVMF.fd
IMG=epm-master-1.img
IMG_2=epm-master-2.img
-BOOT=./src/neos_esp.img
+BOOT=./src/nekernel-esp.img
DISK_DRV =
@@ -71,10 +71,10 @@ FLAG_GNU=-fshort-wchar -D__EFI_x86_64__ -mno-red-zone -D__NEOSKRNL__ -D__BOOTZ__
-DEFI_FUNCTION_WRAPPER -I./ -I../kernel $(DISK_DRV) -I../ -c -nostdlib -fno-rtti -fno-exceptions \
-std=c++20 -DBOOTZ_GPT_SUPPORT -DBOOTZ_EPM_SUPPORT -D__HAVE_NE_APIS__ -DZBA_USE_FB -D__NE_AMD64__ -D__NE__ -DNE_AUTO_FORMAT
-BOOTLOADER=bootz.exe
-KERNEL=vkrnl.exe
-SYSCHK=chk.sys
-NETBOOT=net.sys
+BOOTLOADER=bootz.efi
+KERNEL=vmkrnl.efi
+SYSCHK=chk.efi
+BOOTNET=net.efi
SCIKIT=libuser.dylib
.PHONY: invalid-recipe
@@ -132,7 +132,7 @@ efi:
$(HTTP_GET) https://retrage.github.io/edk2-nightly/bin/DEBUGX64_OVMF.fd -O OVMF.fd
BINS=*.bin
-EXECUTABLES=bootz.exe vkrnl.exe OVMF.fd
+EXECUTABLES=bootz.efi vmkrnl.efi OVMF.fd
TARGETS=$(REM_FLAG) $(OBJ) $(BIN) $(IMG) $(IMG_2) $(EXECUTABLES)
diff --git a/dev/boot/amd64-desktop.make b/dev/boot/amd64-desktop.make
index 6a8cb3f9..6e92330e 100644
--- a/dev/boot/amd64-desktop.make
+++ b/dev/boot/amd64-desktop.make
@@ -28,7 +28,7 @@ BIOS=OVMF.fd
IMG=epm-master-1.img
IMG_2=epm-master-2.img
-BOOT=./src/neos_esp.img
+BOOT=./src/nekernel-esp.img
DISK_DRV =
@@ -69,12 +69,12 @@ REM_FLAG=-f
FLAG_ASM=-f win64
FLAG_GNU=-fshort-wchar -D__EFI_x86_64__ -mno-red-zone -D__NEOSKRNL__ -D__BOOTZ__ \
-DEFI_FUNCTION_WRAPPER -I./ -I../kernel $(DISK_DRV) -I../ -c -nostdlib -fno-rtti -fno-exceptions \
- -std=c++20 -DBOOTZ_GPT_SUPPORT -DBOOTZ_EPM_SUPPORT -D__HAVE_NE_APIS__ -DZBA_USE_FB -D__NE_AMD64__ -D__NE__ -DNE_AUTO_FORMAT
+ -std=c++20 -DBOOTZ_GPT_SUPPORT -DBOOTZ_EPM_SUPPORT -D__HAVE_NE_APIS__ -DZBA_USE_FB -D__NE_AMD64__ -D__NE__ -DNE_AUTO_FORMAT -Wl,--disable-reloc-section
-BOOTLOADER=bootz.exe
-KERNEL=vkrnl.exe
-SYSCHK=chk.sys
-NETBOOT=net.sys
+BOOTLOADER=bootz.efi
+KERNEL=vmkrnl.efi
+SYSCHK=chk.efi
+BOOTNET=net.efi
SCIKIT=libuser.dylib
.PHONY: invalid-recipe
@@ -90,7 +90,7 @@ 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/BootNet/$(NETBOOT) src/Root/$(NETBOOT)
+ $(COPY) ./modules/BootNet/$(BOOTNET) src/Root/$(BOOTNET)
$(COPY) ../user/$(SCIKIT) src/Root/$(SCIKIT)
$(COPY) src/$(BOOTLOADER) src/Root/$(BOOTLOADER)
@@ -138,7 +138,7 @@ efi:
$(HTTP_GET) https://retrage.github.io/edk2-nightly/bin/DEBUGX64_OVMF.fd -O OVMF.fd
BINS=*.bin
-EXECUTABLES=bootz.exe vkrnl.exe OVMF.fd
+EXECUTABLES=bootz.efi vmkrnl.efi OVMF.fd
TARGETS=$(REM_FLAG) $(OBJ) $(BIN) $(IMG) $(IMG_2) $(EXECUTABLES)
diff --git a/dev/boot/arm64-desktop.make b/dev/boot/arm64-desktop.make
index 376ae622..d17c2ae2 100644
--- a/dev/boot/arm64-desktop.make
+++ b/dev/boot/arm64-desktop.make
@@ -47,10 +47,10 @@ FLAG_GNU=-fshort-wchar -c -ffreestanding -MMD -mno-red-zone -D__NE_ARM64__ -fno-
-target aarch64-unknown-windows \
-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=vkrnl.exe
-SYSCHK=chk.sys
-STARTUP=startup.sys
+BOOT_LOADER=bootz.efi
+KERNEL=vmkrnl.efi
+SYSCHK=chk.efi
+STARTUP=startup.efi
.PHONY: invalid-recipe
invalid-recipe:
@@ -94,7 +94,7 @@ efi:
$(HTTP_GET) https://retrage.github.io/edk2-nightly/bin/DEBUGAARCH64_QEMU_EFI.fd -O OVMF.fd
BINS=*.bin
-EXECUTABLES=bootz.exe vkrnl.exe OVMF.fd
+EXECUTABLES=bootz.efi vmkrnl.efi OVMF.fd
TARGETS=$(REM_FLAG) $(OBJ) $(BIN) $(IMG) $(IMG_2) $(EXECUTABLES)
diff --git a/dev/boot/modules/BootNet/amd64.json b/dev/boot/modules/BootNet/amd64.json
index 6a87600b..664c617f 100644
--- a/dev/boot/modules/BootNet/amd64.json
+++ b/dev/boot/modules/BootNet/amd64.json
@@ -3,7 +3,7 @@
"compiler_std": "c++20",
"headers_path": ["../", "../../", "../../../kernel", "../../../", "./"],
"sources_path": ["*.cc", "*.S", "../../src/HEL/AMD64/*.cc", "../../src/HEL/AMD64/*.S", "../../src/*.cc"],
- "output_name": "net.sys",
+ "output_name": "net.efi",
"compiler_flags": [
"-nostdlib",
"-std=c++20",
diff --git a/dev/boot/modules/SysChk/amd64.json b/dev/boot/modules/SysChk/amd64.json
index f7d979ac..d995bde2 100644
--- a/dev/boot/modules/SysChk/amd64.json
+++ b/dev/boot/modules/SysChk/amd64.json
@@ -3,7 +3,7 @@
"compiler_std": "c++20",
"headers_path": ["../", "../../", "../../../kernel", "../../../", "./"],
"sources_path": ["*.cc", "*.S", "../../src/HEL/AMD64/*.cc", "../../src/HEL/AMD64/*.S", "../../src/*.cc"],
- "output_name": "chk.sys",
+ "output_name": "chk.efi",
"compiler_flags": [
"-nostdlib",
"-std=c++20",
diff --git a/dev/boot/modules/SysChk/arm64.json b/dev/boot/modules/SysChk/arm64.json
index 9d4ebcf9..1f91326e 100644
--- a/dev/boot/modules/SysChk/arm64.json
+++ b/dev/boot/modules/SysChk/arm64.json
@@ -3,7 +3,7 @@
"compiler_std": "c++20",
"headers_path": ["../", "../../", "../../../kernel", "../../../", "./"],
"sources_path": ["*.cc", "*.S", "../../src/HEL/ARM64/*.cc", "../../src/HEL/ARM64/*.S", "../../src/*.cc"],
- "output_name": "chk.sys",
+ "output_name": "chk.efi",
"compiler_flags": [
"-ffreestanding",
"-nostdlib",
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);