mirror of
https://github.com/Leonmmcoset/cleonos.git
synced 2026-04-21 18:44:01 +00:00
Stage 23
This commit is contained in:
@@ -96,7 +96,7 @@ void clks_kernel_main(void) {
|
||||
clks_tty_init();
|
||||
}
|
||||
|
||||
clks_log(CLKS_LOG_INFO, "BOOT", "CLEONOS Stage22 START");
|
||||
clks_log(CLKS_LOG_INFO, "BOOT", "CLEONOS Stage23 START");
|
||||
|
||||
if (boot_fb == CLKS_NULL) {
|
||||
clks_log(CLKS_LOG_WARN, "VIDEO", "NO FRAMEBUFFER FROM LIMINE");
|
||||
|
||||
@@ -42,6 +42,8 @@ static u64 clks_shell_cmd_ok = 0ULL;
|
||||
static u64 clks_shell_cmd_fail = 0ULL;
|
||||
static u64 clks_shell_cmd_unknown = 0ULL;
|
||||
|
||||
extern void clks_rusttest_hello(void);
|
||||
|
||||
static clks_bool clks_shell_is_space(char ch) {
|
||||
return (ch == ' ' || ch == '\t' || ch == '\r' || ch == '\n') ? CLKS_TRUE : CLKS_FALSE;
|
||||
}
|
||||
@@ -693,6 +695,7 @@ static clks_bool clks_shell_cmd_help(void) {
|
||||
clks_shell_writeln(" memstat / fsstat / taskstat");
|
||||
clks_shell_writeln(" dmesg [n]");
|
||||
clks_shell_writeln(" shstat");
|
||||
clks_shell_writeln(" rusttest");
|
||||
clks_shell_writeln(" exec <path|name>");
|
||||
clks_shell_writeln(" clear");
|
||||
clks_shell_writeln(" kbdstat");
|
||||
@@ -1201,6 +1204,11 @@ static clks_bool clks_shell_cmd_shstat(void) {
|
||||
return CLKS_TRUE;
|
||||
}
|
||||
|
||||
static clks_bool clks_shell_cmd_rusttest(void) {
|
||||
clks_rusttest_hello();
|
||||
return CLKS_TRUE;
|
||||
}
|
||||
|
||||
static void clks_shell_execute_line(const char *line) {
|
||||
char line_buf[CLKS_SHELL_LINE_MAX];
|
||||
char cmd[CLKS_SHELL_CMD_MAX];
|
||||
@@ -1261,6 +1269,8 @@ static void clks_shell_execute_line(const char *line) {
|
||||
success = clks_shell_cmd_dmesg(arg);
|
||||
} else if (clks_shell_streq(cmd, "shstat") == CLKS_TRUE) {
|
||||
success = clks_shell_cmd_shstat();
|
||||
} else if (clks_shell_streq(cmd, "rusttest") == CLKS_TRUE) {
|
||||
success = clks_shell_cmd_rusttest();
|
||||
} else if (clks_shell_streq(cmd, "exec") == CLKS_TRUE || clks_shell_streq(cmd, "run") == CLKS_TRUE) {
|
||||
success = clks_shell_cmd_exec(arg);
|
||||
} else if (clks_shell_streq(cmd, "clear") == CLKS_TRUE) {
|
||||
|
||||
32
clks/lib/libc_compat.c
Normal file
32
clks/lib/libc_compat.c
Normal file
@@ -0,0 +1,32 @@
|
||||
#include <clks/string.h>
|
||||
#include <clks/types.h>
|
||||
|
||||
void *memcpy(void *dst, const void *src, usize count) {
|
||||
return clks_memcpy(dst, src, count);
|
||||
}
|
||||
|
||||
void *memmove(void *dst, const void *src, usize count) {
|
||||
return clks_memmove(dst, src, count);
|
||||
}
|
||||
|
||||
void *memset(void *dst, int value, usize count) {
|
||||
return clks_memset(dst, value, count);
|
||||
}
|
||||
|
||||
int memcmp(const void *left, const void *right, usize count) {
|
||||
const u8 *a = (const u8 *)left;
|
||||
const u8 *b = (const u8 *)right;
|
||||
usize i;
|
||||
|
||||
for (i = 0U; i < count; i++) {
|
||||
if (a[i] != b[i]) {
|
||||
return (a[i] < b[i]) ? -1 : 1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int bcmp(const void *left, const void *right, usize count) {
|
||||
return memcmp(left, right, count);
|
||||
}
|
||||
27
clks/rust/src/lib.rs
Normal file
27
clks/rust/src/lib.rs
Normal file
@@ -0,0 +1,27 @@
|
||||
#![no_std]
|
||||
|
||||
use core::hint::spin_loop;
|
||||
use core::panic::PanicInfo;
|
||||
|
||||
extern "C" {
|
||||
fn clks_tty_write(text: *const i8);
|
||||
}
|
||||
|
||||
const RUSTTEST_TEXT: &[u8] = b"Hello world!\n\0";
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn clks_rusttest_hello() {
|
||||
unsafe {
|
||||
clks_tty_write(RUSTTEST_TEXT.as_ptr() as *const i8);
|
||||
}
|
||||
}
|
||||
|
||||
#[panic_handler]
|
||||
fn panic(_info: &PanicInfo) -> ! {
|
||||
loop {
|
||||
spin_loop();
|
||||
}
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn rust_eh_personality() {}
|
||||
Reference in New Issue
Block a user