Files
ViperOS/vpsdk/stdio.vp
T
TermiNexus 5e1cd04478 feat(s4): 删除 SERIAL_PUTS 私有 syscall,用户态改走 /dev/serial0
内核:删掉 SERIAL_PUTS 的枚举项/派发分支/处理函数(内核自身的 serial.puts 是直接驱动调用,不受影响)。SDK:vpsdk/devfs.vp 新增 serial_puts()(惰性 open /dev/serial0 一次 + write),syscall.vp 删掉该成员。

调用点全部切到 devfs.serial_puts:vpsdk/stdio.vp 的 printf、vpsdk/vpui.vp 的 _serial_puts、Apps/Terminal 的 _sdbg、Apps/Explorer 的 _dbg、Libs/SerialLogger 的 log_info/log_warn(.so 同样走设备节点)。顺带清掉因此失效的 import(vpui 的 _syscall、Terminal 的 _syscall、Explorer 的 syscall)。

至此私有段只剩 7 项:TELL/SIZE/OPENDIR/READDIR/CLOSEDIR(可由 lseek/fstat/openat+getdents64 表达)与 LOAD_SO/SO_CALL1(动态库加载待下沉用户层)。
2026-10-16 19:17:39 +08:00

34 lines
1.3 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import vpsdk.syscall as _syscall
import vpsdk.devfs as devfs
import viperlib
# ============================================================
# vpsdk.stdio - 用户态 printf/exit(CExport 裸名,供内核侧代码
# 如 includes/memhub.vp 跨模块引用解析)
#
# 裸机 App 无 libc:printf 走 viperlib.vsnprintf 格式化 + 写 /dev/serial0
# 输出到串口(S4 前是 SERIAL_PUTS 私有 syscall,已删除);exit 走 EXIT syscall。
# ============================================================
export def printf(fmt: const str, *args) -> int:
"""格式化输出到串口(写 /dev/serial0),返回输出字节数"""
if fmt is None:
return 0
buf: [1024]char
n: int = viperlib.vsnprintf(&buf, 1024, fmt, args)
devfs.serial_puts(&buf)
return n
export def exit(status: int):
"""终止当前进程(EXIT syscall:销毁本进程窗口)"""
_syscall._syscall1(uint64(_syscall.Syscall.EXIT), uint64(status))
export def fflush(stream: const rawptr) -> int:
"""刷新输出流:串口/控制台输出都是直写,无缓冲可刷,空操作返回 0
覆盖 libc fflush 的裸机缺失(includes/memhub.vp 的诊断/终止路径 call @fflush);
与 printf/exit 同为 CExport 裸名,供内核侧 includes 跨模块引用解析。
"""
return 0