diff options
| -rw-r--r-- | Private/DriverKit/KernelStdCxx.cc | 24 | ||||
| -rw-r--r-- | Private/DriverKit/KernelString.c | 11 | ||||
| -rw-r--r-- | Private/DriverKit/KernelString.h | 3 | ||||
| -rw-r--r-- | Private/Drivers/Bonjour/makefile | 10 | ||||
| -rw-r--r-- | Private/Drivers/MahroussUpdate/DriverRsrc.rsrc | 25 | ||||
| -rw-r--r-- | Private/Drivers/MahroussUpdate/MahroussUpdate.cc | 24 | ||||
| -rw-r--r-- | Private/Drivers/MahroussUpdate/MahroussUpdate.hxx | 33 | ||||
| -rw-r--r-- | Private/Drivers/MahroussUpdate/makefile | 53 | ||||
| -rw-r--r-- | Private/Drivers/SampleDriver/SampleDriver.c | 3 | ||||
| -rw-r--r-- | Private/Drivers/SampleDriver/makefile | 10 | ||||
| -rw-r--r-- | Private/Root/Boot/Icons/boot-logo.ico | bin | 87830 -> 78998 bytes | |||
| -rw-r--r-- | Private/Root/Boot/Icons/update-logo.ico | bin | 0 -> 87830 bytes |
12 files changed, 176 insertions, 20 deletions
diff --git a/Private/DriverKit/KernelStdCxx.cc b/Private/DriverKit/KernelStdCxx.cc new file mode 100644 index 00000000..79d41a72 --- /dev/null +++ b/Private/DriverKit/KernelStdCxx.cc @@ -0,0 +1,24 @@ +/* ------------------------------------------- + + Copyright Mahrouss Logic + + Purpose: Driver C++ Definitions. + +------------------------------------------- */ + +#include <DriverKit/KernelStd.h> + +void* operator new(size_t sz) { + if (!sz) ++sz; + + auto ptr = kernelCall("NewKernelHeap", 1, sz); + kernelCall("KernelHeapProtect", 1, ptr); + + return ptr; +} + +void operator delete(void* ptr) noexcept { + if (!ptr) return; + + kernelCall("DeleteKernelHeap", 1,ptr); +} diff --git a/Private/DriverKit/KernelString.c b/Private/DriverKit/KernelString.c index 7c129dd4..0bb45b16 100644 --- a/Private/DriverKit/KernelString.c +++ b/Private/DriverKit/KernelString.c @@ -17,3 +17,14 @@ DK_EXTERN size_t kernelStringLength(const char* str) { return index; } + +DK_EXTERN int kernelStringCopy(char* dst, const char* src, size_t len) { + size_t index = 0; + + while (index != len) { + dst[index] = src[index]; + ++index; + } + + return index; +} diff --git a/Private/DriverKit/KernelString.h b/Private/DriverKit/KernelString.h index d1b8ac93..8e189d26 100644 --- a/Private/DriverKit/KernelString.h +++ b/Private/DriverKit/KernelString.h @@ -10,4 +10,7 @@ #include <DriverKit/KernelStd.h> +/// @brief DriverKit equivalent of POSIX's string.h. + DK_EXTERN size_t kernelStringLength(const char* str); +DK_EXTERN int kernelStringCopy(char* dst, const char* src, size_t len); diff --git a/Private/Drivers/Bonjour/makefile b/Private/Drivers/Bonjour/makefile index b98d9ff9..46edfd2e 100644 --- a/Private/Drivers/Bonjour/makefile +++ b/Private/Drivers/Bonjour/makefile @@ -12,16 +12,6 @@ ADD_FILE=touch COPY=cp HTTP_GET=wget -ifeq ($(shell uname), Windows_NT) -EMU=qemu-system-x86_64w -else -EMU=qemu-system-x86_64 -endif - -IMG=epm.img -IMG_2=epm-slave.img -EMU_FLAGS=-net none -smp 4 -m 4G -M q35 -bios OVMF.fd -device piix3-ide,id=ide -drive id=disk,file=$(IMG),format=raw,if=none -device ide-hd,drive=disk,bus=ide.0 -drive file=fat:rw:CDROM,index=2,format=raw -d int -hdd epm-slave.img - LD_FLAGS=-e __ImageStart --subsystem=17 OBJ=*.o diff --git a/Private/Drivers/MahroussUpdate/DriverRsrc.rsrc b/Private/Drivers/MahroussUpdate/DriverRsrc.rsrc new file mode 100644 index 00000000..359a0875 --- /dev/null +++ b/Private/Drivers/MahroussUpdate/DriverRsrc.rsrc @@ -0,0 +1,25 @@ +1 ICON "../../Root/Boot/Icons/update-logo.ico" + +1 VERSIONINFO +FILEVERSION 1,0,0,0 +PRODUCTVERSION 1,0,0,0 +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "080904E4" + BEGIN + VALUE "CompanyName", "Mahrouss-Logic" + VALUE "FileDescription", "New OS Mahrouss Update driver." + VALUE "FileVersion", "1.00" + VALUE "InternalName", "Mahrouss Update." + VALUE "LegalCopyright", "Copyright Mahrouss-Logic, all rights reserved." + VALUE "OriginalFilename", "MahroussUpdate.exe" + VALUE "ProductName", "MahroussUpdate." + VALUE "ProductVersion", "1.00" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x809, 1252 + END +END diff --git a/Private/Drivers/MahroussUpdate/MahroussUpdate.cc b/Private/Drivers/MahroussUpdate/MahroussUpdate.cc new file mode 100644 index 00000000..c8741ed0 --- /dev/null +++ b/Private/Drivers/MahroussUpdate/MahroussUpdate.cc @@ -0,0 +1,24 @@ +/* ------------------------------------------- + + Copyright Mahrouss Logic + +------------------------------------------- */ + +#include <DriverKit/KernelString.h> +#include <DriverKit/KernelPrint.h> + +#include <Drivers/MahroussUpdate/MahroussUpdate.hxx> + +DK_EXTERN int __ImageStart(void) { + kernelPrintStr("Mahrouss Update: Looking for updates...\r\n"); + UpdateRequest req("mup://release-mahrouss.logic/newos/"); + + return 0; +} + +DK_EXTERN int __ImageEnd(void) { + return 0; +} + +///! @brief Use this to check your stack, if using MinGW/MSVC. +DK_EXTERN void ___chkstk_ms(void) {} diff --git a/Private/Drivers/MahroussUpdate/MahroussUpdate.hxx b/Private/Drivers/MahroussUpdate/MahroussUpdate.hxx new file mode 100644 index 00000000..a4f219be --- /dev/null +++ b/Private/Drivers/MahroussUpdate/MahroussUpdate.hxx @@ -0,0 +1,33 @@ +/* ------------------------------------------- + + Copyright Mahrouss Logic + +------------------------------------------- */ + +#pragma once + +#include <DriverKit/KernelString.h> + +#include "DriverKit/KernelPrint.h" + +/// @file Software update job driver. + +class UpdateRequest; +class UpdateRequestObserver; + +class UpdateRequest { + public: + explicit UpdateRequest(const char* patchUrl = "mup://invalid-url-scheme/") { + kernelStringCopy(this->fPatchUrl, patchUrl, kernelStringLength(patchUrl)); + + kernelPrintStr("Mahrouss Update, Looking at: "); + kernelPrintStr(patchUrl); + kernelPrintChar('\r'); + kernelPrintChar('\n'); + } + + ~UpdateRequest() {} + + private: + char fPatchUrl[4096] = {0}; +}; diff --git a/Private/Drivers/MahroussUpdate/makefile b/Private/Drivers/MahroussUpdate/makefile new file mode 100644 index 00000000..a0673a23 --- /dev/null +++ b/Private/Drivers/MahroussUpdate/makefile @@ -0,0 +1,53 @@ +################################################## +# (C) Mahrouss Logic, all rights reserved. +# This is the sample driver makefile. +################################################## + +CC_GNU=x86_64-w64-mingw32-gcc +LD_GNU=x86_64-w64-mingw32-ld + +WINDRES=x86_64-w64-mingw32-windres + +ADD_FILE=touch +COPY=cp +HTTP_GET=wget + +LD_FLAGS=-e __ImageStart --subsystem=17 + +OBJ=*.o + + +REM=rm +REM_FLAG=-f + +FLAG_ASM=-f win64 +FLAG_GNU=-fshort-wchar -D__EFI_x86_64__ -mgeneral-regs-only -mno-red-zone -D__KERNEL__ -DEFI_FUNCTION_WRAPPER -I../ -I../../ -I./ -c -ffreestanding -D__HAVE_MAHROUSS_APIS__ -D__MAHROUSS__ -D__BOOTLOADER__ -I./ + +.PHONY: invalid-recipe +invalid-recipe: + @echo "invalid-recipe: Use make all instead." + +.PHONY: all +all: compile-amd64 + $(LD_GNU) $(OBJ) $(LD_FLAGS) -o MahroussUpdate.exe + cp MahroussUpdate.exe ../../Root/Boot/MahroussUpdate.exe + +ifneq ($(DEBUG_SUPPORT), ) +DEBUG = -D__DEBUG__ +endif + +.PHONY: compile-amd64 +compile-amd64: + $(WINDRES) DriverRsrc.rsrc -O coff -o DriverRsrc.o + $(CC_GNU) $(FLAG_GNU) -std=c17 $(DEBUG) $(wildcard *.c) $(wildcard ../../DriverKit/*.c) $(wildcard ../../DriverKit/*.s) + $(CC_GNU) $(FLAG_GNU) -std=c++17 -fno-rtti -fno-exceptions $(DEBUG) $(wildcard *.cc) $(wildcard ../../DriverKit/*.cc) + +.PHONY: clean +clean: + $(REM) $(REM_FLAG) $(OBJ) MahroussUpdate.exe + +.PHONY: help +help: + @echo "=== HELP ===" + @echo "clean: Clean driver." + @echo "compile-amd64: Build driver." diff --git a/Private/Drivers/SampleDriver/SampleDriver.c b/Private/Drivers/SampleDriver/SampleDriver.c index 8289fcbc..4481d480 100644 --- a/Private/Drivers/SampleDriver/SampleDriver.c +++ b/Private/Drivers/SampleDriver/SampleDriver.c @@ -16,3 +16,6 @@ int __ImageEnd(void) { kernelPrintStr("SampleDriver: Shutting down...\r\n"); return 0; } + +///! @brief Use this to check your stack, if using MinGW/MSVC. +void ___chkstk_ms(void) {} diff --git a/Private/Drivers/SampleDriver/makefile b/Private/Drivers/SampleDriver/makefile index 2433aa51..cc96c022 100644 --- a/Private/Drivers/SampleDriver/makefile +++ b/Private/Drivers/SampleDriver/makefile @@ -12,16 +12,6 @@ ADD_FILE=touch COPY=cp HTTP_GET=wget -ifeq ($(shell uname), Windows_NT) -EMU=qemu-system-x86_64w -else -EMU=qemu-system-x86_64 -endif - -IMG=epm.img -IMG_2=epm-slave.img -EMU_FLAGS=-net none -smp 4 -m 4G -M q35 -bios OVMF.fd -device piix3-ide,id=ide -drive id=disk,file=$(IMG),format=raw,if=none -device ide-hd,drive=disk,bus=ide.0 -drive file=fat:rw:CDROM,index=2,format=raw -d int -hdd epm-slave.img - LD_FLAGS=-e __ImageStart --subsystem=17 OBJ=*.o diff --git a/Private/Root/Boot/Icons/boot-logo.ico b/Private/Root/Boot/Icons/boot-logo.ico Binary files differindex 3a0258b8..b7a2eba2 100644 --- a/Private/Root/Boot/Icons/boot-logo.ico +++ b/Private/Root/Boot/Icons/boot-logo.ico diff --git a/Private/Root/Boot/Icons/update-logo.ico b/Private/Root/Boot/Icons/update-logo.ico Binary files differnew file mode 100644 index 00000000..860194db --- /dev/null +++ b/Private/Root/Boot/Icons/update-logo.ico |
