diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/kernel.c | 21 | ||||
| -rw-r--r-- | kernel/mem.c | 32 |
2 files changed, 48 insertions, 5 deletions
diff --git a/kernel/kernel.c b/kernel/kernel.c index 753f4a5..3dbf0d1 100644 --- a/kernel/kernel.c +++ b/kernel/kernel.c @@ -1,3 +1,5 @@ +#include <types.h> +#include <wdt.h> #define UART_BASE 0x10000000 // Example UART address static inline void putchar(char c) { @@ -11,10 +13,19 @@ static void print_string(const char *str) { } } -void kernel_main(void) { - print_string("Hello from RISC-V kernel!\n"); - - while (1) { - // Wait +void kernel_main(void *wdt) { + struct wdt_root *root = wdt; + print_string("deserialized all!\n"); + uint32_t count = root->count; + for (uint32_t i = 0; i < count; i++) { + print_string("deserializing wdt node!\n"); + print_string("device type: "); + if (root->devices[i].type == 0) { + print_string("mem"); + } else { + print_string("unknown"); + } + print_string("\n"); } + while(1); } diff --git a/kernel/mem.c b/kernel/mem.c new file mode 100644 index 0000000..531dd81 --- /dev/null +++ b/kernel/mem.c @@ -0,0 +1,32 @@ +#include <types.h> +#include <mem.h> + +static char eheap[EHEAP_SIZE] = {0}; +static size_t eheap_off = 0; + +void* kmalloc(size_t size) { + return (void*)size; +} + +void* kemalloc(size_t size) { + size = (size + 7) & ~7; + + if (eheap_off + size > EHEAP_SIZE) { + return NULL; + } + + void *ptr = &eheap[eheap_off]; + eheap_off += size; + return ptr; +} + +void* memcpy(void *to, const void *from, size_t size) { + char *dest = (char *)to; + const char *src = (const char *)from; + + while (size--) { + *dest++ = *src++; + } + + return dest; +} |
