mirror of
https://github.com/Leonmmcoset/cleonos.git
synced 2026-04-21 18:44:01 +00:00
Stage 16
This commit is contained in:
@@ -15,6 +15,7 @@
|
||||
#include <clks/scheduler.h>
|
||||
#include <clks/serial.h>
|
||||
#include <clks/service.h>
|
||||
#include <clks/shell.h>
|
||||
#include <clks/syscall.h>
|
||||
#include <clks/tty.h>
|
||||
#include <clks/types.h>
|
||||
@@ -62,90 +63,9 @@ static void clks_task_kelfd(u64 tick) {
|
||||
static void clks_task_usrd(u64 tick) {
|
||||
clks_service_heartbeat(CLKS_SERVICE_USER, tick);
|
||||
clks_userland_tick(tick);
|
||||
clks_shell_tick(tick);
|
||||
}
|
||||
|
||||
static void clks_stage15_syscall_probe(void) {
|
||||
char child_name[96];
|
||||
char read_buf[160];
|
||||
u64 root_children;
|
||||
u64 got_name;
|
||||
u64 read_len;
|
||||
u64 run_status;
|
||||
|
||||
root_children = clks_syscall_invoke_kernel(CLKS_SYSCALL_FS_CHILD_COUNT, (u64)"/", 0ULL, 0ULL);
|
||||
clks_log_hex(CLKS_LOG_INFO, "SHELL", "ROOT_CHILDREN", root_children);
|
||||
|
||||
child_name[0] = '\0';
|
||||
got_name = clks_syscall_invoke_kernel(CLKS_SYSCALL_FS_GET_CHILD_NAME, (u64)"/", 0ULL, (u64)child_name);
|
||||
|
||||
if (got_name == 1ULL) {
|
||||
child_name[sizeof(child_name) - 1U] = '\0';
|
||||
clks_log(CLKS_LOG_INFO, "SHELL", "ROOT_ENTRY0");
|
||||
clks_log(CLKS_LOG_INFO, "SHELL", child_name);
|
||||
}
|
||||
|
||||
read_len = clks_syscall_invoke_kernel(CLKS_SYSCALL_FS_READ,
|
||||
(u64)"/README.txt",
|
||||
(u64)read_buf,
|
||||
(u64)(sizeof(read_buf) - 1U));
|
||||
|
||||
if (read_len > 0ULL && read_len != (u64)-1) {
|
||||
if (read_len >= (u64)sizeof(read_buf)) {
|
||||
read_len = (u64)sizeof(read_buf) - 1ULL;
|
||||
}
|
||||
|
||||
read_buf[read_len] = '\0';
|
||||
clks_log(CLKS_LOG_INFO, "SHELL", "README PREVIEW");
|
||||
clks_log(CLKS_LOG_INFO, "SHELL", read_buf);
|
||||
}
|
||||
|
||||
run_status = clks_syscall_invoke_kernel(CLKS_SYSCALL_EXEC_PATH, (u64)"/system/elfrunner.elf", 0ULL, 0ULL);
|
||||
|
||||
if (run_status == 0ULL) {
|
||||
clks_log(CLKS_LOG_INFO, "EXEC", "RUN /SYSTEM/ELFRUNNER.ELF OK");
|
||||
} else {
|
||||
clks_log(CLKS_LOG_WARN, "EXEC", "RUN /SYSTEM/ELFRUNNER.ELF FAILED");
|
||||
}
|
||||
|
||||
clks_log_hex(CLKS_LOG_INFO,
|
||||
"EXEC",
|
||||
"REQUESTS",
|
||||
clks_syscall_invoke_kernel(CLKS_SYSCALL_EXEC_REQUESTS, 0ULL, 0ULL, 0ULL));
|
||||
clks_log_hex(CLKS_LOG_INFO,
|
||||
"EXEC",
|
||||
"SUCCESS",
|
||||
clks_syscall_invoke_kernel(CLKS_SYSCALL_EXEC_SUCCESS, 0ULL, 0ULL, 0ULL));
|
||||
|
||||
clks_log_hex(CLKS_LOG_INFO,
|
||||
"USER",
|
||||
"SHELL_READY",
|
||||
clks_syscall_invoke_kernel(CLKS_SYSCALL_USER_SHELL_READY, 0ULL, 0ULL, 0ULL));
|
||||
clks_log_hex(CLKS_LOG_INFO,
|
||||
"USER",
|
||||
"EXEC_REQUESTED",
|
||||
clks_syscall_invoke_kernel(CLKS_SYSCALL_USER_EXEC_REQUESTED, 0ULL, 0ULL, 0ULL));
|
||||
clks_log_hex(CLKS_LOG_INFO,
|
||||
"USER",
|
||||
"LAUNCH_TRIES",
|
||||
clks_syscall_invoke_kernel(CLKS_SYSCALL_USER_LAUNCH_TRIES, 0ULL, 0ULL, 0ULL));
|
||||
clks_log_hex(CLKS_LOG_INFO,
|
||||
"USER",
|
||||
"LAUNCH_OK",
|
||||
clks_syscall_invoke_kernel(CLKS_SYSCALL_USER_LAUNCH_OK, 0ULL, 0ULL, 0ULL));
|
||||
clks_log_hex(CLKS_LOG_INFO,
|
||||
"USER",
|
||||
"LAUNCH_FAIL",
|
||||
clks_syscall_invoke_kernel(CLKS_SYSCALL_USER_LAUNCH_FAIL, 0ULL, 0ULL, 0ULL));
|
||||
|
||||
clks_log_hex(CLKS_LOG_INFO,
|
||||
"TTY",
|
||||
"COUNT",
|
||||
clks_syscall_invoke_kernel(CLKS_SYSCALL_TTY_COUNT, 0ULL, 0ULL, 0ULL));
|
||||
clks_log_hex(CLKS_LOG_INFO,
|
||||
"TTY",
|
||||
"ACTIVE",
|
||||
clks_syscall_invoke_kernel(CLKS_SYSCALL_TTY_ACTIVE, 0ULL, 0ULL, 0ULL));
|
||||
}
|
||||
void clks_kernel_main(void) {
|
||||
const struct limine_framebuffer *boot_fb;
|
||||
const struct limine_memmap_response *boot_memmap;
|
||||
@@ -171,7 +91,7 @@ void clks_kernel_main(void) {
|
||||
clks_tty_init();
|
||||
}
|
||||
|
||||
clks_log(CLKS_LOG_INFO, "BOOT", "CLEONOS STAGE15 START");
|
||||
clks_log(CLKS_LOG_INFO, "BOOT", "CLEONOS STAGE16 START");
|
||||
|
||||
if (boot_fb == CLKS_NULL) {
|
||||
clks_log(CLKS_LOG_WARN, "VIDEO", "NO FRAMEBUFFER FROM LIMINE");
|
||||
@@ -281,10 +201,12 @@ void clks_kernel_main(void) {
|
||||
syscall_ticks = clks_syscall_invoke_kernel(CLKS_SYSCALL_TIMER_TICKS, 0ULL, 0ULL, 0ULL);
|
||||
clks_log_hex(CLKS_LOG_INFO, "SYSCALL", "TICKS", syscall_ticks);
|
||||
|
||||
clks_stage15_syscall_probe();
|
||||
clks_shell_init();
|
||||
|
||||
clks_log_hex(CLKS_LOG_INFO, "TTY", "COUNT", (u64)clks_tty_count());
|
||||
clks_log_hex(CLKS_LOG_INFO, "TTY", "ACTIVE", (u64)clks_tty_active());
|
||||
clks_log(CLKS_LOG_INFO, "TTY", "VIRTUAL TTY0 READY");
|
||||
clks_log(CLKS_LOG_DEBUG, "KERNEL", "IDLE LOOP ENTER");
|
||||
|
||||
clks_cpu_halt_forever();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user