Fixed the pmm_init() page fault, but i have no clue why pag_init() sometimes causes it.

This commit is contained in:
2025-04-15 10:39:25 +02:00
parent a73eb77418
commit 30445e9d25
3 changed files with 8 additions and 6 deletions
+1 -1
View File
@@ -28,7 +28,7 @@ void bmap_setarea(bitmap_t* map, size_t base, size_t len, int val) {
void bmap_setall(bitmap_t* map, int val) {
uint8_t b = (val) ? 0xff : 0;
memset(map->map, b, map->bytes);
for (size_t i = 0; i < map->bytes; i++) ((uint8_t*)map->map)[i] = b;
if (val) map->used = map->blocks;
else map->used = 0;
}
+3 -2
View File
@@ -9,7 +9,7 @@ static uint32_t pagedirs[PAGE_DIR_COUNT][1024] __align(4096);
static uint8_t pagedirUsed[PAGE_DIR_COUNT];
// TODO: Should this be initialized? If so, to what?
size_t pag_pageCount;
size_t pag_pageCount = 0;
// Invalidates the pagedir entry in the CPUs TLB cache
static inline void invalidate(uint32_t vaddr) {
@@ -38,8 +38,9 @@ int pag_init(void) {
*/
init_pagedir[1023] = ((uint32_t)init_pagedir - KERNEL_BASE) |
PAGE_FLAG_PRESENT | PAGE_FLAG_WRITE;
invalidate(0xFFFFF000);
invalidate(1023 * PAGE_SIZE);
// TODO: This sometimes causes a #PF
memset(pagedirs, 0, PAGE_SIZE * PAGE_DIR_COUNT);
memset(pagedirUsed, 0, PAGE_DIR_COUNT);
+4 -3
View File
@@ -14,10 +14,10 @@ MODULES = $(KERNEL)
all: $(TARGET)
$(TARGET): $(SYSROOT) $(MODULES)
cp /usr/share/limine/limine-bios.sys $(SYSROOT)/boot
echo -e 'timeout: 5\n\n/kern.\n\tprotocol: multiboot1\n\tpath: boot():/boot/kernel.elf\n' > $(SYSROOT)/boot/limine.conf
echo -e 'timeout: 0\n\n/kern.\n\tprotocol: multiboot1\n\tpath: boot():/boot/kernel.elf\n' > $(SYSROOT)/boot/limine.conf
dd if=/dev/zero of=$(TARGET) bs=1M count=$(IMG_SIZE)
echo ',,c,*' | sfdisk $(TARGET) >/dev/null
mformat -F -i $(TARGET)@@$(OFFSET) ::/
mformat -F -i $(TARGET)@@$(OFFSET) ::
mcopy -i $(TARGET)@@$(OFFSET) $(SYSROOT)/* ::
limine bios-install $(TARGET)
@@ -45,7 +45,8 @@ clean:
for m in $(MODULES); do $(MAKE) -C $$m clean; done
qemu:
qemu-system-x86_64 $(TARGET)\
qemu-system-x86_64\
-drive format=raw,file=$(TARGET),index=0,media=disk\
-m 256M -accel tcg -monitor stdio -net none\
-rtc base=localtime,clock=host,driftfix=slew\
-audiodev $(AUDIODEV),id=audio0 -machine pcspk-audiodev=audio0