diff --git a/VKernel/Kernel/main.vp b/VKernel/Kernel/main.vp index 2d9e2b3..6a45c13 100644 --- a/VKernel/Kernel/main.vp +++ b/VKernel/Kernel/main.vp @@ -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()