From 64700394fae0c233d0bc4b36d0aec17af110baab Mon Sep 17 00:00:00 2001 From: rgimad <33692565+rgimad@users.noreply.github.com> Date: Sun, 9 Feb 2025 19:55:01 +0300 Subject: [PATCH] add kernel test skeleton, todo: load it --- build.bat | 4 +++- build.sh | 7 ++++-- kernel/boot/bootx64.asm | 7 ++++-- kernel/kernel64.asm | 49 ++++++++++++++++++++++++++++++++++++++++ kernel/kernel64.bin | Bin 0 -> 143 bytes 5 files changed, 62 insertions(+), 5 deletions(-) create mode 100644 kernel/kernel64.asm create mode 100644 kernel/kernel64.bin diff --git a/build.bat b/build.bat index baff8d7..a3f1136 100644 --- a/build.bat +++ b/build.bat @@ -1,10 +1,12 @@ @echo off fasm kernel\boot\bootx64.asm +fasm kernel\kernel64.asm if errorlevel 1 ( echo build failed exit /b 1 ) rd /s /q image mkdir image\EFI\BOOT -copy kernel\boot\bootx64.efi image\EFI\BOOT\ +copy kernel\boot\bootx64.efi image\EFI\BOOT\BOOTX64.EFI +copy kernel\kernel64.bin image\EFI\KERNEL64.BIN qemu-system-x86_64 -cpu qemu64 -bios OVMF.fd -drive driver=vvfat,rw=on,dir=image\ diff --git a/build.sh b/build.sh index 6461c42..ef874c5 100755 --- a/build.sh +++ b/build.sh @@ -1,6 +1,9 @@ -if fasm kernel/boot/bootx64.asm; then +#!/bin/sh +if fasm kernel/boot/bootx64.asm && fasm kernel/kernel64.asm; then + rm -rf image mkdir -p image/EFI/BOOT - cp kernel/boot/bootx64.efi image/EFI/BOOT + cp kernel/boot/bootx64.efi image/EFI/BOOT/BOOTX64.EFI + cp kernel/kernel64.bin image/EFI/KERNEL64.BIN qemu-system-x86_64 -m 128 -cpu qemu64 -bios OVMF.fd -drive driver=vvfat,rw=on,dir=image/ else echo "build failed" diff --git a/kernel/boot/bootx64.asm b/kernel/boot/bootx64.asm index 119070b..683dc7b 100644 --- a/kernel/boot/bootx64.asm +++ b/kernel/boot/bootx64.asm @@ -1,7 +1,7 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; ;; Copyright (C) KolibriOS team 2025-2025. All rights reserved. ;; -;; Distributed under terms of the GNU General Public License. ;; +;; Distributed under terms of the GNU General Public License v2 ;; ;; ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; format pe64 efi @@ -185,7 +185,7 @@ msg_firmware_revision du "UEFI revision: ", 0 msg_newline du 13,10,0 msg_failed_disable_watchdog du "Failed to disable watchdog timer!", 13,10,0 msg_end_1 du 13,10,"---------- test printing functions:", 13,10,0 -msg_spacer du " ", 0 +msg_spacer du " ", 0 msg_dummy du "<....>", 0 msg_e820_memmap_here du "Memory map (phys_start, phys_end, e820 type)",13,10,0 @@ -206,6 +206,9 @@ e820_typenames: dq msg_dummy dq msg_e820_persistent + +kernel_file_path du '\EFI\KERNEL64.BIN', 0 + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; section '.bss' data readable writeable discardable memory_map dq ? diff --git a/kernel/kernel64.asm b/kernel/kernel64.asm new file mode 100644 index 0000000..fc912c2 --- /dev/null +++ b/kernel/kernel64.asm @@ -0,0 +1,49 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; ;; +;; Copyright (C) KolibriOS team 2025-2025. All rights reserved. ;; +;; Distributed under terms of the GNU General Public License v2 ;; +;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +use64 + +VIRT_KERNEL_BASE = 0xFFFFFFFF80000000 + +org VIRT_KERNEL_BASE + +dq 'KERNEL64' ; magic +dq k64_entry - VIRT_KERNEL_BASE +; maybe more fields in header + +; 64 bit kernel entry point +k64_entry: + pop qword [qword puthex_ptr - VIRT_KERNEL_BASE] + pop qword [qword putstr_ptr - VIRT_KERNEL_BASE] + + sub rsp, 0x20 + mov rcx, kmsg_hello - VIRT_KERNEL_BASE + call qword [qword putstr_ptr - VIRT_KERNEL_BASE] + add rsp, 0x20 + + sub rsp, 0x20 + mov rcx, kmsg_ripis - VIRT_KERNEL_BASE + call qword [qword putstr_ptr - VIRT_KERNEL_BASE] + add rsp, 0x20 + + sub rsp, 0x20 + lea rcx, [rip] + call qword [qword puthex_ptr - VIRT_KERNEL_BASE] + add rsp, 0x20 + + jmp $ + + +kmsg_hello db 'Hello from KERNEL',13,10,0 +kmsg_ripis db 'RIP = ',13,10,0 + +puthex_ptr dq 0 +putstr_ptr dq 0 + +rb 8192 +kernel_tmp_stack: + diff --git a/kernel/kernel64.bin b/kernel/kernel64.bin new file mode 100644 index 0000000000000000000000000000000000000000..f726a4a4f2ec5ad7871206023bddca6a3c4bd9dd GIT binary patch literal 143 zcmeZv4f1pKF*6ZhfPj7$)p{TcNVNkgkLEWD9>)(R0h#|rpdv>UprU11M0vwv3mHA;>d8!BzptKnDPiydwJm literal 0 HcmV?d00001