From 9a54c41ad07ec00316bb8fcdeba51c215446d454 Mon Sep 17 00:00:00 2001 From: Aleksa Vuckovic Date: Mon, 22 Aug 2022 15:12:25 +0200 Subject: ext2 as multiboot2 module --- kernel/src/boot/multiboot2.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'kernel/src/boot') diff --git a/kernel/src/boot/multiboot2.c b/kernel/src/boot/multiboot2.c index d0b0667..1bb9aac 100644 --- a/kernel/src/boot/multiboot2.c +++ b/kernel/src/boot/multiboot2.c @@ -13,6 +13,8 @@ /* https://www.gnu.org/software/grub/manual/multiboot2/html_node/Boot-information-format.html */ +mb2_tag_module* ext2_module; + void init_fb(mb2_tag_fb* tag_fb) { main_fb.addr = tag_fb->framebuffer_addr; @@ -42,7 +44,8 @@ void init_mmap(mb2_tag_mmap* tag_mmap) for (list_t* tmp = mmap; tmp != NULL; tmp = tmp->next) { mb2_tag_mmap_entry* mmap_entry; mmap_entry = tmp->data; - printf("base_addr: 0x%x, length: 0x%x, type: %d\n", mmap_entry->base_addr, mmap_entry->length, mmap_entry->type); +// printf("base_addr: 0x%x, length: 0x%x, type: %d\n", mmap_entry->base_addr, mmap_entry->length, mmap_entry->type); + mmap_entry = mmap_entry; } // free data @@ -54,6 +57,15 @@ void init_mmap(mb2_tag_mmap* tag_mmap) free_list(&mmap); } +void init_module(mb2_tag_module* tag_module) +{ + // name is utf-8 encoded string! + uint32_t name_size = tag_module->size - sizeof(tag_module) + sizeof(char*); + tag_module->name = (char*)kalloc(name_size); + memcpy(tag_module->name, tag_module + tag_module->size - name_size, name_size); + kfree(tag_module->name); +} + void read_mb2(mb2_tag_header* multiboot_bootinfo, uint32_t multiboot_magic) { if (multiboot_magic != MB2_MAGIC) { @@ -77,6 +89,9 @@ void read_mb2(mb2_tag_header* multiboot_bootinfo, uint32_t multiboot_magic) case MB2_TAG_MMAP: tag_mmap = (mb2_tag_mmap*)tag_header; break; + case MB2_TAG_MODULE: + ext2_module = (mb2_tag_module*)tag_header; + break; default: break; } @@ -87,4 +102,5 @@ void read_mb2(mb2_tag_header* multiboot_bootinfo, uint32_t multiboot_magic) init_fb(tag_fb); init_mmap(tag_mmap); + init_module(ext2_module); } -- cgit v1.2.3