From 537cadbf78695a01ea1c00a0a5a4b6b70ddac8c3 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Sun, 7 Sep 2025 18:12:25 +0200 Subject: feat: `ne_launch` and `LaunchHelpers.fwrk`: PID zero of NeKernel. Signed-off-by: Amlal El Mahrouss --- dev/kernel/HALKit/AMD64/HalKernelMain.cc | 4 ---- dev/kernel/HALKit/ARM64/HalKernelMain.cc | 4 ---- dev/launch/.keep | 0 dev/launch/LaunchKit/.keep | 0 dev/launch/obj/.keep | 0 dev/launch/src/.keep | 0 dev/libDDK/DriverKit/cpp/object.hpp | 16 ++++++++++++++++ dev/libDDK/DriverKit/ddk.h | 4 +++- dev/libDDK/src/ddk_kernel_call.c | 2 +- dev/libDDK/src/ddk_kernel_call_dispatch.S | 3 ++- public/frameworks/LaunchHelpers.fwrk/.keep | 0 .../frameworks/LaunchHelpers.fwrk/LaunchHelpers.json | 19 +++++++++++++++++++ public/frameworks/LaunchHelpers.fwrk/dist/.keep | 0 public/frameworks/LaunchHelpers.fwrk/headers/.keep | 0 public/frameworks/LaunchHelpers.fwrk/src/.keep | 0 public/frameworks/LaunchHelpers.fwrk/src/DylibMain.cc | 5 +++++ public/frameworks/LaunchHelpers.fwrk/xml/.keep | 0 public/frameworks/LaunchHelpers.fwrk/xml/app.xml | 2 ++ 18 files changed, 48 insertions(+), 11 deletions(-) create mode 100644 dev/launch/.keep create mode 100644 dev/launch/LaunchKit/.keep create mode 100644 dev/launch/obj/.keep create mode 100644 dev/launch/src/.keep create mode 100644 dev/libDDK/DriverKit/cpp/object.hpp create mode 100644 public/frameworks/LaunchHelpers.fwrk/.keep create mode 100644 public/frameworks/LaunchHelpers.fwrk/LaunchHelpers.json create mode 100644 public/frameworks/LaunchHelpers.fwrk/dist/.keep create mode 100644 public/frameworks/LaunchHelpers.fwrk/headers/.keep create mode 100644 public/frameworks/LaunchHelpers.fwrk/src/.keep create mode 100644 public/frameworks/LaunchHelpers.fwrk/src/DylibMain.cc create mode 100644 public/frameworks/LaunchHelpers.fwrk/xml/.keep create mode 100644 public/frameworks/LaunchHelpers.fwrk/xml/app.xml diff --git a/dev/kernel/HALKit/AMD64/HalKernelMain.cc b/dev/kernel/HALKit/AMD64/HalKernelMain.cc index f121fbb4..cb5d4af8 100644 --- a/dev/kernel/HALKit/AMD64/HalKernelMain.cc +++ b/dev/kernel/HALKit/AMD64/HalKernelMain.cc @@ -148,10 +148,6 @@ EXTERN_C Kernel::Void hal_real_init(Kernel::Void) noexcept { ProcessStatusKind::kInvalid; } - rtl_create_user_process(sched_idle_task, "MgmtSrv"); //! Mgmt command server. - rtl_create_user_process(sched_idle_task, "LaunchSrv"); //! launchd - rtl_create_user_process(sched_idle_task, "SecSrv"); //! Login Server - HAL::mp_init_cores(kHandoverHeader->f_HardwareTables.f_VendorPtr); #ifdef __FSKIT_INCLUDES_HEFS__ diff --git a/dev/kernel/HALKit/ARM64/HalKernelMain.cc b/dev/kernel/HALKit/ARM64/HalKernelMain.cc index d7663f4e..096df49e 100644 --- a/dev/kernel/HALKit/ARM64/HalKernelMain.cc +++ b/dev/kernel/HALKit/ARM64/HalKernelMain.cc @@ -67,10 +67,6 @@ EXTERN_C void hal_init_platform(Kernel::HEL::BootInfoHeader* handover_hdr) { ProcessStatusKind::kInvalid; } - rtl_create_user_process(sched_idle_task, "MgmtSrv"); //! Mgmt command server. - rtl_create_user_process(sched_idle_task, "LaunchSrv"); //! launchd - rtl_create_user_process(sched_idle_task, "SecSrv"); //! Login Server - Kernel::mp_init_cores(); while (YES) diff --git a/dev/launch/.keep b/dev/launch/.keep new file mode 100644 index 00000000..e69de29b diff --git a/dev/launch/LaunchKit/.keep b/dev/launch/LaunchKit/.keep new file mode 100644 index 00000000..e69de29b diff --git a/dev/launch/obj/.keep b/dev/launch/obj/.keep new file mode 100644 index 00000000..e69de29b diff --git a/dev/launch/src/.keep b/dev/launch/src/.keep new file mode 100644 index 00000000..e69de29b diff --git a/dev/libDDK/DriverKit/cpp/object.hpp b/dev/libDDK/DriverKit/cpp/object.hpp new file mode 100644 index 00000000..3bf52657 --- /dev/null +++ b/dev/libDDK/DriverKit/cpp/object.hpp @@ -0,0 +1,16 @@ +/* ------------------------------------------- + + Copyright Amlal El Mahrouss 2025, all rights reserved. + + FILE: ddk.h + PURPOSE: DDK Driver model base header. + + ------------------------------------------- */ + +#pragma once + +#include + +#define DK_INTERFACE_IMPL : public ::DKInterface + +class DKInterface; diff --git a/dev/libDDK/DriverKit/ddk.h b/dev/libDDK/DriverKit/ddk.h index 254137f9..2e2dddf0 100644 --- a/dev/libDDK/DriverKit/ddk.h +++ b/dev/libDDK/DriverKit/ddk.h @@ -1,6 +1,6 @@ /* ------------------------------------------- - Copyright Amlal El Mahrouss. + Copyright Amlal El Mahrouss 2025, all rights reserved. FILE: ddk.h PURPOSE: DDK Driver model base header. @@ -29,6 +29,8 @@ struct DDK_STATUS_STRUCT DDK_FINAL { struct DDK_OBJECT_MANIFEST* s_object; }; +typedef void* ptr_t; + /// @brief Call Kernel procedure. /// @param name the procedure name. /// @param cnt number of elements in **dat** diff --git a/dev/libDDK/src/ddk_kernel_call.c b/dev/libDDK/src/ddk_kernel_call.c index 1ac0a0aa..61742b7b 100644 --- a/dev/libDDK/src/ddk_kernel_call.c +++ b/dev/libDDK/src/ddk_kernel_call.c @@ -12,7 +12,7 @@ #include /// @brief this is an internal call, do not use it. -DDK_EXTERN ATTRIBUTE(naked) void* __ke_call_dispatch(const int32_t name, int32_t cnt, void* data, +DDK_EXTERN ATTRIBUTE(naked) ptr_t __ke_call_dispatch(const int32_t name, int32_t cnt, void* data, size_t sz); /// @brief This function hashes the path into a FNV symbol. /// @param path the path to hash. diff --git a/dev/libDDK/src/ddk_kernel_call_dispatch.S b/dev/libDDK/src/ddk_kernel_call_dispatch.S index 7b7a26cb..a607fe40 100644 --- a/dev/libDDK/src/ddk_kernel_call_dispatch.S +++ b/dev/libDDK/src/ddk_kernel_call_dispatch.S @@ -21,10 +21,11 @@ __ke_call_dispatch: push rbp mov rbp, rsp + /* registers have already been pushed. */ + int kKernelCallTrapId pop rbp - ret #elif defined(__DDK_POWER64__) diff --git a/public/frameworks/LaunchHelpers.fwrk/.keep b/public/frameworks/LaunchHelpers.fwrk/.keep new file mode 100644 index 00000000..e69de29b diff --git a/public/frameworks/LaunchHelpers.fwrk/LaunchHelpers.json b/public/frameworks/LaunchHelpers.fwrk/LaunchHelpers.json new file mode 100644 index 00000000..9ec17332 --- /dev/null +++ b/public/frameworks/LaunchHelpers.fwrk/LaunchHelpers.json @@ -0,0 +1,19 @@ +{ + "compiler_path": "clang++", + "compiler_std": "c++20", + "headers_path": [ + "./", + "../../../dev/kernel", + "../../../public/frameworks/", + "../../../dev/", + "./" + ], + "sources_path": [], + "output_name": "./dist/libLaunchHelpers.fwrk.dylib", + "cpp_macros": [ + "kSampleFWVersion=0x0100", + "kSampleFWVersionHighest=0x0100", + "kSampleFWVersionLowest=0x0100", + "__NE_SDK__" + ] +} \ No newline at end of file diff --git a/public/frameworks/LaunchHelpers.fwrk/dist/.keep b/public/frameworks/LaunchHelpers.fwrk/dist/.keep new file mode 100644 index 00000000..e69de29b diff --git a/public/frameworks/LaunchHelpers.fwrk/headers/.keep b/public/frameworks/LaunchHelpers.fwrk/headers/.keep new file mode 100644 index 00000000..e69de29b diff --git a/public/frameworks/LaunchHelpers.fwrk/src/.keep b/public/frameworks/LaunchHelpers.fwrk/src/.keep new file mode 100644 index 00000000..e69de29b diff --git a/public/frameworks/LaunchHelpers.fwrk/src/DylibMain.cc b/public/frameworks/LaunchHelpers.fwrk/src/DylibMain.cc new file mode 100644 index 00000000..99eebd26 --- /dev/null +++ b/public/frameworks/LaunchHelpers.fwrk/src/DylibMain.cc @@ -0,0 +1,5 @@ +#include + +SInt32 _DylibAttach(SInt32 argc, Char* argv[]) { + return EXIT_FAILURE; +} \ No newline at end of file diff --git a/public/frameworks/LaunchHelpers.fwrk/xml/.keep b/public/frameworks/LaunchHelpers.fwrk/xml/.keep new file mode 100644 index 00000000..e69de29b diff --git a/public/frameworks/LaunchHelpers.fwrk/xml/app.xml b/public/frameworks/LaunchHelpers.fwrk/xml/app.xml new file mode 100644 index 00000000..6bc3a3f4 --- /dev/null +++ b/public/frameworks/LaunchHelpers.fwrk/xml/app.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file -- cgit v1.2.3