From 03e1137189a4e74c9e0b43bb540a83e46f1f72f0 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Sat, 17 Oct 2026 13:36:38 +0800 Subject: [PATCH] =?UTF-8?q?fix(keyboard):=20=E5=8E=BB=E6=8E=89=E9=87=8D?= =?UTF-8?q?=E5=A4=8D=E5=88=9D=E5=A7=8B=E5=8C=96=EF=BC=8C=E9=94=AE=E7=9B=98?= =?UTF-8?q?=E5=8F=AA=E7=94=B1=20service=20=E5=B1=82=20init=20=E4=B8=80?= =?UTF-8?q?=E6=AC=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 现场:explorer 能 open /dev/input/keyboard,但按下键后 [explorer] kbd 一次都不出现 —— 内核侧没有数据。devfs_register_keyboard() 与 services/keyboard.start() 各调了一次 keyboard.init(),而 init 会读-改-写 8042 的 CCB(含数据上报/中断掩码位);第二次执行时设备状态已变,容易把上报关掉。现在初始化只保留 service 层那一次(它更晚、是最终状态);kbd_thread 并未被启动(kbd_svc.th 从未创建),不存在抢数据的问题。 --- VKernel/Kernel/drivers/devfs/devfs.vp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/VKernel/Kernel/drivers/devfs/devfs.vp b/VKernel/Kernel/drivers/devfs/devfs.vp index 9a37a0c..d2bd28d 100644 --- a/VKernel/Kernel/drivers/devfs/devfs.vp +++ b/VKernel/Kernel/drivers/devfs/devfs.vp @@ -429,7 +429,8 @@ kbd_file: keyboard_device* = keyboard_device() def devfs_register_keyboard() -> int: global kbd_file kbd_file.__init__() - keyboard.init() + # 初始化只由 services/keyboard.start() 做一次:重复 init 会二次读改写 8042 的 CCB, + # 把数据上报/中断掩码弄乱(现场:设备能 open,但键盘永远没有数据)。 return devfs_create_file("/dev/input/keyboard", kbd_file, None)