Commit Graph
10 Commits
Author SHA1 Message Date
TermiNexus 0919a058a8 fix(vkernel): 预留内核 .bss 与栈区,修堆 arena 覆盖未预留内核内存
根因:bootloader 只按 kernel 文件大小 AllocatePages(.bss 不占文件),于是 .bss
尾部(ticks/_perf_* 等全局量)与主线程栈区(0x60000~0x80000)在 memmap 里仍是
EfiConventionalMemory,被内核 mm 的堆 arena 当作空闲内存占用 → 内核全局量被写坏、
堆元数据被反向破坏,最终桌面线程栈上的 va_list 被改坏,vsnprintf 读 %d 变参时
#GP(rip=0x130d45, err=0x0)。

- linker.ld: .bss 末尾加 LONG(0) 强制 PROGBITS,使 kernel.bin 的 FileSize 涵盖
  .bss,bootloader 的 PagesNeeded 得以预留整块内核镜像(含 .bss)
- mm.init: 新增 KernelAddr/KernelEnd,挑 arena 时把与内核镜像 [kernel_PhysAddr,
  __bss_end) 重叠的 region 起点抬到镜像末端(不整段丢弃)
- main.vp: 取 __bss_end 并传入 mm.init
- boot.c: ExitBootServices 前用 AllocatePages(AllocateAddress, EfiLoaderData)
  占位内核栈区 0x60000~0x80000,使其在 memmap 中标记已用

另含在途整理:多处补显式收窄转换(uint8()/uint16() 等)、kbd_svc 构造改为
kbd_svc.__init__() 等。
2026-10-14 12:54:43 +08:00
TermiNexus dcb7c5c2c0 chore(ViperOS): 落库内核侧进行中的改动(26 文件,+1573/-1805)
内容由用户产出,本次仅代为提交、未做任何语义修改;含 static 修饰符前置迁移等(新增 static 前缀 16 行)。提交消息为中性描述——如需更精确的说明请 amend。
2026-09-28 15:24:52 +08:00
TermiNexus a518f75b24 chore(vkernel): 重置基线 — 纳入 TPV codegen 修复配合的内核侧调整与既有工作区内容
- devfs.vp: string.split 传 PATH_BUFFER_SIZE(配合 split 新增容量参数)

- fat32_types.vp: lfn_extract 越界钳制(base+i > MAX_LFN 返回 -1)

- sheet.vp: gfx.Renderer 实参修正为 (fb, zb, w, h)(原单参导致 w/h=0 渲染空操作)

- 同批包含 VKernel 其余既有移植改动与 vpsdk/Apps/Libs 工作区内容
2026-09-11 14:27:01 +08:00
TermiNexus 471cfa16bf debug(timer): timer_init 读 PIT 计数器,验证 PIT 是否在走
中断仍不送达 timer_handler(无 H)。读 PIT 计数器(latch+读 0x40)打印:
- 计数在 1~1193 之间变化 → PIT 正常,问题在中断送达(PIC/APIC/IDT)
- 计数为 0/不变 → PIT 本身没跑(outb 未生效/环境问题)
用后移除。
2026-08-26 18:29:20 +08:00
TermiNexus 57c4092d19 debug(timer): timer_handler 一次性 H + msleep 自旋 s,判定 ISR 是否被调用
apic.eoi 修复后仍挂在 sti done(无 msleep done)。加两处确定性诊断:
- timer_handler 首次进入打印 'H':ISR 被调用则出现
- msleep 每 1M 次迭代打印 's':hlt 唤醒(中断触发)但 ticks 不推进则出现
判定:
- 无 H → 定时中断未到达 timer_handler(IDT/PIC/APIC 路由)
- 有 H → ISR 已调用,问题在 handler/ticks 推进
用后移除。
2026-08-26 18:26:34 +08:00
TermiNexus 9082056fe0 fix(timer): timer_handler 补 LAPIC EOI,修复 APIC 启用后定时中断被屏蔽
APIC 启用后(LINT0=EXTINT 送达),每次中断会置 LAPIC ISR,必须写
LAPIC_EOI(0x0B0) 清除。此前只发 PIC EOI(0x20/0xA0),LAPIC ISR 卡住 →
首个定时中断后后续中断全被屏蔽 → ticks 不推进 → timer_msleep 永久挂起
(清理诊断后稳定复现,serial.log 停在 "sti done" 无 "msleep done")。
两个分支(timer_running 早退 + 正常路径)都补 apic.eoi()。
2026-08-26 18:23:16 +08:00
TermiNexus f675540c64 chore(boot): 移除全部中断排查诊断(int20 测试 + T/[T]/D 打印)
定时中断已确认恢复(APIC LINT0=EXTINT)。移除 int 0x20 软件触发测试与
isr32_handler 'T'、timer_handler '[T]'、isr_default 'D' 打印,回归干净
内核,定位 sti 后新出现的 #GP(疑似 int 0x20 测试触发)。
2026-08-26 18:19:41 +08:00
TermiNexus 7336ddff48 debug(timer): timer_handler 每 250 拍打印 [T],验证定时器中断触发
sti 后卡死在 timer_msleep,静态分析 PIT/PIC/IDT/ISR/timer_handler/
msleep/sched_tick 的 IR 全部正确。加串口诊断确认 ISR 是否触发:
若串口无 [T] → 中断未触发(PIC/PIT/IDT 运行期问题);有 [T] 仍挂 →
ticks 未推进/ISR 未返回。用后移除。
2026-08-26 18:07:47 +08:00
TermiNexus 20e7289c61 将 .py 和 .pyi 后缀名改为了 .vp 和 .vpi 后缀名 2026-07-30 16:34:26 +08:00
Viper 6813947181 Initial import of ViperOS 2026-07-19 12:38:20 +08:00