summaryrefslogtreecommitdiffhomepage
path: root/dev/Kernel/src/KernelMain.cc
diff options
context:
space:
mode:
Diffstat (limited to 'dev/Kernel/src/KernelMain.cc')
-rw-r--r--dev/Kernel/src/KernelMain.cc102
1 files changed, 102 insertions, 0 deletions
diff --git a/dev/Kernel/src/KernelMain.cc b/dev/Kernel/src/KernelMain.cc
new file mode 100644
index 00000000..7875fa7c
--- /dev/null
+++ b/dev/Kernel/src/KernelMain.cc
@@ -0,0 +1,102 @@
+/* -------------------------------------------
+
+ Copyright Amlal EL Mahrouss
+
+ File: Main.cxx
+ Purpose: Main entrypoint of kernel.
+
+------------------------------------------- */
+
+#include <KernelKit/PE.h>
+#include <ArchKit/ArchKit.h>
+#include <CompilerKit/Detail.h>
+#include <FirmwareKit/Handover.h>
+#include <KernelKit/FileMgr.h>
+#include <KernelKit/Heap.h>
+#include <KernelKit/PEF.h>
+#include <KernelKit/PEFCodeMgr.h>
+#include <KernelKit/UserProcessScheduler.h>
+#include <KernelKit/Heap.h>
+#include <NewKit/Json.h>
+#include <NewKit/KString.h>
+#include <NewKit/Utils.h>
+#include <KernelKit/CodeMgr.h>
+#include <CFKit/Property.h>
+#include <KernelKit/Timer.h>
+
+#ifdef __ZKA_AUTO_FORMAT__
+namespace Kernel::Detail
+{
+ /// @brief Filesystem auto formatter, additional checks are also done by the class.
+ class NeFilesystemInstaller final
+ {
+ private:
+ Kernel::NeFileSystemParser* mNeFS{nullptr};
+ Kernel::NeFileSystemJournal mJournal;
+
+ public:
+ /// @brief wizard constructor.
+ explicit NeFilesystemInstaller()
+ {
+ mNeFS = new Kernel::NeFileSystemParser();
+
+ if (mNeFS)
+ {
+ const SizeT kFolderCount = 13;
+ const Char* kFolderStr[kFolderCount] = {
+ "/", "/boot/", "/sys/", "/media/", "/etc/",
+ "/usr/", "/lib/", "/mnt/", "/sbin/", "/n/", "/dev/", "/run/", "/root/"};
+
+ for (Kernel::SizeT dir_index = 0UL; dir_index < kFolderCount; ++dir_index)
+ {
+ auto catalog_folder = mNeFS->GetCatalog(kFolderStr[dir_index]);
+
+ if (catalog_folder)
+ {
+ delete catalog_folder;
+ catalog_folder = nullptr;
+
+ continue;
+ }
+
+ catalog_folder = mNeFS->CreateCatalog(kFolderStr[dir_index], 0,
+ kNeFSCatalogKindDir);
+
+ if (!catalog_folder)
+ continue;
+
+ delete catalog_folder;
+ catalog_folder = nullptr;
+ }
+
+ if (!mJournal.GetJournal(mNeFS))
+ mJournal.CreateJournal(mNeFS);
+
+ mJournal.CommitJournal(mNeFS, "<LOG_XML><FS>NeFS</FS></LOG_XML>", "NeFS Format System");
+ mJournal.ReleaseJournal();
+ }
+ }
+
+ ~NeFilesystemInstaller()
+ {
+ if (mNeFS)
+ delete mNeFS;
+
+ mNeFS = nullptr;
+ }
+
+ ZKA_COPY_DEFAULT(NeFilesystemInstaller);
+ };
+} // namespace Kernel::Detail
+#endif // ifdef __ZKA_AUTO_FORMAT__
+
+/// @brief Kernel entrypoint.
+/// @param Void
+/// @return Void
+EXTERN_C Kernel::Void rtl_kernel_main(Kernel::SizeT argc, char** argv, char** envp, Kernel::SizeT envp_len)
+{
+#ifdef __ZKA_AUTO_FORMAT__
+ Kernel::NeFS::fs_init_nefs();
+ Kernel::Detail::NeFilesystemInstaller installer{};
+#endif // __ZKA_AUTO_FORMAT__
+}