summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorNathan Lee <me@nwlee.tech>2026-06-13 21:24:33 -0500
committerNathan Lee <me@nwlee.tech>2026-06-13 21:24:33 -0500
commit2fb81f37d20fd442d1954a7356e3ab7f88314a9c (patch)
tree72a63c6c848d1ac748804000a2ed1debf1fc789b /kernel
parent4d843a5e03c91867614c94829c5255bc067a90c6 (diff)
create support for kernel modules (but don't implement them yet)
Diffstat (limited to 'kernel')
-rw-r--r--kernel/kernel.c20
-rw-r--r--kernel/start.S20
2 files changed, 40 insertions, 0 deletions
diff --git a/kernel/kernel.c b/kernel/kernel.c
new file mode 100644
index 0000000..753f4a5
--- /dev/null
+++ b/kernel/kernel.c
@@ -0,0 +1,20 @@
+#define UART_BASE 0x10000000 // Example UART address
+
+static inline void putchar(char c) {
+ volatile char *uart = (volatile char *)UART_BASE;
+ *uart = c;
+}
+
+static void print_string(const char *str) {
+ while (*str) {
+ putchar(*str++);
+ }
+}
+
+void kernel_main(void) {
+ print_string("Hello from RISC-V kernel!\n");
+
+ while (1) {
+ // Wait
+ }
+}
diff --git a/kernel/start.S b/kernel/start.S
new file mode 100644
index 0000000..dce0faa
--- /dev/null
+++ b/kernel/start.S
@@ -0,0 +1,20 @@
+.section .text._start
+.global _start
+.type _start, @function
+
+_start:
+ csrw mstatus, zero
+ csrw mie, zero
+
+ la sp, __stack_top
+
+ la t0, __bss_start
+ la t1, __bss_end
+ beq t0, t1, 2f
+1:
+ sw zero, 0(t0)
+ addi t0, t0, 4
+ bltu t0, t1, 1b
+2:
+ call kernel_main
+ j .