Recovery stub

This commit is contained in:
Alex 2022-12-26 08:41:43 +02:00
parent 25d30ed1a6
commit 5da3b3ae6c
Signed by untrusted user who does not match committer: enderice2
GPG Key ID: EACC3AD603BAB4DD
4 changed files with 64 additions and 4 deletions

View File

@ -14,6 +14,7 @@
Driver::Driver *DriverManager = nullptr;
Disk::Manager *DiskManager = nullptr;
NetworkInterfaceManager::NetworkInterface *NIManager = nullptr;
Recovery::KernelRecovery *RecoveryScreen = nullptr;
void KernelMainThread()
{
@ -46,7 +47,7 @@ void KernelMainThread()
KPrint("Initializing Network Interface Manager...");
NIManager = new NetworkInterfaceManager::NetworkInterface;
KPrint("Starting Network Interface Manager...");
NIManager->StartService();
// NIManager->StartService();
KPrint("Setting up userspace...");
@ -82,7 +83,9 @@ void KernelMainThread()
KPrint("\eE85230Userspace process exited with code %d", ret.Thread->GetExitCode());
error("Userspace process exited with code %d (%#x)", ret.Thread->GetExitCode(), ret.Thread->GetExitCode());
Exit:
KPrint("Well, this is awkward. I guess you'll have to reboot.");
KPrint("%s exited with code %d! Dropping to recovery screen...", Config.InitPath, ret.Thread->GetExitCode());
TaskManager->Sleep(1000);
RecoveryScreen = new Recovery::KernelRecovery;
CPU::Halt(true);
}

View File

@ -1,2 +1,47 @@
#include <recovery.hpp>
#include <task.hpp>
#include <gui.hpp>
#include <debug.h>
#include "../kernel.h"
using Tasking::IP;
using Tasking::PCB;
using Tasking::TaskTrustLevel;
using Tasking::TCB;
using namespace GraphicalUserInterface;
namespace Recovery
{
void KernelRecovery::RecoveryThread()
{
while (true)
{
}
}
void RecoveryThreadWrapper() { RecoveryScreen->RecoveryThread(); }
GraphicalUserInterface::GUI *gui = nullptr;
void GUIWrapper() { gui->Loop(); }
KernelRecovery::KernelRecovery()
{
// PCB *proc = TaskManager->CreateProcess(TaskManager->GetCurrentProcess(), "Recovery", TaskTrustLevel::Kernel, nullptr);
gui = new GraphicalUserInterface::GUI;
Vector<AuxiliaryVector> auxv;
auxv.push_back({.archaux = {.a_type = AT_NULL, .a_un = {.a_val = 0}}});
// TaskManager->CreateThread(proc, (IP)RecoveryThreadWrapper, nullptr, nullptr, auxv);
TCB *guiThread = TaskManager->CreateThread(TaskManager->GetCurrentProcess(), (IP)GUIWrapper, nullptr, nullptr, auxv);
guiThread->SetPriority(100);
Window *win = new Window(gui, 50, 50, 400, 250, "Recovery");
gui->AddWindow(win);
}
KernelRecovery::~KernelRecovery()
{
delete gui;
}
}

View File

@ -2,10 +2,20 @@
#define __FENNIX_KERNEL_RECOVERY_H__
#include <types.h>
#include <memory.hpp>
namespace Recovery
{
class KernelRecovery
{
private:
Memory::MemMgr *mem;
public:
void RecoveryThread();
KernelRecovery();
~KernelRecovery();
};
}
#endif // !__FENNIX_KERNEL_RECOVERY_H__

View File

@ -5,11 +5,12 @@
#include <boot/binfo.h>
#ifdef __cplusplus
#include <net/nc.hpp>
#include <filesystem.hpp>
#include <recovery.hpp>
#include <display.hpp>
#include <symbols.hpp>
#include <kconfig.hpp>
#include <net/nc.hpp>
#include <driver.hpp>
#include <power.hpp>
#include <task.hpp>
@ -31,6 +32,7 @@ extern FileSystem::Virtual *vfs;
extern Driver::Driver *DriverManager;
extern Disk::Manager *DiskManager;
extern NetworkInterfaceManager::NetworkInterface *NIManager;
extern Recovery::KernelRecovery *RecoveryScreen;
#define PEXIT(Code) TaskManager->GetCurrentProcess()->ExitCode = Code
#define TEXIT(Code) TaskManager->GetCurrentThread()->ExitCode = Code