fix(kernel,explorer): 内核不再画屏消除残留;CREATE 打印 style 诊断

蓝色残留根因:main.vp 里 VGA_drv.Print 在 __init__ 尾部执行,而它晚于 app spawn —— explorer 已经把桌面画上去了,内核随后又往 framebuffer 打一行测试文本/清屏,于是永远盖在桌面上(整屏刷一次也救不了,因为之后又被画)。S3e 之后屏幕由 explorer 独占合成,直接删除内核侧 VGA 驱动创建与 Print。另:handle_request 的 CREATE 分支加一条诊断打印(style/w/h),用于确认 style 是否真的透传到 explorer —— 5 条日志,定位后撤。
This commit is contained in:
TermiNexus committed 2026-10-17 11:03:05 +08:00
1 parent ae39fab5d8
commit 844fbff31c
2 files changed
+7 -3

No files matched your search

+4
View File
@@ -1002,6 +1002,10 @@ class DeskServer:
def handle_request(self, m: desk.DeskMsg):
if m.type == uint32(desk.DESK_REQ_CREATE):
# pid 随请求携带(窗口还没诞生),标题内联在消息里
_sb: [96]char
viperlib.snprintf(&_sb, 96, "[explorer] create style=%d w=%d h=%d\n",
int(m.style), m.c, m.d)
devfs.serial_puts(&_sb)
nw: int = self.alloc_window(m.pid, m.a, m.b, m.c, m.d, int(m.style))
if nw >= 0:
ns: desk.WinSlot* = self.slot(nw)
+3 -3
View File
@@ -347,9 +347,9 @@ class ViperKernel:
mse_svc.start()
serial.puts("[main] services started\n")
VGA_drv = vga._VGAScreenDriver(fb, width, height, pitch, fb_format)
self.VGA = &VGA_drv
self.VGA.Print(100, 100, "ViperOS VKernel Test")
# S3e 之后屏幕由用户态 explorer 独占合成:内核不再创建 VGA 驱动、不再往 framebuffer
# 画任何东西。原先这里会 Print 一行测试文本,而它执行时间在 explorer 启动之后 ——
# 等于把内核测试内容盖在桌面上(也是屏幕上蓝色/文本残留的来源)。
_CheckFrameLocals("after_vga", fb, width, height, pitch)
serial.puts("你好\n")