chore(main): 删掉内核身份下调 slog.so log_info 的启动冒烟调用

S4 之后 log_info 走 open(/dev/serial0)+write 两个 syscall,而该调用点在 devfs_init/devfs_register_serial0 之前 ⇒ 那条日志必然丢失。直接删除这个早期验证用的冒烟调用(动态库路径仍被 HelloWorld 的 dynlib.load_so/so_call1 与内核 LOAD_SO/SO_CALL1 覆盖)。同步更新上方的自启动说明注释。
This commit is contained in:
TermiNexus committed 2026-10-16 19:19:00 +08:00
1 parent 5e1cd04478
commit d96b632226
1 file changed
+8 -22
+8 -22
View File
@@ -209,9 +209,9 @@ class ViperKernel:
else:
serial.puts("[main] APPS dir not found\n")
# 还原 elf 自启动(初版 6813947 的 main.py,改写为新语法):sched 暂停 →
# 逐个 spawn .elf(hello / terminal / gargantua / scene3d)→ 加载 slog.so 做一次
# log_info 冒烟调用 → sched 恢复。spawn 要在 FAT32 破坏性测试之前完成。
# elf 自启动:sched 暂停 → 逐个 spawn .elf(hello / terminal / gargantua /
# scene3d / explorer)→ sched 恢复。spawn 要在 FAT32 破坏性测试之前完成。
# (原来还在这里加载 slog.so 调一次 log_info 冒烟,S4 后已删除,见下方说明。)
sched.Scheduler.disable()
hello_pid: int = elf.spawn_elf("/APPS/hello.elf")
@@ -257,25 +257,11 @@ class ViperKernel:
viperlib.snprintf(&exp_log, 64, "[main] Explorer spawned as pid=%d\n", exp_pid)
serial.puts(&exp_log)
so_base: rawptr = elf.load_so("/LIBS/SLOG.SO")
if so_base is not None:
serial.puts("[main] slog.so loaded, calling log_info...\n")
log_info_fn: rawptr = elf.get_so_symbol(so_base, "log_info", "/LIBS/SLOG.SO")
if log_info_fn is not None:
msg: const str = "Hello from shared library!"
# 与 intr/syscall.vp 的 SO_CALL1 同款:按 SysV 把第一个实参放 rdi,
# 再 call 符号地址(日志函数不需要返回值)。
__asm__(f"""mov rdi, {asminp(msg, ASM_DESCR.REG_ANY)}
call {asminp(log_info_fn, ASM_DESCR.REG_ANY)}""",
op=[ASM_DESCR.CLOBBER_MEMORY, ASM_DESCR.CLOBBER_RAX,
ASM_DESCR.CLOBBER_RCX, ASM_DESCR.CLOBBER_RDX,
ASM_DESCR.CLOBBER_RDI, ASM_DESCR.CLOBBER_RSI,
ASM_DESCR.CLOBBER_R8, ASM_DESCR.CLOBBER_R9,
ASM_DESCR.CLOBBER_R10, ASM_DESCR.CLOBBER_R11])
else:
serial.puts("[main] log_info symbol not found\n")
else:
serial.puts("[main] failed to load slog.so\n")
# 原这里在**内核身份**下调 slog.so 的 log_info 做冒烟测试;S4 之后
# log_info 变成 open(/dev/serial0)+write 两个 syscall,而此处执行在
# devfs 注册之前,那条日志必然丢失 ⇒ 直接删掉这个早期验证用的冒烟调用。
# 动态库路径本身仍被 HelloWorld(dynlib.load_so + so_call1)与内核
# LOAD_SO/SO_CALL1 syscall 覆盖,没有失去覆盖。
sched.Scheduler.enable()