feat: initial scalable x86_64 microkernel skeleton with Limine, Rust, C HAL, and C++20 IPC
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
#include "ipc.hpp"
|
||||
#include "stdio.h"
|
||||
#include "string.h"
|
||||
|
||||
extern "C" void _start() {
|
||||
puts("[INIT-SERVER] Userspace Root Init Server Started (Ring 3)!");
|
||||
|
||||
// 1. Instantiate RAII IPC Endpoint for Kernel Control
|
||||
ipc::Endpoint kernel_ctrl(CAP_SELF_TASK);
|
||||
|
||||
puts("[INIT-SERVER] Sending Fast-Path IPC Ping to Microkernel...");
|
||||
auto ping_res = kernel_ctrl.call(IPC_OP_PING, 100);
|
||||
|
||||
if (ping_res.is_ok()) {
|
||||
puts("[INIT-SERVER] Received IPC Ping Response from Microkernel!");
|
||||
} else {
|
||||
puts("[INIT-SERVER] IPC Call Failed!");
|
||||
}
|
||||
|
||||
// 2. Register Server Endpoint
|
||||
puts("[INIT-SERVER] Registering Root Server Capability...");
|
||||
auto reg_res = kernel_ctrl.call(IPC_OP_REGISTER_SERVER, 0x1337BEEF);
|
||||
if (reg_res.is_ok()) {
|
||||
puts("[INIT-SERVER] Server Registered Successfully!");
|
||||
}
|
||||
|
||||
puts("[INIT-SERVER] Root Init Server ready. Entering event loop.");
|
||||
|
||||
while (true) {
|
||||
sys_yield();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
#include "ipc.hpp"
|
||||
#include "stdio.h"
|
||||
|
||||
extern "C" void _start() {
|
||||
puts("[PROCMGR] Process & Server Manager Daemon Initialized.");
|
||||
|
||||
while (true) {
|
||||
sys_yield();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
#include "uart.h"
|
||||
#include "stdio.h"
|
||||
#include "abi/syscalls.h"
|
||||
|
||||
extern void _start(void) {
|
||||
uart_init(UART_COM1_PORT, 115200);
|
||||
uart_puts(UART_COM1_PORT, "[RING3-UART-DRIVER] 16550 UART COM1 initialized from userspace!\n");
|
||||
|
||||
while (1) {
|
||||
if (uart_has_data(UART_COM1_PORT)) {
|
||||
char c = uart_getc(UART_COM1_PORT);
|
||||
// Echo back
|
||||
uart_putc(UART_COM1_PORT, c);
|
||||
}
|
||||
sys_yield();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user