内核:删掉 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(动态库加载待下沉用户层)。
34 lines
1.3 KiB
Plaintext
34 lines
1.3 KiB
Plaintext
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
|