Browse Source

feat: enable paging

greatbridf 3 năm trước cách đây
mục cha
commit
7f1ca69928
4 tập tin đã thay đổi với 34 bổ sung1 xóa
  1. 2 0
      CMakeLists.txt
  2. 13 0
      include/asm/sys.h
  3. 17 0
      src/asm/sys.s
  4. 2 1
      src/kernel/mem.c

+ 2 - 0
CMakeLists.txt

@@ -12,6 +12,7 @@ set(BOOTLOADER_SOURCES src/boot.s
                        src/asm/a20.s
                        src/asm/interrupt.s
                        src/asm/port_io.s
+                       src/asm/sys.s
                        )
 
 add_library(bootloader STATIC ${BOOTLOADER_SOURCES})
@@ -48,6 +49,7 @@ set(KERNEL_MAIN_SOURCES src/kernel_main.c
                         src/types/buffer.c
                         include/asm/boot.h
                         include/asm/port_io.h
+                        include/asm/sys.h
                         include/kernel/event/event.h
                         include/kernel/errno.h
                         include/kernel/interrupt.h

+ 13 - 0
include/asm/sys.h

@@ -0,0 +1,13 @@
+#pragma once
+
+#include <kernel/mem.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void asm_enable_paging(page_directory_entry* pd_addr);
+
+#ifdef __cplusplus
+}
+#endif

+ 17 - 0
src/asm/sys.s

@@ -0,0 +1,17 @@
+.code32
+
+.text
+
+.global asm_enable_paging
+.type   asm_enable_paging @function
+asm_enable_paging:
+    cli
+    // page directory address
+    movl 4(%esp), %eax
+    movl %eax, %cr3
+
+    movl %cr0, %eax
+    orl $0x80000001, %eax
+    movl %eax, %cr0
+
+    ret

+ 2 - 1
src/kernel/mem.c

@@ -1,4 +1,5 @@
 #include <asm/port_io.h>
+#include <asm/sys.h>
 #include <kernel/errno.h>
 #include <kernel/mem.h>
 #include <kernel/vga.h>
@@ -180,5 +181,5 @@ static inline void _create_kernel_pd(void)
 void init_paging(void)
 {
     _create_kernel_pd();
-    asm("nop");
+    asm_enable_paging(_kernel_pd);
 }