diag(vkernel): 增加 post_vga / pre_start 探针,夹出 fb/pitch 被清零的位置
[rc] preflush 显示 fb=0x0(帧缓冲指针为 NULL),[dst] entry 显示 pitch=0:
刷新循环把 8MB 后备缓冲写到物理 0x0 起 —— 覆盖 IVT/BDA + 低端内存 + 内核镜像自身
(0x100000 起),边跑边覆盖正在执行的代码 → 卡死;QEMU 因客户机跑飞
abort(0x40000015 = STATUS_FATAL_APP_EXIT)。
VGA 文本(315-317 行)用同一组 fb/pitch 画出来是正常的,说明清零发生在
317 行之后、323 行 desktop.start 之前。故加两条探针把元凶夹死:
_WhProbe("post_vga", uint32(fb), pitch) # 317 行后
_WhProbe("pre_start", uint32(fb), pitch) # 323 行前
若 post_vga 正常而 pre_start 为 0,元凶即这三条之一:
serial.puts("你好") / serial.puts("[main] starting desktop") / _WhProbe("pre_desktop")。
This commit is contained in:
1 parent
0cee9612ae
commit
d58833d3b5
1 file changed
+2
@@ -315,10 +315,12 @@ class ViperKernel:
|
||||
VGA_drv = vga._VGAScreenDriver(fb, width, height, pitch, fb_format)
|
||||
self.VGA = &VGA_drv
|
||||
self.VGA.Print(100, 100, "ViperOS VKernel Test")
|
||||
_WhProbe("post_vga", uint32(fb), pitch)
|
||||
serial.puts("你好\n")
|
||||
|
||||
serial.puts("[main] starting desktop\n")
|
||||
_WhProbe("pre_desktop", width, height)
|
||||
_WhProbe("pre_start", uint32(fb), pitch)
|
||||
mm.DumpBuddy()
|
||||
desktop.start(fb, width, height, pitch)
|
||||
serial.puts("[main] desktop started\n")
|
||||
|
||||
Reference in new issue
Block a user