]> Zhao Yanbai Git Server - kernel.git/commitdiff
完全解除multiboot.S对C头文件的依赖
authoracevest <zhaoyanbai@126.com>
Thu, 1 Jan 2026 04:22:41 +0000 (12:22 +0800)
committeracevest <zhaoyanbai@126.com>
Thu, 1 Jan 2026 04:22:41 +0000 (12:22 +0800)
boot/boot.h
boot/multiboot.S
include/system.h
kernel/task_root.c
scripts/link.ld

index e58f7d9b313ab5f24fbee71653e62035444254f4..ce637732067028a8255a41dce6d1877a083b245d 100644 (file)
@@ -9,13 +9,11 @@
 
 #pragma once
 
-#include "multiboot2.h"
+#include <multiboot2.h>
+#include <types.h>
 
 #define BOOT_INIT_PAGETBL_CNT 2  // 8MB
 
-#ifndef ASM
-#include <types.h>
-
 #define E820_RAM 1
 #define E820_RESERVED 2
 #define E820_ACPI 3
@@ -67,5 +65,3 @@ typedef struct bootmem_data {
 
 extern struct boot_params boot_params;
 extern bootmem_data_t bootmem_data;
-
-#endif
index 24f9398faa92e1360e33fff001751aa3220a126a..9545d59e1bc8329ac11243cfbdde016d0f7523fd 100644 (file)
  *
  *--------------------------------------------------------------------------
  */
-#define ASM
-
-#include "boot.h"
-#include "task.h"
 
 .global kernel_entry
 .global main
 .extern check_kernel
 .extern init_system_info
 .extern setup_kernel
-.extern root_task
 .extern root_task_entry
+.extern get_root_task_stack_top
 .extern kernel_virtual_addr_start
 
-#define MULTIBOOT_STACK_SIZE 0x4000
+#define MULTIBOOT_STACK_SIZE 0x200
 
 .section .kernel_entry_text
 kernel_entry:
@@ -74,21 +70,22 @@ real_kernel_entry:
     jmp     4f
 4:
     # 准备切保护模式
-
     # 此时esp的地址还需要再调整一下
     addl    $kernel_virtual_addr_start, %esp
-
-
     .extern p_entry_vaddr
     ljmp    $0x08, $p_entry_vaddr
 
 .align 4
 .global p_entry # 为了让链接器计算出 p_entry_vaddr
+                # 因为编译器不支持 ljmp $0x08, $p_entry + kernel_virtual_addr_start 这种写法
 p_entry:
     leal    check_kernel, %eax
     call    *%eax
 
-    movl    $root_task + TASK_SIZE, %esp
+    leal    get_root_task_stack_top, %eax
+    call    *%eax
+    movl    %eax, %esp
+
     leal    init_system_info, %eax
     call    *%eax;
 
index d053ae4bedab0d86d0ffe01889eb62299ecc42e0..e4e0341922c5ad6d1584b161b6322c5f62ac2001 100644 (file)
@@ -58,15 +58,12 @@ void* kmalloc(size_t size, gfp_t gfpflags);
 void* kzalloc(size_t size, gfp_t gfpflags);
 void kfree(void* addr);
 
-#define panic(msg, ...)                                                                                         \
-    do {                                                                                                        \
-        asm("cli;");                                                                                            \
-        printl(MPL_DEBUG, "PANIC:" msg " file:%s function:%s line:%d\n", ##__VA_ARGS__, __FILE__, __FUNCTION__, \
-               __LINE__);                                                                                       \
-        printk("PANIC:" msg " file:%s function:%s line:%d\n", ##__VA_ARGS__, __FILE__, __FUNCTION__, __LINE__); \
-        while (1) {                                                                                             \
-            asm("hlt");                                                                                         \
-        }                                                                                                       \
+#define panic(msg, ...)                                                                                 \
+    do {                                                                                                \
+        asm("cli;");                                                                                    \
+        printl(MPL_DEBUG, "PANIC:" msg " %s %s %d\n", ##__VA_ARGS__, __FILE__, __FUNCTION__, __LINE__); \
+        printk("PANIC:" msg " %s %s %d\n", ##__VA_ARGS__, __FILE__, __FUNCTION__, __LINE__);            \
+        asm("hlt");                                                                                     \
     } while (0);
 
 extern char etext, edata, end;
index 3faac65b8d09478c1c87ca4b02546271c82bac61..6ba709c3734dde38c972cbabefcf5cd892f27a93 100644 (file)
@@ -85,3 +85,7 @@ void root_task_entry() {
         asm("hlt;");
     }
 }
+
+uint32_t get_root_task_stack_top() {
+    return (uint32_t)((uint8_t*)&root_task + TASK_SIZE);
+}
index 0df91f9a6e51d7e27f8b3d039cfbd525470b30d3..b25955eae22b045fc986a8f6a3ce834acd72edd4 100644 (file)
@@ -34,6 +34,7 @@ SECTIONS
         *(.multiboot2_header)
         boot/multiboot.S.o(.text)
         *unpaged_*.o(.text)
+        p_entry_vaddr = p_entry + kernel_virtual_addr_start;
     }
     eunpagged_text = .;