diff options
author | Danny Holman <dholman@gymli.org> | 2024-05-27 13:53:52 -0500 |
---|---|---|
committer | Danny Holman <dholman@gymli.org> | 2024-05-27 13:53:52 -0500 |
commit | aaf7355c5ededfcdc877c7f2989fb1ba02dfb848 (patch) | |
tree | 0c4588650fe1fc1fa1af2972353a2bc920cf1e68 /kernel | |
parent | kernel: sched: add a flag that is set on init (diff) | |
download | box-aaf7355c5ededfcdc877c7f2989fb1ba02dfb848.tar.gz box-aaf7355c5ededfcdc877c7f2989fb1ba02dfb848.tar.zst box-aaf7355c5ededfcdc877c7f2989fb1ba02dfb848.zip |
libk: create a subset libc for kernel use
Create a subset of the C library for use inside the kernel.
Signed-off-by: Danny Holman <dholman@gymli.org>
Diffstat (limited to '')
-rw-r--r-- | kernel/init.c | 30 | ||||
-rw-r--r-- | libk/io.c (renamed from kernel/io.c) | 20 | ||||
-rw-r--r-- | libk/string.c (renamed from kernel/string.c) | 11 |
3 files changed, 31 insertions, 30 deletions
diff --git a/kernel/init.c b/kernel/init.c index 98ac05c..d4a3638 100644 --- a/kernel/init.c +++ b/kernel/init.c @@ -1,31 +1,35 @@ -#include <kernel/io.h> +#include <libk/io.h> +#include <libk/string.h> +#include <libk/kmalloc.h> #include <kernel/sched.h> -#include <kernel/kmalloc.h> -#include <kernel/string.h> +#include <kernel/kthread.h> +#include <kernel/pci.h> #include <kernel/serial.h> void jump_userspace(void); char rootfs[1024]; - -int start_init(int argc, char* argv[]) { - while (1); - return 0; -} +char init_bin[1024]; +int gdbstub = 0; void process_cmd(char *cmdline) { char *token = strtok(cmdline, " "); while (token != NULL) { if (strncmp(token, "root=", 5) == 0) - strcpy(rootfs, &token[6]); + strcpy(rootfs, &token[5]); + if (strncmp(token, "init=", 5) == 0) + strcpy(init_bin, &token[5]); + if (strncmp(token, "gdb", 3) == 0) + gdbstub = 1; + token = strtok(NULL, " "); } } void kernel_main(char *cmdline) { - kmalloc_init(); - kprintf("Box Kernel version %s\n", VERSION); + kprintf("Box kernel version %s\n", VERSION); + process_cmd(cmdline); + serial_init(); sched_init(); - - //jump_userspace(); + //pci_check_buses(); } @@ -1,10 +1,7 @@ -#include <kernel/io.h> -#include <kernel/framebuffer.h> -#include <kernel/data/ringbuf.h> -#include <kernel/string.h> - -static int ringbuf_init = 0; -static struct ringbuf rb; +#include <libk/io.h> +#include <libk/string.h> +#include <kernel/video/framebuffer.h> +#include <kernel/tty/tty_vga.h> char* convert(unsigned int num, int base) { static char rep[] = "0123456789ABCDEF"; @@ -23,15 +20,11 @@ char* convert(unsigned int num, int base) { } int vkprintf(const char *fmt, va_list args) { - if (ringbuf_init == 0) { - rb_init(&rb, 1024, 4096); - ringbuf_init = 1; - } - char *s; int i; char buffer[4096]; + memset(buffer, 0, 4096); for (size_t n = 0; n < strlen(fmt); n++) { if (fmt[n] != '%') { buffer[strlen(buffer)] = fmt[n]; @@ -67,7 +60,8 @@ int vkprintf(const char *fmt, va_list args) { break; } } - rb_push_back(&rb, buffer, strlen(buffer)); + //tty_write(buffer, strlen(buffer)); + fb_write(buffer, strlen(buffer)); memset(buffer, 0, 4096); return 0; } diff --git a/kernel/string.c b/libk/string.c index fa0fd3f..be59397 100644 --- a/kernel/string.c +++ b/libk/string.c @@ -1,4 +1,4 @@ -#include <kernel/string.h> +#include <libk/string.h> int memcmp(const void *str1, const void *str2, size_t n) { unsigned char const *p1 = str1; @@ -32,16 +32,15 @@ void* memcpy(void* __restrict dest, const void* __restrict src, size_t n) { } char* strncpy(char* __restrict dest, const char* __restrict src, size_t n) { - for (int i = 0; i < n; i++) { + for (size_t i = 0; i < n; i++) { if (src[i] == '\0') break; dest[i] = src[i]; } + return dest; } char* strcpy(char* __restrict dest, const char* __restrict src) { - if (strlen(src) > strlen(dest)) - return NULL; return (char*)memcpy(dest, src, strlen(src)); } @@ -49,6 +48,10 @@ char* strcat(char* __restrict dest, const char* __restrict src) { return (char*)memcpy(&dest[strlen(dest)], src, strlen(src)); } +char* strncat(char* __restrict dest, const char* __restrict src, size_t n) { + return (char*)memcpy(&dest[strlen(dest)], src, n); +} + void* memmove(void* __restrict dest, const void* __restrict src, size_t n) { if (dest == src) return dest; |