mirror of
https://github.com/Fennix-Project/Kernel.git
synced 2025-05-27 15:04:33 +00:00
Recovery stub
This commit is contained in:
parent
25d30ed1a6
commit
5da3b3ae6c
@ -14,6 +14,7 @@
|
|||||||
Driver::Driver *DriverManager = nullptr;
|
Driver::Driver *DriverManager = nullptr;
|
||||||
Disk::Manager *DiskManager = nullptr;
|
Disk::Manager *DiskManager = nullptr;
|
||||||
NetworkInterfaceManager::NetworkInterface *NIManager = nullptr;
|
NetworkInterfaceManager::NetworkInterface *NIManager = nullptr;
|
||||||
|
Recovery::KernelRecovery *RecoveryScreen = nullptr;
|
||||||
|
|
||||||
void KernelMainThread()
|
void KernelMainThread()
|
||||||
{
|
{
|
||||||
@ -46,7 +47,7 @@ void KernelMainThread()
|
|||||||
KPrint("Initializing Network Interface Manager...");
|
KPrint("Initializing Network Interface Manager...");
|
||||||
NIManager = new NetworkInterfaceManager::NetworkInterface;
|
NIManager = new NetworkInterfaceManager::NetworkInterface;
|
||||||
KPrint("Starting Network Interface Manager...");
|
KPrint("Starting Network Interface Manager...");
|
||||||
NIManager->StartService();
|
// NIManager->StartService();
|
||||||
|
|
||||||
KPrint("Setting up userspace...");
|
KPrint("Setting up userspace...");
|
||||||
|
|
||||||
@ -82,7 +83,9 @@ void KernelMainThread()
|
|||||||
KPrint("\eE85230Userspace process exited with code %d", ret.Thread->GetExitCode());
|
KPrint("\eE85230Userspace process exited with code %d", ret.Thread->GetExitCode());
|
||||||
error("Userspace process exited with code %d (%#x)", ret.Thread->GetExitCode(), ret.Thread->GetExitCode());
|
error("Userspace process exited with code %d (%#x)", ret.Thread->GetExitCode(), ret.Thread->GetExitCode());
|
||||||
Exit:
|
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);
|
CPU::Halt(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,2 +1,47 @@
|
|||||||
#include <recovery.hpp>
|
#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__
|
#define __FENNIX_KERNEL_RECOVERY_H__
|
||||||
|
|
||||||
#include <types.h>
|
#include <types.h>
|
||||||
|
#include <memory.hpp>
|
||||||
|
|
||||||
namespace Recovery
|
namespace Recovery
|
||||||
{
|
{
|
||||||
|
class KernelRecovery
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
Memory::MemMgr *mem;
|
||||||
|
|
||||||
|
public:
|
||||||
|
void RecoveryThread();
|
||||||
|
KernelRecovery();
|
||||||
|
~KernelRecovery();
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // !__FENNIX_KERNEL_RECOVERY_H__
|
#endif // !__FENNIX_KERNEL_RECOVERY_H__
|
||||||
|
4
kernel.h
4
kernel.h
@ -5,11 +5,12 @@
|
|||||||
|
|
||||||
#include <boot/binfo.h>
|
#include <boot/binfo.h>
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
#include <net/nc.hpp>
|
|
||||||
#include <filesystem.hpp>
|
#include <filesystem.hpp>
|
||||||
|
#include <recovery.hpp>
|
||||||
#include <display.hpp>
|
#include <display.hpp>
|
||||||
#include <symbols.hpp>
|
#include <symbols.hpp>
|
||||||
#include <kconfig.hpp>
|
#include <kconfig.hpp>
|
||||||
|
#include <net/nc.hpp>
|
||||||
#include <driver.hpp>
|
#include <driver.hpp>
|
||||||
#include <power.hpp>
|
#include <power.hpp>
|
||||||
#include <task.hpp>
|
#include <task.hpp>
|
||||||
@ -31,6 +32,7 @@ extern FileSystem::Virtual *vfs;
|
|||||||
extern Driver::Driver *DriverManager;
|
extern Driver::Driver *DriverManager;
|
||||||
extern Disk::Manager *DiskManager;
|
extern Disk::Manager *DiskManager;
|
||||||
extern NetworkInterfaceManager::NetworkInterface *NIManager;
|
extern NetworkInterfaceManager::NetworkInterface *NIManager;
|
||||||
|
extern Recovery::KernelRecovery *RecoveryScreen;
|
||||||
|
|
||||||
#define PEXIT(Code) TaskManager->GetCurrentProcess()->ExitCode = Code
|
#define PEXIT(Code) TaskManager->GetCurrentProcess()->ExitCode = Code
|
||||||
#define TEXIT(Code) TaskManager->GetCurrentThread()->ExitCode = Code
|
#define TEXIT(Code) TaskManager->GetCurrentThread()->ExitCode = Code
|
||||||
|
Loading…
x
Reference in New Issue
Block a user