This commit is contained in:
2026-04-11 14:18:59 +08:00
parent 0f34f8e094
commit c7fee12291
12 changed files with 920 additions and 233 deletions

View File

@@ -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();
}
}