mirror of
https://github.com/Fennix-Project/Kernel.git
synced 2025-05-25 22:14:37 +00:00
Recovery stub
This commit is contained in:
parent
25d30ed1a6
commit
5da3b3ae6c
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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__
|
||||
|
4
kernel.h
4
kernel.h
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user