]> Zhao Yanbai Git Server - kernel.git/commitdiff
添加serial_monitor的清屏能力
authoracevest <zhaoyanbai@126.com>
Tue, 30 Dec 2025 02:41:47 +0000 (10:41 +0800)
committeracevest <zhaoyanbai@126.com>
Tue, 30 Dec 2025 02:41:47 +0000 (10:41 +0800)
scripts/iso.grub.cfg
scripts/serial_monitor/main.go

index a18af786a8a6287af8fd502d1664be969e49c844..f8a932ce011490d1dac2b89787ba2b632773b110 100644 (file)
@@ -2,13 +2,15 @@
 #serial --unit=0
 #terminal_input serial
 #terminal_output serial
-#terminal_output serial_com0
+
+# grub的serial输出自带清屏能力
+# terminal_output serial_com0
 
 
 load_video
 set gfxmode=auto
 set gfxpayload=keep
-terminal_output gfxterm
+terminal_output gfxterm
 
 set default="0"
 set timeout=0
index 679c2574b97c5d46a5bd25966de69393fc124835..ecad8970af5101bd7970b1778c374a0ed56bd89a 100644 (file)
@@ -7,6 +7,7 @@ import (
        "log"
        "net"
        "os"
+       "strings"
        "time"
 )
 
@@ -17,7 +18,7 @@ var clearMode bool
 func main() {
        flag.StringVar(&addr, "a", ":6666", "")
        flag.StringVar(&logFile, "f", "last.log", "")
-       flag.BoolVar(&clearMode, "c", true, "clear log file every time")
+       flag.BoolVar(&clearMode, "c", true, "clear log file and screen every time")
        flag.Parse()
 
        // 创建一个可写的文本文件
@@ -28,17 +29,7 @@ func main() {
        defer f.Close()
 
        for {
-               var modeStr string
-               if clearMode {
-                       modeStr = "clear log file every time"
-               } else {
-                       modeStr = "do not clear log file"
-               }
-               log.Printf("listen addr %v log file %v %v", addr, logFile, modeStr)
-
                monitor(f)
-
-
        }
 }
 
@@ -49,6 +40,15 @@ func monitor(f *os.File) {
        start := time.Now()
 
 
+       var modeStr string
+       if clearMode {
+               modeStr = "clear log file every time"
+       } else {
+               modeStr = "do not clear log file"
+       }
+       log.Printf("lissten addr %v log file %v %v", addr, logFile, modeStr)
+
+
        // 不断尝试连接串行控制台
        for {
                conn, err = net.Dial("tcp", addr)
@@ -64,8 +64,6 @@ func monitor(f *os.File) {
        defer conn.Close()
 
 
-
-       // 每次连接成功,就清空这个文件,从头开始写数据
        if clearMode {
                err = f.Truncate(0)
                if err != nil {
@@ -73,6 +71,16 @@ func monitor(f *os.File) {
                }
 
                f.Seek(0, 0)
+
+               // 组合转义码:清屏 + 清除滚动缓冲区
+               // \033[H  光标移到左上角
+               // \033[2J 清空屏幕
+               // \033[3J  清除滚动缓冲区(部分终端支持)
+               fmt.Print("\033[H\033[2J\033[3J")
+
+               //
+               var divideLine = strings.Repeat("-", 80)
+               fmt.Printf("\n%v\n\nSCREEN CLEARED AT %v\n\n%v\n\n", divideLine, time.Now().Format("2006-01-02 15:04:05.000"), divideLine)
        }
 
        // 写入当前时间