diff options
| author | Nathan Lee <me@nwlee.tech> | 2026-08-30 20:15:31 -0500 |
|---|---|---|
| committer | Nathan Lee <me@nwlee.tech> | 2026-08-30 20:15:31 -0500 |
| commit | b62815bfb6b05e90eef04d2021305b6f5b335f53 (patch) | |
| tree | 3a8c0437677b9cd290d64a58651455ba2095787c | |
| parent | 7f4c833ced046f88160a50e7adb1f55343e7e759 (diff) | |
fix typos + .data section issues
| -rw-r--r-- | kernel/common/log.c | 11 | ||||
| -rw-r--r-- | kernel/riscv/kernel.c | 6 | ||||
| -rw-r--r-- | kernel/riscv/linker.ld | 4 | ||||
| -rw-r--r-- | kernel/riscv/start.S | 24 |
4 files changed, 24 insertions, 21 deletions
diff --git a/kernel/common/log.c b/kernel/common/log.c index 88136f2..d75daeb 100644 --- a/kernel/common/log.c +++ b/kernel/common/log.c @@ -4,19 +4,11 @@ __attribute__((section(".ringbuf"), aligned(64))) volatile char log_ring[RINGBUF_SIZE]; static int pos = 0; -void stub(char c) { - (void)c; - return; -} - -console_callback_t callback = stub; - void put_char(char c) { log_ring[pos++] = c; if (pos >= RINGBUF_SIZE) pos = 0; - callback(c); } void put_string(const char *s) { @@ -104,6 +96,3 @@ void printk(const char *fmt, ...) { __builtin_va_end(args); } -void register_console_callback(console_callback_t cb) { - callback = cb; -} diff --git a/kernel/riscv/kernel.c b/kernel/riscv/kernel.c index d34437f..665d7f4 100644 --- a/kernel/riscv/kernel.c +++ b/kernel/riscv/kernel.c @@ -30,13 +30,13 @@ struct kernel_info *discover_arch(void *fdt) { struct dt_node *memory = dt_find_device(head, "memory"); if (memory == NULL) { - printk("[E;F] Failed to fidn the memory device!"); + printk("[E;F] Failed to find the memory device!"); return NULL; } size_t len = 0; - uint8_t *memory_reg = dt_get_prop(head, "reg", &len); + uint8_t *memory_reg = dt_get_prop(memory, "reg", &len); if (!memory_reg || len < sizeof(uintptr_t) + sizeof(size_t)) { printk("[E;F] reg property for memory in provided device tree is nonexistent or invalid!"); @@ -67,7 +67,7 @@ struct kernel_info *discover_arch(void *fdt) { } void kernel_main(size_t hart, void *fdt) { - printk("wkern version %s (Compiler %s, Linker %s)%s\n", VERSION, COMPILER_NAME, LINKER_NAME); + printk("wkern version %s (Compiler %s, Linker %s)\n", VERSION, COMPILER_NAME, LINKER_NAME); if (hart != 0) return; diff --git a/kernel/riscv/linker.ld b/kernel/riscv/linker.ld index 5bf6586..ec51176 100644 --- a/kernel/riscv/linker.ld +++ b/kernel/riscv/linker.ld @@ -4,8 +4,8 @@ ENTRY(_start) MEMORY { ROM (rx) : ORIGIN = 0x80000000, LENGTH = 1M - RAM (rwx) : ORIGIN = 0x81000000, LENGTH = 1M - LOGRAM (rw) : ORIGIN = 0x82000000, LENGTH = 1M + RAM (rwx) : ORIGIN = 0x80100000, LENGTH = 1M + LOGRAM (rw) : ORIGIN = 0x80200000, LENGTH = 1M } SECTIONS diff --git a/kernel/riscv/start.S b/kernel/riscv/start.S index ecec47b..aa35916 100644 --- a/kernel/riscv/start.S +++ b/kernel/riscv/start.S @@ -12,17 +12,31 @@ _start: la t0, _syscall_start csrw stvec, t0 - + la sp, __stack_top + # Copy .data + la t0, __data_load + la t1, __data_start + la t2, __data_end + +1: + beq t1, t2, 2f + lw t3, 0(t0) + sw t3, 0(t1) + addi t0, t0, 4 + addi t1, t1, 4 + j 1b +2: + # Zero .bss la t0, __bss_start la t1, __bss_end - beq t0, t1, 2f -1: +3: + beq t0, t1, 4f sw zero, 0(t0) addi t0, t0, 4 - bltu t0, t1, 1b -2: + j 3b +4: call kernel_main wfi |
