summaryrefslogtreecommitdiff
path: root/kernel/kernel.c
diff options
context:
space:
mode:
authorNathan Lee <me@nwlee.tech>2026-08-03 20:40:24 -0500
committerNathan Lee <me@nwlee.tech>2026-08-03 20:40:24 -0500
commit0aaaaa9bdf4c883c75f3ec15a491231ed21d6e8d (patch)
treeb2cc5ea032b5f267452d3b2117b763e7202c59e6 /kernel/kernel.c
parent30c8810932c704f81b2d25b43e7715fa4238342f (diff)
create a simple CPIO parser for initrd's
Diffstat (limited to 'kernel/kernel.c')
-rw-r--r--kernel/kernel.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/kernel/kernel.c b/kernel/kernel.c
index e41d239..de556e7 100644
--- a/kernel/kernel.c
+++ b/kernel/kernel.c
@@ -2,6 +2,7 @@
#include <dtb.h>
#include <bump.h>
#include <log.h>
+#include <cpio.h>
#define KERNEL_SIZE 3 * 1024 * 1024
@@ -24,7 +25,19 @@ void kernel_main(size_t hart, void *fdt) {
km_init(info);
- printk("kernel init was successful\n");
+ 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() {