TermiNexus
|
5b4bab59cc
|
chore(ViperOS): 合并落库内核侧在途改动并移除 vpsdk wiki 拷贝
VKernel / vpsdk / Apps / Libs 共 30 个源文件:内核与 SDK 侧的新语法适配及编译修正(含 bootinfo.vp / main.vp 位宽改 uint64、gfx.vp 前向引用改指针、devfs.vp 指针解引用赋值、elf.vp 跨模块函数取值等)。删除 vpsdk/wiki/*.md(14 文件,约 -8100 行):与仓库根 wiki 重复的拷贝,统一以根 wiki 为唯一来源。
|
2026-10-07 19:04:33 +08:00 |
|
TermiNexus
|
dcb7c5c2c0
|
chore(ViperOS): 落库内核侧进行中的改动(26 文件,+1573/-1805)
内容由用户产出,本次仅代为提交、未做任何语义修改;含 static 修饰符前置迁移等(新增 static 前缀 16 行)。提交消息为中性描述——如需更精确的说明请 amend。
|
2026-09-28 15:24:52 +08:00 |
|
TermiNexus
|
5f5a119f06
|
fix(vkernel): schedule_int_transfer 的 toggle 形参改为值传递
schedule_int_transfer 第 6 形参原为 toggle_ptr: uint8*,却直接转发给 _td_set_token 的值形参 toggle: uint8,命中指针隐式转整数禁令(uhci.vp:160 CastError)。改为 toggle: uint8 值传递,四个调用点去掉取地址,buf 仍以 & 传。同时纳入工作区既有的指针语法迁移:t.CPtr 改 X*、c.Addr 改 &、c.Set(c.Deref(...)) 改 *p = v。
|
2026-09-27 15:05:37 +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
|
cd1cc915c5
|
修正了build.py,重置基线
|
2026-09-11 10:34:34 +08:00 |
|
TermiNexus
|
2a03330a9d
|
fix(kernel): 分裂 2MB 大页使 .rodata 真正只读,加页表与格式串校验诊断并禁用 App 自动启动
|
2026-08-30 07:27:45 +08:00 |
|
TermiNexus
|
04ca2d4c5b
|
fix(kernel): .rodata 映射只读 + CR0.WP=1,越界写立即 #PF 暴露写源
此前清 WP + 页表全可写,越界写 .rodata 字符串常量静默破坏(格式串 %lu 变 %lc、路径/符号名损坏连锁 → work=+/eyboard/terminal.elf 加载失败)。ProtectKernelRO 经 c.Asm 引用 __rodata_start/__rodata_end 清 PTE_WRITABLE,配合 CR0.WP 置位,越界写触发 #PF 打印 cr2/rip。
|
2026-08-29 17:34:41 +08:00 |
|
TermiNexus
|
d0b512f159
|
debug(elf,main): 打印 read_len 与 spawn_elf 返回 pid 实际值——fat32.read 内部 br=64 但 load_elf 收到 <64、spawn ret pid=1 但 main 收到 0,定位跨模块返回值间歇性丢失
|
2026-08-27 01:08:37 +08:00 |
|
TermiNexus
|
61208676c6
|
fix(main): _start 加 stackrealign,修复变参函数 movaps #GP
根因链:_start 由 bootloader jmp 进入(rsp≡0 mod 16),编译器/llc 按 call
约定对齐函数帧(假设入口 rsp≡8 mod 16)→ 帧整体偏 8 → _start 内所有调用
rsp≡8 mod 16 → __init__ 的 float 变参调用(snprintf %.2f 保存 xmm)movaps
#GP(cr4.OSFXSR 已启用、地址 16 对齐仍 #GP 正是此因)。
加 t.attr.stackrealign 使 _start 序言动态重对齐栈,与入口约定无关。
|
2026-08-26 20:18:09 +08:00 |
|
TermiNexus
|
7b084803f5
|
fix(cpu): 启动早期启用 SSE/FPU,修复 movaps #GP
faulting RSP=0x7d760 16 对齐证明非栈对齐问题,movaps #GP(err=0) 真因是 CR4.OSFXSR 未置位(SSE 未启用)。OVMF 启动后 SSE 默认关闭,变参函数传 float/double 保存 xmm 寄存器时触发。新增 cpu.enable_sse(CR0 清 EM 置 MP + CR4 OSFXSR|OSXMMEXCPT + fninit),main.vp __init__ 开头调用。
|
2026-08-26 19:36:50 +08:00 |
|
TermiNexus
|
530c85d6a4
|
fix(main): 移除 BootInfo 局部重声明,修复 memmap 全 0
根因:BootInfo: t.CPtr = self.BootInfo(函数内注解重声明全局名)触发编译器
bug——局部 alloca 创建但从不写入(赋值落全局 @BootInfo),后续 BootInfo.X 读
未初始化局部 → 全 0 → mm.init 收 addr=0/size=0/desc=0 → 走 CMOS fallback →
读到 0xFF → size≈4GB → buddy 分配假内存 → 线程栈 4GB → #PF PANIC。
BootInfo 原始字节转储证实 bootloader 传参正确(mmap=0xde20d60 size=4800
desc=48 fb=0x80000000),纯内核读错。直接使用 global BootInfo 修复。
编译器 bug(注解局部重声明全局名赋值落全局)待 TransPyV 单独修复。
|
2026-08-26 19:26:50 +08:00 |
|
TermiNexus
|
87d4e359d8
|
debug(main): 转储 BootInfo 地址处原始 88 字节
BootInfo=0xde20d00 非 NULL 但字段全 0。转储该地址原始字节,区分内存确实全 0
(bootloader 写入未生效/重定位缺失)还是内核读错偏移(布局不匹配)。
|
2026-08-26 19:23:30 +08:00 |
|
TermiNexus
|
963e0ed53f
|
debug(main): 打印 BootInfo 指针与 memmap 原始字段
mm.init 收到 addr=0 size=0 desc=0(全部为 0),可能是全局 BootInfo 为 NULL
(读物理 0-24 全 0)或 bootloader 传参异常。mm.init 前打印 BootInfo 指针
本身与 MemmapAddr/MemmapSize/MemmapDescSize/framebuffer_addr 原始值。
|
2026-08-26 19:17:58 +08:00 |
|
TermiNexus
|
3995cb9545
|
debug(timer): 门32读回+软int0x20+PIC ISR,一次性区分中断分发路径
LAPIC 配置已确认正常(base/ver/svr/lint0 全部读回正确)但硬件中断仍不达。
新增三段诊断:1) 读回 IDT 门 32 的 base/sel/type;2) 软件 int 0x20 验证
分发路径(门有效→H+返回,门无效→[GP] err=0x20);3) 读 PIC1 ISR 确认
PIT IRQ0 是否真正到达 PIC 并被响应。
|
2026-08-26 18:42:58 +08:00 |
|
TermiNexus
|
ee329c313f
|
fix(apic): early_init 改用 IA32_APIC_BASE EN 位判断,避免 cpuid 误判跳过 init
lint0 读回 0x0(QEMU 复位默认 0x10000)说明此前读的是 RAM,_lapic_base 为 0,
init() 很可能未执行。msr_read 已在前置流程验证可用,改按 MSR bit11 判断更可靠。
main.vp 增补综合诊断:打印 base/version/svr/lint0 重写读回/特性位,一次性区分
init 未执行、MMIO 映射失效、写不粘三种假设。
|
2026-08-26 18:39:07 +08:00 |
|
TermiNexus
|
9ff53aa1fa
|
debug(apic): 读回 LINT0 与 APIC BASE MSR,验证 EXTINT 配置是否生效
PIT 正常(cnt=1109)但中断不送达。读回验证:
- lint0=0x700 → EXTINT 未屏蔽(正确);0x10700 → 被屏蔽;其它 → 写入失败
- apic_base_msr bit11 → APIC 使能状态
用后移除。
|
2026-08-26 18:32:21 +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
|
3c163a5936
|
debug(boot): sti 后软件触发 int 0x20,二分定位中断不送达
APIC LINT0=EXTINT 已配置但仍无定时中断。加 int 0x20(向量 32)软件触发:
- 有 T → IDT gate 32 正常,问题在 PIT/PIC 硬件送达
- 无 T → IDT/lidt 问题
用后移除。
|
2026-08-26 18:16:09 +08:00 |
|
TermiNexus
|
9ec3627a5a
|
fix(boot): 启用 apic.early_init,配置 LINT0=EXTINT 恢复 PIC 定时中断
QEMU/OVMF(UEFI)下本地 APIC 已启用,PIC 外部中断须经 LAPIC LINT0 送达
CPU。apic.init() 将 LINT0 配为 EXTINT(取消屏蔽);此前 early_init 被注释,
LINT0 保持未配置/屏蔽 → 定时器中断被 APIC 吞掉 → sti 后 timer_msleep 等
不到 ticks 永远挂死(serial.log 停在 "sti done",T/D 诊断均无输出)。
|
2026-08-26 18:14:29 +08:00 |
|
TermiNexus
|
49d074e487
|
通过插件的静态推导修复了一些错误
|
2026-07-30 17:28:27 +08:00 |
|
TermiNexus
|
20e7289c61
|
将 .py 和 .pyi 后缀名改为了 .vp 和 .vpi 后缀名
|
2026-07-30 16:34:26 +08:00 |
|