From 530c85d6a4a3a37ddb1936ea4adae63e01059cb5 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Wed, 26 Aug 2026 19:26:50 +0800 Subject: [PATCH] =?UTF-8?q?fix(main):=20=E7=A7=BB=E9=99=A4=20BootInfo=20?= =?UTF-8?q?=E5=B1=80=E9=83=A8=E9=87=8D=E5=A3=B0=E6=98=8E=EF=BC=8C=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=20memmap=20=E5=85=A8=200?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因:BootInfo: t.CPtr = self.BootInfo(函数内注解重声明全局名)触发编译器 bug——局部 alloca 创建但从不写入(赋值落全局 @BootInfo),后续 BootInfo.X 读 未初始化局部 → 全 0 → mm.init 收 addr=0/size=0/desc=0 → 走 CMOS fallback → 读到 0xFF → size≈4GB → buddy 分配假内存 → 线程栈 4GB → #PF PANIC。 BootInfo 原始字节转储证实 bootloader 传参正确(mmap=0xde20d60 size=4800 desc=48 fb=0x80000000),纯内核读错。直接使用 global BootInfo 修复。 编译器 bug(注解局部重声明全局名赋值落全局)待 TransPyV 单独修复。 --- VKernel/Kernel/main.vp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/VKernel/Kernel/main.vp b/VKernel/Kernel/main.vp index a7d8ed5..c6f82e5 100644 --- a/VKernel/Kernel/main.vp +++ b/VKernel/Kernel/main.vp @@ -47,7 +47,9 @@ class ViperKernel: def __init__(self): global BootInfo self.BootInfo = BootInfo - BootInfo: bootinfo.bootinfo | t.CPtr = self.BootInfo + # 注意:此处不能再写 `BootInfo: bootinfo.bootinfo | t.CPtr = self.BootInfo` + # 局部重声明全局名——编译器会创建局部 alloca 却不写入(赋值落全局), + # 后续 BootInfo.X 读未初始化局部 → 全 0 → memmap 永不可用。直接用 global。 serial.init() serial.puts("===== ViperOS VKernel Test\n =====") serial.puts("V2.3.8\n")