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:
1 parent
5e1cd04478
commit
d96b632226
1 file changed
+8
-22
+8
-22
@@ -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()
|
||||
|
||||
|
||||
Reference in new issue
Block a user