From 7fe10eb5435c06d7de55f6ff920571af9f67e728 Mon Sep 17 00:00:00 2001 From: sparkzky Date: Wed, 4 Feb 2026 23:24:09 +0800 Subject: [PATCH] =?UTF-8?q?fix(printk):=20=E6=B7=BB=E5=8A=A0=E5=B9=B6?= =?UTF-8?q?=E5=8F=91=E8=BE=93=E5=87=BA=E4=BF=9D=E6=8A=A4=E9=94=81=E8=B0=83?= =?UTF-8?q?=E8=AF=95=E9=80=89=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在 PrintkWriter::__write_string 中添加 OUTPUT_LOCK 自旋锁, 可防止并发输出时出现字符交错问题。 Signed-off-by: sparkzky --- kernel/src/libs/printk.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/kernel/src/libs/printk.rs b/kernel/src/libs/printk.rs index 91af805cc3..c226509a74 100644 --- a/kernel/src/libs/printk.rs +++ b/kernel/src/libs/printk.rs @@ -10,8 +10,11 @@ use crate::{ driver::tty::{tty_driver::TtyOperation, virtual_terminal::vc_manager}, filesystem::procfs::{klog::LogMessage, kmsg::KMSG}, time::PosixTimeSpec, + // libs::spinlock::SpinLock, }; +// static OUTPUT_LOCK: SpinLock<()> = SpinLock::new(()); + #[macro_export] macro_rules! print { ($($arg:tt)*) => ($crate::libs::printk::__printk(format_args!($($arg)*))); @@ -36,6 +39,8 @@ impl PrintkWriter { /// 并输出白底黑字 /// @param str: 要写入的字符 pub fn __write_string(&mut self, s: &str) { + // DEBUG 调试的时候可以将这里取消注释,可以避免日志输出混在一起 + // let _guard = OUTPUT_LOCK.lock(); if let Some(current_vc) = vc_manager().current_vc() { // tty已经初始化了之后才输出到屏幕 let port = current_vc.port();