From 844fbff31cf4b7f355103d475f7010359326d6f8 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Sat, 17 Oct 2026 11:03:05 +0800 Subject: [PATCH] =?UTF-8?q?fix(kernel,explorer):=20=E5=86=85=E6=A0=B8?= =?UTF-8?q?=E4=B8=8D=E5=86=8D=E7=94=BB=E5=B1=8F=E6=B6=88=E9=99=A4=E6=AE=8B?= =?UTF-8?q?=E7=95=99=EF=BC=9BCREATE=20=E6=89=93=E5=8D=B0=20style=20?= =?UTF-8?q?=E8=AF=8A=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 蓝色残留根因:main.vp 里 VGA_drv.Print 在 __init__ 尾部执行,而它晚于 app spawn —— explorer 已经把桌面画上去了,内核随后又往 framebuffer 打一行测试文本/清屏,于是永远盖在桌面上(整屏刷一次也救不了,因为之后又被画)。S3e 之后屏幕由 explorer 独占合成,直接删除内核侧 VGA 驱动创建与 Print。另:handle_request 的 CREATE 分支加一条诊断打印(style/w/h),用于确认 style 是否真的透传到 explorer —— 5 条日志,定位后撤。 --- Apps/Explorer/desk_server.vp | 4 ++++ VKernel/Kernel/main.vp | 6 +++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/Apps/Explorer/desk_server.vp b/Apps/Explorer/desk_server.vp index 0346931..a87366e 100644 --- a/Apps/Explorer/desk_server.vp +++ b/Apps/Explorer/desk_server.vp @@ -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) diff --git a/VKernel/Kernel/main.vp b/VKernel/Kernel/main.vp index e91b1de..d5a0e71 100644 --- a/VKernel/Kernel/main.vp +++ b/VKernel/Kernel/main.vp @@ -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")