mirror of
https://github.com/Leonmmcoset/cleonos.git
synced 2026-04-21 18:44:01 +00:00
menuconfig++
This commit is contained in:
@@ -37,6 +37,10 @@ typedef u64 (*clks_exec_entry_fn)(void);
|
||||
#define CLKS_EXEC_FD_INHERIT ((u64)-1)
|
||||
#define CLKS_EXEC_DYNLIB_MAX 32U
|
||||
|
||||
#ifndef CLKS_CFG_EXEC_SERIAL_LOG
|
||||
#define CLKS_CFG_EXEC_SERIAL_LOG 1
|
||||
#endif
|
||||
|
||||
#define CLKS_EXEC_ELF64_MAGIC_0 0x7FU
|
||||
#define CLKS_EXEC_ELF64_MAGIC_1 'E'
|
||||
#define CLKS_EXEC_ELF64_MAGIC_2 'L'
|
||||
@@ -193,6 +197,11 @@ static void clks_exec_serial_write_hex64(u64 value) {
|
||||
}
|
||||
|
||||
static void clks_exec_log_info_serial(const char *message) {
|
||||
if (CLKS_CFG_EXEC_SERIAL_LOG == 0) {
|
||||
(void)message;
|
||||
return;
|
||||
}
|
||||
|
||||
clks_serial_write("[INFO][EXEC] ");
|
||||
|
||||
if (message != CLKS_NULL) {
|
||||
@@ -203,6 +212,12 @@ static void clks_exec_log_info_serial(const char *message) {
|
||||
}
|
||||
|
||||
static void clks_exec_log_hex_serial(const char *label, u64 value) {
|
||||
if (CLKS_CFG_EXEC_SERIAL_LOG == 0) {
|
||||
(void)label;
|
||||
(void)value;
|
||||
return;
|
||||
}
|
||||
|
||||
clks_serial_write("[INFO][EXEC] ");
|
||||
|
||||
if (label != CLKS_NULL) {
|
||||
|
||||
@@ -30,6 +30,18 @@
|
||||
#define CLKS_KBD_TTY_MAX 8U
|
||||
#define CLKS_KBD_DROP_LOG_EVERY 64ULL
|
||||
|
||||
#ifndef CLKS_CFG_KBD_TTY_SWITCH_HOTKEY
|
||||
#define CLKS_CFG_KBD_TTY_SWITCH_HOTKEY 1
|
||||
#endif
|
||||
|
||||
#ifndef CLKS_CFG_KBD_CTRL_SHORTCUTS
|
||||
#define CLKS_CFG_KBD_CTRL_SHORTCUTS 1
|
||||
#endif
|
||||
|
||||
#ifndef CLKS_CFG_KBD_FORCE_STOP_HOTKEY
|
||||
#define CLKS_CFG_KBD_FORCE_STOP_HOTKEY 1
|
||||
#endif
|
||||
|
||||
static const char clks_kbd_map[128] = {
|
||||
[2] = '1', [3] = '2', [4] = '3', [5] = '4', [6] = '5', [7] = '6', [8] = '7', [9] = '8',
|
||||
[10] = '9', [11] = '0', [12] = '-', [13] = '=', [14] = '\b', [15] = '\t',
|
||||
@@ -178,6 +190,10 @@ static clks_bool clks_keyboard_ctrl_active(void) {
|
||||
static clks_bool clks_keyboard_try_emit_ctrl_shortcut(u8 code, u32 tty_index) {
|
||||
char shortcut = '\0';
|
||||
|
||||
if (CLKS_CFG_KBD_CTRL_SHORTCUTS == 0) {
|
||||
return CLKS_FALSE;
|
||||
}
|
||||
|
||||
if (clks_keyboard_ctrl_active() == CLKS_FALSE) {
|
||||
return CLKS_FALSE;
|
||||
}
|
||||
@@ -208,6 +224,10 @@ static clks_bool clks_keyboard_try_force_stop_hotkey(u8 code) {
|
||||
u64 pid = 0ULL;
|
||||
u64 stop_ret;
|
||||
|
||||
if (CLKS_CFG_KBD_FORCE_STOP_HOTKEY == 0) {
|
||||
return CLKS_FALSE;
|
||||
}
|
||||
|
||||
if (code != CLKS_SC_C) {
|
||||
return CLKS_FALSE;
|
||||
}
|
||||
@@ -254,7 +274,20 @@ void clks_keyboard_init(void) {
|
||||
clks_kbd_pop_count = 0ULL;
|
||||
clks_kbd_drop_count = 0ULL;
|
||||
|
||||
clks_log(CLKS_LOG_INFO, "KBD", "ALT+F1..F4 TTY HOTKEY ONLINE");
|
||||
if (CLKS_CFG_KBD_TTY_SWITCH_HOTKEY != 0) {
|
||||
clks_log(CLKS_LOG_INFO, "KBD", "ALT+F1..F4 TTY HOTKEY ONLINE");
|
||||
} else {
|
||||
clks_log(CLKS_LOG_WARN, "KBD", "TTY SWITCH HOTKEY DISABLED BY MENUCONFIG");
|
||||
}
|
||||
|
||||
if (CLKS_CFG_KBD_CTRL_SHORTCUTS == 0) {
|
||||
clks_log(CLKS_LOG_WARN, "KBD", "CTRL SHORTCUTS DISABLED BY MENUCONFIG");
|
||||
}
|
||||
|
||||
if (CLKS_CFG_KBD_FORCE_STOP_HOTKEY == 0) {
|
||||
clks_log(CLKS_LOG_WARN, "KBD", "CTRL+ALT+C FORCE STOP DISABLED BY MENUCONFIG");
|
||||
}
|
||||
|
||||
clks_log(CLKS_LOG_INFO, "KBD", "PS2 INPUT QUEUE ONLINE");
|
||||
clks_log_hex(CLKS_LOG_INFO, "KBD", "QUEUE_CAP", CLKS_KBD_INPUT_CAP);
|
||||
}
|
||||
@@ -350,7 +383,10 @@ void clks_keyboard_handle_scancode(u8 scancode) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (clks_kbd_alt_down == CLKS_TRUE && code >= CLKS_SC_F1 && code <= CLKS_SC_F4) {
|
||||
if (CLKS_CFG_KBD_TTY_SWITCH_HOTKEY != 0 &&
|
||||
clks_kbd_alt_down == CLKS_TRUE &&
|
||||
code >= CLKS_SC_F1 &&
|
||||
code <= CLKS_SC_F4) {
|
||||
u32 target = (u32)(code - CLKS_SC_F1);
|
||||
u32 before = clks_tty_active();
|
||||
u32 after;
|
||||
|
||||
@@ -110,6 +110,18 @@
|
||||
#define CLKS_CFG_IDLE_DEBUG_LOG 1
|
||||
#endif
|
||||
|
||||
#ifndef CLKS_CFG_SCHED_TASK_COUNT_LOG
|
||||
#define CLKS_CFG_SCHED_TASK_COUNT_LOG 1
|
||||
#endif
|
||||
|
||||
#ifndef CLKS_CFG_INTERRUPT_READY_LOG
|
||||
#define CLKS_CFG_INTERRUPT_READY_LOG 1
|
||||
#endif
|
||||
|
||||
#ifndef CLKS_CFG_SHELL_MODE_LOG
|
||||
#define CLKS_CFG_SHELL_MODE_LOG 1
|
||||
#endif
|
||||
|
||||
#if CLKS_CFG_KLOGD_TASK
|
||||
static void clks_task_klogd(u64 tick) {
|
||||
static u64 last_emit = 0ULL;
|
||||
@@ -173,7 +185,6 @@ void clks_kernel_main(void) {
|
||||
const struct limine_memmap_response *boot_memmap;
|
||||
struct clks_pmm_stats pmm_stats;
|
||||
struct clks_heap_stats heap_stats;
|
||||
struct clks_scheduler_stats sched_stats;
|
||||
struct clks_fs_node_info fs_system_dir = {0};
|
||||
u64 syscall_ticks;
|
||||
u64 fs_root_children;
|
||||
@@ -372,8 +383,14 @@ void clks_kernel_main(void) {
|
||||
clks_log(CLKS_LOG_WARN, "SCHED", "USRD TASK DISABLED BY MENUCONFIG");
|
||||
#endif
|
||||
|
||||
sched_stats = clks_scheduler_get_stats();
|
||||
clks_log_hex(CLKS_LOG_INFO, "SCHED", "TASK_COUNT", sched_stats.task_count);
|
||||
#if CLKS_CFG_SCHED_TASK_COUNT_LOG
|
||||
{
|
||||
struct clks_scheduler_stats sched_stats = clks_scheduler_get_stats();
|
||||
clks_log_hex(CLKS_LOG_INFO, "SCHED", "TASK_COUNT", sched_stats.task_count);
|
||||
}
|
||||
#else
|
||||
clks_log(CLKS_LOG_WARN, "CFG", "SCHED TASK COUNT LOG DISABLED BY MENUCONFIG");
|
||||
#endif
|
||||
|
||||
clks_service_init();
|
||||
|
||||
@@ -398,7 +415,9 @@ void clks_kernel_main(void) {
|
||||
clks_syscall_init();
|
||||
|
||||
clks_interrupts_init();
|
||||
#if CLKS_CFG_INTERRUPT_READY_LOG
|
||||
clks_log(CLKS_LOG_INFO, "INT", "IDT + PIC INITIALIZED");
|
||||
#endif
|
||||
|
||||
#if CLKS_CFG_SYSCALL_TICK_QUERY
|
||||
syscall_ticks = clks_syscall_invoke_kernel(CLKS_SYSCALL_TIMER_TICKS, 0ULL, 0ULL, 0ULL);
|
||||
@@ -411,14 +430,18 @@ void clks_kernel_main(void) {
|
||||
clks_shell_init();
|
||||
|
||||
#if CLKS_CFG_USRD_TASK
|
||||
#if CLKS_CFG_SHELL_MODE_LOG
|
||||
if (clks_userland_shell_auto_exec_enabled() == CLKS_TRUE) {
|
||||
clks_log(CLKS_LOG_INFO, "SHELL", "DEFAULT ENTER USER SHELL MODE");
|
||||
} else {
|
||||
clks_log(CLKS_LOG_INFO, "SHELL", "KERNEL SHELL ACTIVE");
|
||||
}
|
||||
#endif
|
||||
#else
|
||||
#if CLKS_CFG_SHELL_MODE_LOG
|
||||
clks_log(CLKS_LOG_WARN, "SHELL", "USRD TASK DISABLED; INTERACTIVE SHELL TICK OFF");
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if CLKS_CFG_TTY_READY_LOG
|
||||
clks_log_hex(CLKS_LOG_INFO, "TTY", "COUNT", (u64)clks_tty_count());
|
||||
|
||||
@@ -35,6 +35,10 @@
|
||||
#define CLKS_SYSCALL_STATS_MAX_ID CLKS_SYSCALL_EXEC_PATHV_IO
|
||||
#define CLKS_SYSCALL_STATS_RING_SIZE 256U
|
||||
|
||||
#ifndef CLKS_CFG_PROCFS
|
||||
#define CLKS_CFG_PROCFS 1
|
||||
#endif
|
||||
|
||||
struct clks_syscall_frame {
|
||||
u64 rax;
|
||||
u64 rbx;
|
||||
@@ -1079,7 +1083,7 @@ static u64 clks_syscall_fs_child_count(u64 arg0) {
|
||||
return (u64)-1;
|
||||
}
|
||||
|
||||
if (clks_syscall_procfs_is_root(path) == CLKS_TRUE) {
|
||||
if (CLKS_CFG_PROCFS != 0 && clks_syscall_procfs_is_root(path) == CLKS_TRUE) {
|
||||
return 2ULL + clks_exec_proc_count();
|
||||
}
|
||||
|
||||
@@ -1089,7 +1093,9 @@ static u64 clks_syscall_fs_child_count(u64 arg0) {
|
||||
return (u64)-1;
|
||||
}
|
||||
|
||||
if (clks_syscall_fs_is_root(path) == CLKS_TRUE && clks_syscall_fs_has_real_proc_dir() == CLKS_FALSE) {
|
||||
if (CLKS_CFG_PROCFS != 0 &&
|
||||
clks_syscall_fs_is_root(path) == CLKS_TRUE &&
|
||||
clks_syscall_fs_has_real_proc_dir() == CLKS_FALSE) {
|
||||
return base_count + 1ULL;
|
||||
}
|
||||
|
||||
@@ -1107,7 +1113,7 @@ static u64 clks_syscall_fs_get_child_name(u64 arg0, u64 arg1, u64 arg2) {
|
||||
return 0ULL;
|
||||
}
|
||||
|
||||
if (clks_syscall_procfs_is_root(path) == CLKS_TRUE) {
|
||||
if (CLKS_CFG_PROCFS != 0 && clks_syscall_procfs_is_root(path) == CLKS_TRUE) {
|
||||
if (arg1 == 0ULL) {
|
||||
clks_memset((void *)arg2, 0, CLKS_SYSCALL_NAME_MAX);
|
||||
clks_memcpy((void *)arg2, "self", 5U);
|
||||
@@ -1142,7 +1148,9 @@ static u64 clks_syscall_fs_get_child_name(u64 arg0, u64 arg1, u64 arg2) {
|
||||
}
|
||||
}
|
||||
|
||||
if (clks_syscall_fs_is_root(path) == CLKS_TRUE && clks_syscall_fs_has_real_proc_dir() == CLKS_FALSE) {
|
||||
if (CLKS_CFG_PROCFS != 0 &&
|
||||
clks_syscall_fs_is_root(path) == CLKS_TRUE &&
|
||||
clks_syscall_fs_has_real_proc_dir() == CLKS_FALSE) {
|
||||
if (arg1 == 0ULL) {
|
||||
clks_memset((void *)arg2, 0, CLKS_SYSCALL_NAME_MAX);
|
||||
clks_memcpy((void *)arg2, "proc", 5U);
|
||||
@@ -1177,9 +1185,10 @@ static u64 clks_syscall_fs_read(u64 arg0, u64 arg1, u64 arg2) {
|
||||
return 0ULL;
|
||||
}
|
||||
|
||||
if (clks_syscall_procfs_is_list(path) == CLKS_TRUE ||
|
||||
clks_syscall_procfs_is_self(path) == CLKS_TRUE ||
|
||||
clks_syscall_procfs_parse_pid(path, &file_size) == CLKS_TRUE) {
|
||||
if (CLKS_CFG_PROCFS != 0 &&
|
||||
(clks_syscall_procfs_is_list(path) == CLKS_TRUE ||
|
||||
clks_syscall_procfs_is_self(path) == CLKS_TRUE ||
|
||||
clks_syscall_procfs_parse_pid(path, &file_size) == CLKS_TRUE)) {
|
||||
char proc_text[CLKS_SYSCALL_PROCFS_TEXT_MAX];
|
||||
usize proc_len = 0U;
|
||||
|
||||
@@ -1479,15 +1488,16 @@ static u64 clks_syscall_fs_stat_type(u64 arg0) {
|
||||
return (u64)-1;
|
||||
}
|
||||
|
||||
if (clks_syscall_procfs_is_root(path) == CLKS_TRUE) {
|
||||
if (CLKS_CFG_PROCFS != 0 && clks_syscall_procfs_is_root(path) == CLKS_TRUE) {
|
||||
return (u64)CLKS_FS_NODE_DIR;
|
||||
}
|
||||
|
||||
if (clks_syscall_procfs_is_list(path) == CLKS_TRUE || clks_syscall_procfs_is_self(path) == CLKS_TRUE) {
|
||||
if (CLKS_CFG_PROCFS != 0 &&
|
||||
(clks_syscall_procfs_is_list(path) == CLKS_TRUE || clks_syscall_procfs_is_self(path) == CLKS_TRUE)) {
|
||||
return (u64)CLKS_FS_NODE_FILE;
|
||||
}
|
||||
|
||||
if (clks_syscall_procfs_snapshot_for_path(path, &snap) == CLKS_TRUE) {
|
||||
if (CLKS_CFG_PROCFS != 0 && clks_syscall_procfs_snapshot_for_path(path, &snap) == CLKS_TRUE) {
|
||||
return (u64)CLKS_FS_NODE_FILE;
|
||||
}
|
||||
|
||||
@@ -1508,11 +1518,12 @@ static u64 clks_syscall_fs_stat_size(u64 arg0) {
|
||||
return (u64)-1;
|
||||
}
|
||||
|
||||
if (clks_syscall_procfs_is_root(path) == CLKS_TRUE) {
|
||||
if (CLKS_CFG_PROCFS != 0 && clks_syscall_procfs_is_root(path) == CLKS_TRUE) {
|
||||
return 0ULL;
|
||||
}
|
||||
|
||||
if (clks_syscall_procfs_render_file(path, proc_text, sizeof(proc_text), &proc_len) == CLKS_TRUE) {
|
||||
if (CLKS_CFG_PROCFS != 0 &&
|
||||
clks_syscall_procfs_render_file(path, proc_text, sizeof(proc_text), &proc_len) == CLKS_TRUE) {
|
||||
return (u64)proc_len;
|
||||
}
|
||||
|
||||
|
||||
@@ -11,6 +11,14 @@
|
||||
#define CLKS_CFG_USERLAND_AUTO_EXEC 1
|
||||
#endif
|
||||
|
||||
#ifndef CLKS_CFG_USER_INIT_SCRIPT_PROBE
|
||||
#define CLKS_CFG_USER_INIT_SCRIPT_PROBE 1
|
||||
#endif
|
||||
|
||||
#ifndef CLKS_CFG_USER_SYSTEM_APP_PROBE
|
||||
#define CLKS_CFG_USER_SYSTEM_APP_PROBE 1
|
||||
#endif
|
||||
|
||||
static clks_bool clks_user_shell_ready = CLKS_FALSE;
|
||||
static clks_bool clks_user_shell_exec_requested_flag = CLKS_FALSE;
|
||||
static clks_bool clks_user_shell_exec_enabled = CLKS_FALSE;
|
||||
@@ -101,8 +109,13 @@ clks_bool clks_userland_init(void) {
|
||||
|
||||
clks_user_shell_ready = CLKS_TRUE;
|
||||
clks_log(CLKS_LOG_INFO, "USER", "SHELL COMMAND ABI READY");
|
||||
#if CLKS_CFG_USER_INIT_SCRIPT_PROBE
|
||||
clks_userland_probe_init_script();
|
||||
#else
|
||||
clks_log(CLKS_LOG_WARN, "USER", "INIT SCRIPT PROBE DISABLED BY MENUCONFIG");
|
||||
#endif
|
||||
|
||||
#if CLKS_CFG_USER_SYSTEM_APP_PROBE
|
||||
if (clks_userland_probe_elf("/system/elfrunner.elf", "ELFRUNNER ELF READY") == CLKS_FALSE) {
|
||||
return CLKS_FALSE;
|
||||
}
|
||||
@@ -110,6 +123,9 @@ clks_bool clks_userland_init(void) {
|
||||
if (clks_userland_probe_elf("/system/memc.elf", "MEMC ELF READY") == CLKS_FALSE) {
|
||||
return CLKS_FALSE;
|
||||
}
|
||||
#else
|
||||
clks_log(CLKS_LOG_WARN, "USER", "SYSTEM APP PROBE DISABLED BY MENUCONFIG");
|
||||
#endif
|
||||
|
||||
if (clks_user_shell_exec_enabled == CLKS_TRUE) {
|
||||
clks_log(CLKS_LOG_INFO, "USER", "USER SHELL AUTO EXEC ENABLED");
|
||||
|
||||
Reference in New Issue
Block a user