summaryrefslogtreecommitdiff
path: root/kernel/riscv
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/riscv')
-rw-r--r--kernel/riscv/kernel.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/kernel/riscv/kernel.c b/kernel/riscv/kernel.c
index 46de696..e38134c 100644
--- a/kernel/riscv/kernel.c
+++ b/kernel/riscv/kernel.c
@@ -1,5 +1,4 @@
#include <sys/log.h>
-#include <sys/log.h>
#include <sys/mem.h>
#include <sys/cpio.h>
#include <early/dtb.h>
@@ -70,7 +69,7 @@ struct kernel_info *discover_arch(void *fdt) {
}
void kernel_main(size_t hart, void *fdt) {
- printk("wkern version %s (Compiler %s, Linker %s)\n", VERSION, COMPILER_NAME, LINKER_NAME);
+ printk("wkern version %s (Compiler %s, Linker %s) on %s\n", VERSION, COMPILER_NAME, LINKER_NAME, ARCH_NAME);
if (hart != 0)
return;
@@ -79,6 +78,16 @@ void kernel_main(size_t hart, void *fdt) {
if (!kernel_info) {
return;
}
+
+
+ uint8_t *bitmap = kemalloc(kernel_info->mem_size / (8 * PAGE_SIZE));
+ uintptr_t mem_start = (uintptr_t)kernel_info->mem_start;
+ uintptr_t initrd_start = (uintptr_t)kernel_info->initrd_start;
+ uintptr_t initrd_end = initrd_start + kernel_info->initrd_size;
+ for (; initrd_start <= initrd_end; initrd_start += PAGE_SIZE) {
+ uintptr_t offset = (initrd_start - mem_start) / PAGE_SIZE;
+ bitmap[offset / 8] = (uint8_t)(1u << (offset % 8));
+ }
}
void kernel_trap() {