summaryrefslogtreecommitdiff
path: root/kernel/mboot
diff options
context:
space:
mode:
authorFreya Murphy <freya@freyacat.org>2025-04-21 11:41:34 -0400
committerFreya Murphy <freya@freyacat.org>2025-04-21 11:41:34 -0400
commit2ee0e24dfd5319f128ed49b4f47679b7c13b21bf (patch)
treed250af94c434acd54180a1b529b0407d8013890e /kernel/mboot
parentMerge branch 'main' of github.com:kenshineto/kern (diff)
downloadcomus-2ee0e24dfd5319f128ed49b4f47679b7c13b21bf.tar.gz
comus-2ee0e24dfd5319f128ed49b4f47679b7c13b21bf.tar.bz2
comus-2ee0e24dfd5319f128ed49b4f47679b7c13b21bf.zip
fs read/write functions, initrd
Diffstat (limited to 'kernel/mboot')
-rw-r--r--kernel/mboot/module.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/kernel/mboot/module.c b/kernel/mboot/module.c
new file mode 100644
index 0000000..7a64f2e
--- /dev/null
+++ b/kernel/mboot/module.c
@@ -0,0 +1,24 @@
+#include <comus/mboot.h>
+
+#include "mboot.h"
+
+#define MULTIBOOT_TAG_TYPE_MODULE 3
+
+struct multiboot_tag_module {
+ uint32_t type;
+ uint32_t size;
+ uint32_t mod_start;
+ uint32_t mod_end;
+ char cmdline[];
+};
+
+void *mboot_get_initrd(size_t *len)
+{
+ void *tag = locate_mboot_table(MULTIBOOT_TAG_TYPE_MODULE);
+ if (tag == NULL)
+ return NULL;
+
+ struct multiboot_tag_module *mod = (struct multiboot_tag_module *)tag;
+ *len = mod->mod_end - mod->mod_start;
+ return (void*) (uintptr_t) mod->mod_start;
+}