summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--Boot/Sources/ProgramLoader.cxx48
-rw-r--r--Kernel/HALKit/AMD64/HalBoot.asm2
-rw-r--r--Kernel/KernelKit/MP.hxx (renamed from Kernel/KernelKit/MPManager.hpp)29
-rw-r--r--Kernel/KernelKit/PE.hxx73
-rw-r--r--Kernel/KernelKit/User.hxx14
-rw-r--r--Kernel/Sources/FS/NewFS.cxx2
-rw-r--r--Kernel/Sources/MP.cxx (renamed from Kernel/Sources/MPManager.cxx)32
-rw-r--r--Kernel/Sources/Main.cxx4
-rw-r--r--Kernel/Sources/ProcessScheduler.cxx20
-rw-r--r--Kernel/Sources/User.cxx12
-rw-r--r--Kernel/amd64-efi.make5
-rw-r--r--Kernel/arm64-efi.make5
12 files changed, 136 insertions, 110 deletions
diff --git a/Boot/Sources/ProgramLoader.cxx b/Boot/Sources/ProgramLoader.cxx
index fabd1c63..90e4b624 100644
--- a/Boot/Sources/ProgramLoader.cxx
+++ b/Boot/Sources/ProgramLoader.cxx
@@ -41,32 +41,54 @@ namespace Boot
{
writer.Write("newosldr: Windows executable detected.\r");
- ExecHeaderPtr hdrPtr = (ldr_find_exec_header(firstBytes));
- ExecOptionalHeaderPtr optHdr = (ldr_find_opt_exec_header(firstBytes));
+ ExecHeaderPtr hdrPtr = ldr_find_exec_header(firstBytes);
+ ExecOptionalHeaderPtr optHdr = ldr_find_opt_exec_header(firstBytes);
+
+ // ================================ //
+ // Allocate stack.
+ // ================================ //
+ fStackPtr = new Char[optHdr->mSizeOfStackReserve];
+
+ writer.Write("newosldr: Major Linker Ver: ").Write(optHdr->mMajorLinkerVersion).Write("\r");
+ writer.Write("newosldr: Minor Linker Ver: ").Write(optHdr->mMinorLinkerVersion).Write("\r");
+ writer.Write("newosldr: Major Subsystem Ver: ").Write(optHdr->mMajorSubsystemVersion).Write("\r");
+ writer.Write("newosldr: Minor Subsystem Ver: ").Write(optHdr->mMinorSubsystemVersion).Write("\r");
+ writer.Write("newosldr: Magic: ").Write(optHdr->mMagic).Write("\r");
- // Parse PE32+
- fStartAddress = (VoidPtr)(optHdr->mAddressOfEntryPoint);
- fStackPtr = new Char[optHdr->mSizeOfStackReserve];
+ ExecSectionHeaderPtr sectPtr = (ExecSectionHeaderPtr)((UIntPtr)firstBytes + ((DosHeaderPtr)firstBytes)->eLfanew + hdrPtr->mSizeOfOptionalHeader + sizeof(ExecHeader) + sizeof(UInt32));
- writer.Write("newosldr: Major Linker: ").Write(optHdr->mMajorLinkerVersion).Write("\r");
- writer.Write("newosldr: Minor Linker: ").Write(optHdr->mMinorLinkerVersion).Write("\r");
- writer.Write("newosldr: Major Subsystem: ").Write(optHdr->mMajorSubsystemVersion).Write("\r");
- writer.Write("newosldr: Minor Subsystem: ").Write(optHdr->mMinorSubsystemVersion).Write("\r");
- writer.Write("newosldr: Magic: ").Write(optHdr->mMagic).Write("\r");
- writer.Write("newosldr: StartAddress: ").Write((UIntPtr)optHdr->mImageBase + optHdr->mBaseOfCode + optHdr->mAddressOfEntryPoint).Write("\r");
+ constexpr auto cMaxSectionsOfKernel = 10;
+
+ for (SizeT sectIndex = 0; sectIndex < cMaxSectionsOfKernel; ++sectIndex)
+ {
+ ExecSectionHeaderPtr sect = &sectPtr[sectIndex];
+
+ // if this is a code header.
+ if (sect->mCharacteristics & 0x00000020)
+ {
+ fStartAddress = (VoidPtr)(optHdr->mAddressOfEntryPoint + sect->mPointerToRawData +
+ sect->mVirtualAddress);
+ writer.Write("newosldr: Start Address: ").Write((UIntPtr)fStartAddress).Write("\r");
+
+ break;
+ }
+ }
}
else if (firstBytes[0] == kPefMagic[0] &&
firstBytes[1] == kPefMagic[1] &&
firstBytes[2] == kPefMagic[2] &&
firstBytes[3] == kPefMagic[3])
{
- // Parse Non FAT PEF.
+ // ========================================= //
+ // PEF executable detected.
+ // ========================================= //
+
fStartAddress = nullptr;
writer.Write("newosldr: PEF executable detected.\r");
}
else
{
- writer.Write("newosldr: Exec format error.\r");
+ writer.Write("newosldr: Invalid executable.\r");
}
}
diff --git a/Kernel/HALKit/AMD64/HalBoot.asm b/Kernel/HALKit/AMD64/HalBoot.asm
index ab8273a1..ad1c1987 100644
--- a/Kernel/HALKit/AMD64/HalBoot.asm
+++ b/Kernel/HALKit/AMD64/HalBoot.asm
@@ -17,7 +17,7 @@
%define kArchAmd64 122
%define kHandoverMagic 0xBADCC
-section .NewBoot
+section .newosldr
HandoverMagic: dq kHandoverMagic
HandoverType: dw kTypeKernel
diff --git a/Kernel/KernelKit/MPManager.hpp b/Kernel/KernelKit/MP.hxx
index c54f0aaf..325e399c 100644
--- a/Kernel/KernelKit/MPManager.hpp
+++ b/Kernel/KernelKit/MP.hxx
@@ -12,13 +12,14 @@
#include <NewKit/Ref.hxx>
/// @note Last Rev Sun 28 Jul CET 2024
+/// @note Last Rev Thu, Aug 1, 2024 9:07:38 AM
-#define kMaxHarts 8
+#define cMaxHWThreads (8U)
namespace Kernel
{
class HardwareThread;
- class MPManager;
+ class MPCoreScheduler;
using ThreadID = UInt32;
@@ -38,7 +39,7 @@ namespace Kernel
///
/// \name HardwareThread
- /// @brief CPU Hardware Thread (POWER, x64, or 64x0)
+ /// \brief Abstraction over the CPU's core, used to run processes or threads.
///
class HardwareThread final
@@ -76,22 +77,22 @@ namespace Kernel
bool fBusy{false};
private:
- friend class MPManager;
+ friend class MPCoreScheduler;
};
///
- /// \name MPManager
- /// @brief Multi processor manager to manage other cores and dispatch tasks.
+ /// \name MPCoreScheduler
+ /// \brief Class to manage the thread scheduling.
///
- class MPManager final
+ class MPCoreScheduler final
{
private:
- explicit MPManager();
+ explicit MPCoreScheduler();
public:
- ~MPManager();
- NEWOS_COPY_DEFAULT(MPManager);
+ ~MPCoreScheduler();
+ NEWOS_COPY_DEFAULT(MPCoreScheduler);
public:
bool Switch(HAL::StackFramePtr the);
@@ -103,9 +104,9 @@ namespace Kernel
operator bool() noexcept;
public:
- /// @brief Shared instance of the SMP Manager.
- /// @return the reference to the smp manager.
- static Ref<MPManager> The();
+ /// @brief Shared instance of the MP Manager.
+ /// @return the reference to the mp manager class.
+ static Ref<MPCoreScheduler> The();
public:
/// @brief Returns the amount of threads present in the system.
@@ -113,7 +114,7 @@ namespace Kernel
SizeT Count() noexcept;
private:
- Array<HardwareThread, kMaxHarts> fThreadList;
+ Array<HardwareThread, cMaxHWThreads> fThreadList;
ThreadID fCurrentThread{0};
};
diff --git a/Kernel/KernelKit/PE.hxx b/Kernel/KernelKit/PE.hxx
index debd6aba..0788cd2d 100644
--- a/Kernel/KernelKit/PE.hxx
+++ b/Kernel/KernelKit/PE.hxx
@@ -26,7 +26,6 @@
typedef struct ExecHeader final
{
- Kernel::UInt32 mMagic; // PE\0\0 or 0x00004550
Kernel::UInt16 mMachine;
Kernel::UInt16 mNumberOfSections;
Kernel::UInt32 mTimeDateStamp;
@@ -38,40 +37,41 @@ typedef struct ExecHeader final
typedef struct ExecOptionalHeader final
{
- Kernel::UInt16 mMagic; // 0x010b - PE32, 0x020b - PE32+ (64 bit)
- Kernel::UChar mMajorLinkerVersion;
- Kernel::UChar mMinorLinkerVersion;
- Kernel::UIntPtr mSizeOfCode;
- Kernel::UIntPtr mSizeOfInitializedData;
- Kernel::UIntPtr mSizeOfUninitializedData;
- Kernel::UInt32 mAddressOfEntryPoint;
- Kernel::UInt32 mBaseOfCode;
- Kernel::UIntPtr mImageBase;
- Kernel::UInt32 mSectionAlignment;
- Kernel::UInt32 mFileAlignment;
- Kernel::UInt16 mMajorOperatingSystemVersion;
- Kernel::UInt16 mMinorOperatingSystemVersion;
- Kernel::UInt16 mMajorImageVersion;
- Kernel::UInt16 mMinorImageVersion;
- Kernel::UInt16 mMajorSubsystemVersion;
- Kernel::UInt16 mMinorSubsystemVersion;
- Kernel::UInt32 mWin32VersionValue;
- Kernel::UIntPtr mSizeOfImage;
- Kernel::UIntPtr mSizeOfHeaders;
- Kernel::UInt32 mCheckSum;
- Kernel::UInt16 mSubsystem;
- Kernel::UInt16 mDllCharacteristics;
- Kernel::UIntPtr mSizeOfStackReserve;
- Kernel::UIntPtr mSizeOfStackCommit;
- Kernel::UIntPtr mSizeOfHeapReserve;
- Kernel::UIntPtr mSizeOfHeapCommit;
- Kernel::UInt32 mLoaderFlags;
- Kernel::UInt32 mNumberOfRvaAndSizes;
+ Kernel::UInt16 mMagic; // 0x010b - PE32, 0x020b - PE32+ (64 bit)
+ Kernel::UInt8 mMajorLinkerVersion;
+ Kernel::UInt8 mMinorLinkerVersion;
+ Kernel::UInt32 mSizeOfCode;
+ Kernel::UInt32 mSizeOfInitializedData;
+ Kernel::UInt32 mSizeOfUninitializedData;
+ Kernel::UInt32 mAddressOfEntryPoint;
+ Kernel::UInt32 mBaseOfCode;
+ Kernel::UInt32 mBaseOfData;
+ Kernel::UInt32 mImageBase;
+ Kernel::UInt32 mSectionAlignment;
+ Kernel::UInt32 mFileAlignment;
+ Kernel::UInt16 mMajorOperatingSystemVersion;
+ Kernel::UInt16 mMinorOperatingSystemVersion;
+ Kernel::UInt16 mMajorImageVersion;
+ Kernel::UInt16 mMinorImageVersion;
+ Kernel::UInt16 mMajorSubsystemVersion;
+ Kernel::UInt16 mMinorSubsystemVersion;
+ Kernel::UInt32 mWin32VersionValue;
+ Kernel::UInt32 mSizeOfImage;
+ Kernel::UInt32 mSizeOfHeaders;
+ Kernel::UInt32 mCheckSum;
+ Kernel::UInt16 mSubsystem;
+ Kernel::UInt16 mDllCharacteristics;
+ Kernel::UInt32 mSizeOfStackReserve;
+ Kernel::UInt32 mSizeOfStackCommit;
+ Kernel::UInt32 mSizeOfHeapReserve;
+ Kernel::UInt32 mSizeOfHeapCommit;
+ Kernel::UInt32 mLoaderFlags;
+ Kernel::UInt32 mNumberOfRvaAndSizes;
} PACKED ExecOptionalHeader, *ExecOptionalHeaderPtr;
typedef struct ExecSectionHeader final
{
- Kernel::UChar mName[8];
+ Kernel::Char mName[8];
Kernel::UInt32 mVirtualSize;
Kernel::UInt32 mVirtualAddress;
Kernel::UInt32 mSizeOfRawData;
@@ -118,6 +118,15 @@ typedef struct ExecImportDirectory
Kernel::UInt32 mThunkTableRva;
} PACKED ExecImportDirectory, *ExecImportDirectoryPtr;
-#define kPeStart "__ImageStart"
+typedef struct ExecDataDirectory {
+ Kernel::UInt32 VirtualAddress;
+ Kernel::UInt32 Size;
+} ExecDataDirectory, *ExecDataDirectoryPtr;
+
+typedef struct ExecImageHeader {
+ Kernel::UInt32 mSignature;
+ ExecHeader mHeader;
+ ExecOptionalHeader mOptHdr;
+} ExecImageHeader, *ExecImageHeaderPtr;
#endif /* ifndef __KERNELKIT_INC_PE_HXX__ */
diff --git a/Kernel/KernelKit/User.hxx b/Kernel/KernelKit/User.hxx
index 64bb44a7..3f78047c 100644
--- a/Kernel/KernelKit/User.hxx
+++ b/Kernel/KernelKit/User.hxx
@@ -27,7 +27,7 @@
namespace Kernel
{
class User;
- class UserView;
+ class UserManager;
enum class RingKind
{
@@ -72,13 +72,13 @@ namespace Kernel
StringView fUserName;
VoidPtr fUserToken{nullptr};
- friend UserView;
+ friend UserManager;
};
- class UserView final
+ class UserManager final
{
- UserView() = default;
- ~UserView() = default;
+ UserManager() = default;
+ ~UserManager() = default;
User* fCurrentUser = nullptr;
User* fLastLoggedOffUser = nullptr;
@@ -87,9 +87,9 @@ namespace Kernel
User* fRootUser = nullptr;
public:
- NEWOS_COPY_DELETE(UserView);
+ NEWOS_COPY_DELETE(UserManager);
- STATIC UserView* The() noexcept;
+ STATIC UserManager* The() noexcept;
Bool LogIn(User* user, const Char* password) noexcept;
User* Current() noexcept;
Void LogOff() noexcept;
diff --git a/Kernel/Sources/FS/NewFS.cxx b/Kernel/Sources/FS/NewFS.cxx
index ae2013cb..82759c72 100644
--- a/Kernel/Sources/FS/NewFS.cxx
+++ b/Kernel/Sources/FS/NewFS.cxx
@@ -305,7 +305,7 @@ _Output NFS_CATALOG_STRUCT* NewFSParser::CreateCatalog(_Input const char* name,
if (flagsList & kNewFSCatalogKindMetaFile)
{
- if (UserView::The()->Current() != UserView::The()->fRootUser)
+ if (UserManager::The()->Current() != UserManager::The()->fRootUser)
{
delete catalogChild;
return nullptr;
diff --git a/Kernel/Sources/MPManager.cxx b/Kernel/Sources/MP.cxx
index 3ad1e8aa..b83f0817 100644
--- a/Kernel/Sources/MPManager.cxx
+++ b/Kernel/Sources/MP.cxx
@@ -6,13 +6,13 @@
#include <ArchKit/ArchKit.hpp>
#include <KernelKit/ProcessScheduler.hxx>
-#include <KernelKit/MPManager.hpp>
+#include <KernelKit/MP.hxx>
#include <CFKit/Property.hpp>
///! BUGS: 0
-///! @file MPManager.cxx
-///! @brief This file handles multi processing in Kernel.
+///! @file MP.cxx
+///! @brief This file handles multi processing in the kernel.
///! @brief Multi processing is needed for multi-tasking operations.
namespace Kernel
@@ -120,10 +120,10 @@ namespace Kernel
//! @brief Constructor and destructor
///! @brief Default constructor.
- MPManager::MPManager()
+ MPCoreScheduler::MPCoreScheduler()
{
StringView strCoreName(512);
- strCoreName += "\\Properties\\Smp\\SchedulerClass";
+ strCoreName += "\\Class\\Smp\\MPClass";
cSMPCoreName.GetKey() = strCoreName;
cSMPCoreName.GetValue() = (UIntPtr)this;
@@ -132,17 +132,17 @@ namespace Kernel
}
///! @brief Default destructor.
- MPManager::~MPManager() = default;
+ MPCoreScheduler::~MPCoreScheduler() = default;
/// @brief Shared singleton function
- Ref<MPManager> MPManager::The()
+ Ref<MPCoreScheduler> MPCoreScheduler::The()
{
- static MPManager manager;
+ static MPCoreScheduler manager;
return {manager};
}
/// @brief Get Stack Frame of Core
- HAL::StackFramePtr MPManager::Leak() noexcept
+ HAL::StackFramePtr MPCoreScheduler::Leak() noexcept
{
if (fThreadList[fCurrentThread].Leak() &&
ProcessHelper::TheCurrentPID() ==
@@ -153,12 +153,12 @@ namespace Kernel
}
/// @brief Finds and switch to a free core.
- bool MPManager::Switch(HAL::StackFramePtr stack)
+ bool MPCoreScheduler::Switch(HAL::StackFramePtr stack)
{
if (stack == nullptr)
return false;
- for (SizeT idx = 0; idx < kMaxHarts; ++idx)
+ for (SizeT idx = 0; idx < cMaxHWThreads; ++idx)
{
// stack != nullptr -> if core is used, then continue.
if (!fThreadList[idx].Leak() ||
@@ -203,7 +203,7 @@ namespace Kernel
* @param idx the index
* @return the reference to the hardware thread.
*/
- Ref<HardwareThread*> MPManager::operator[](const SizeT& idx)
+ Ref<HardwareThread*> MPCoreScheduler::operator[](const SizeT& idx)
{
if (idx == 0)
{
@@ -212,7 +212,7 @@ namespace Kernel
fThreadList[idx].Leak().Leak()->fKind = kHartBoot;
}
}
- else if (idx >= kMaxHarts)
+ else if (idx >= cMaxHWThreads)
{
static HardwareThread* fakeThread = new HardwareThread();
@@ -233,7 +233,7 @@ namespace Kernel
* Check if thread pool isn't empty.
* @return
*/
- MPManager::operator bool() noexcept
+ MPCoreScheduler::operator bool() noexcept
{
return !fThreadList.Empty();
}
@@ -242,14 +242,14 @@ namespace Kernel
* Reverse operator bool
* @return
*/
- bool MPManager::operator!() noexcept
+ bool MPCoreScheduler::operator!() noexcept
{
return fThreadList.Empty();
}
/// @brief Returns the amount of core present.
/// @return the number of cores.
- SizeT MPManager::Count() noexcept
+ SizeT MPCoreScheduler::Count() noexcept
{
return fThreadList.Count();
}
diff --git a/Kernel/Sources/Main.cxx b/Kernel/Sources/Main.cxx
index 145598ac..a23f82c1 100644
--- a/Kernel/Sources/Main.cxx
+++ b/Kernel/Sources/Main.cxx
@@ -142,8 +142,8 @@ namespace Kernel::Detail
STATIC Kernel::Void ke_user_switch(Kernel::Void)
{
- Kernel::UserView::The()->fRootUser = new User(RingKind::kRingSuperUser, kSuperUser);
- Kernel::UserView::The()->LogIn(Kernel::UserView::The()->fRootUser, "root");
+ Kernel::UserManager::The()->fRootUser = new User(RingKind::kRingSuperUser, kSuperUser);
+ Kernel::UserManager::The()->LogIn(Kernel::UserManager::The()->fRootUser, "root");
Kernel::kcout << "newoskrnl: " << cKernelVersion.GetKey().CData() << ": " << Kernel::number(cKernelVersion.GetValue()) << Kernel::endl;
}
diff --git a/Kernel/Sources/ProcessScheduler.cxx b/Kernel/Sources/ProcessScheduler.cxx
index 94ae5fad..84fc7a1f 100644
--- a/Kernel/Sources/ProcessScheduler.cxx
+++ b/Kernel/Sources/ProcessScheduler.cxx
@@ -11,7 +11,7 @@
#include <KernelKit/ProcessScheduler.hxx>
#include <KernelKit/PEFSharedObject.hxx>
-#include <KernelKit/MPManager.hpp>
+#include <KernelKit/MP.hxx>
#include <KernelKit/Heap.hxx>
#include <NewKit/String.hpp>
#include <KernelKit/LPC.hxx>
@@ -395,29 +395,29 @@ namespace Kernel
if (!the_stack || new_pid < 0)
return false;
- for (SizeT index = 0UL; index < MPManager::The().Leak().Count(); ++index)
+ for (SizeT index = 0UL; index < MPCoreScheduler::The().Leak().Count(); ++index)
{
- if (MPManager::The().Leak()[index].Leak()->Kind() == kInvalidHart)
+ if (MPCoreScheduler::The().Leak()[index].Leak()->Kind() == kInvalidHart)
continue;
- if (MPManager::The().Leak()[index].Leak()->StackFrame() == the_stack)
+ if (MPCoreScheduler::The().Leak()[index].Leak()->StackFrame() == the_stack)
{
- MPManager::The().Leak()[index].Leak()->Busy(false);
+ MPCoreScheduler::The().Leak()[index].Leak()->Busy(false);
continue;
}
- if (MPManager::The().Leak()[index].Leak()->IsBusy())
+ if (MPCoreScheduler::The().Leak()[index].Leak()->IsBusy())
continue;
- if (MPManager::The().Leak()[index].Leak()->Kind() !=
+ if (MPCoreScheduler::The().Leak()[index].Leak()->Kind() !=
ThreadKind::kHartBoot &&
- MPManager::The().Leak()[index].Leak()->Kind() !=
+ MPCoreScheduler::The().Leak()[index].Leak()->Kind() !=
ThreadKind::kHartSystemReserved)
{
- MPManager::The().Leak()[index].Leak()->Busy(true);
+ MPCoreScheduler::The().Leak()[index].Leak()->Busy(true);
ProcessHelper::TheCurrentPID() = new_pid;
- return MPManager::The().Leak()[index].Leak()->Switch(the_stack);
+ return MPCoreScheduler::The().Leak()[index].Leak()->Switch(the_stack);
}
}
diff --git a/Kernel/Sources/User.cxx b/Kernel/Sources/User.cxx
index dda3d016..e546dd81 100644
--- a/Kernel/Sources/User.cxx
+++ b/Kernel/Sources/User.cxx
@@ -69,17 +69,17 @@ namespace Kernel
return this->Ring() == RingKind::kRingSuperUser;
}
- UserView* UserView::The() noexcept
+ UserManager* UserManager::The() noexcept
{
- UserView* view = nullptr;
+ UserManager* view = nullptr;
if (!view)
- view = new UserView();
+ view = new UserManager();
return view;
}
- Bool UserView::LogIn(User* user, const Char* password) noexcept
+ Bool UserManager::LogIn(User* user, const Char* password) noexcept
{
if (!password ||
!user)
@@ -143,12 +143,12 @@ namespace Kernel
return true;
}
- User* UserView::Current() noexcept
+ User* UserManager::Current() noexcept
{
return fCurrentUser;
}
- Void UserView::LogOff() noexcept
+ Void UserManager::LogOff() noexcept
{
if (!fCurrentUser)
return;
diff --git a/Kernel/amd64-efi.make b/Kernel/amd64-efi.make
index a6bd3772..934481af 100644
--- a/Kernel/amd64-efi.make
+++ b/Kernel/amd64-efi.make
@@ -39,7 +39,6 @@ LDOBJ = Objects/*.obj
# This file is the kernel, responsible of task management and memory.
KERNEL = newoskrnl.exe
-KERNEL_512K = newoskrnl.512k.exe
.PHONY: error
error:
@@ -71,8 +70,6 @@ link-amd64-epm:
.PHONY: all
all: newos-amd64-epm link-amd64-epm
- qemu-img create -f raw $(KERNEL_512K) 512K
- dd if=newoskrnl.exe of=$(KERNEL_512K) bs=1 seek=0 conv=notrunc
@echo "NewOSKrnl => OK."
.PHONY: help
@@ -84,4 +81,4 @@ help:
.PHONY: clean
clean:
- rm -f $(LDOBJ) $(wildcard *.o) $(KERNEL) $(KERNEL_512K)
+ rm -f $(LDOBJ) $(wildcard *.o) $(KERNEL)
diff --git a/Kernel/arm64-efi.make b/Kernel/arm64-efi.make
index 60ccb5de..310ffcdd 100644
--- a/Kernel/arm64-efi.make
+++ b/Kernel/arm64-efi.make
@@ -28,7 +28,6 @@ LDOBJ = Objects/*.obj
# This file is the kernel, responsible of task management and memory.
KERNEL = newoskrnl.exe
-KERNEL_512K = newoskrnl.512k.exe
.PHONY: error
error:
@@ -55,8 +54,6 @@ link-arm64-epm:
.PHONY: all
all: newos-arm64-epm link-arm64-epm
- qemu-img create -f raw $(KERNEL_512K) 512K
- dd if=newoskrnl.exe of=$(KERNEL_512K) bs=1 seek=0 conv=notrunc
@echo "NewOSKrnl => OK."
.PHONY: help
@@ -68,4 +65,4 @@ help:
.PHONY: clean
clean:
- rm -f $(LDOBJ) $(wildcard *.o) $(KERNEL) $(KERNEL_512K)
+ rm -f $(LDOBJ) $(wildcard *.o) $(KERNEL)