diff options
| author | Nathan Lee <me@nwlee.tech> | 2026-08-12 17:44:17 -0500 |
|---|---|---|
| committer | Nathan Lee <me@nwlee.tech> | 2026-08-12 17:44:17 -0500 |
| commit | 2c0efd93530c472e96ff3529aee983b53f3b78d9 (patch) | |
| tree | cc36e7334e162ba67df79333e267ac93b4d984b9 /kernel/riscv/kernel.c | |
| parent | 640a81b3ee366c651286efd1b80b37992cd53282 (diff) | |
rework project structure
Diffstat (limited to 'kernel/riscv/kernel.c')
| -rw-r--r-- | kernel/riscv/kernel.c | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/kernel/riscv/kernel.c b/kernel/riscv/kernel.c new file mode 100644 index 0000000..4e72e2a --- /dev/null +++ b/kernel/riscv/kernel.c @@ -0,0 +1,45 @@ +#include <sys/log.h> +#include <sys/mem.h> +#include <sys/cpio.h> +#include <early/bump.h> + +#define KERNEL_SIZE 3 * 1024 * 1024 + +uint32_t user_regs[31]; + +void kernel_main(size_t hart, void *fdt) { + printk("Doing kernel init with hard ID %d\n", hart); + + struct dt_node *head = dt_parse(fdt); + struct mem_info *info = km_find_memory(head); + + + if (!info) { + printk("failed to find memory info!\n"); + return; + } + + info->start = (void *)((uint8_t *)info->start + KERNEL_SIZE); + info->size -= KERNEL_SIZE; + + km_init(info); + + printk("memory blocks initialized\n"); + + size_t len = 0; + uint32_t *initrd = dt_get_prop(head, "initrd", &len); + if (!initrd || len < 8) { + printk("failed to find initrd!\n"); + return; + } + uint32_t base = btohi(initrd[0]); + uint32_t size = btohi(initrd[1]); + + char *file = cpio_get_file((void*)base, (size_t)size, "/sbin/init"); + (void)file; +} + +void kernel_trap() { + + +} |
