TermiNexus
|
e6aabf5cf2
|
feat(build): build.py 支持 --onlyapp(只编译库与应用,跳过内核)
只改应用/库时可省去内核编译时间:--onlyapp 时跳过 BuildKernel,其余(BuildApps /
BuildBootloader / BuildDisk / RunQemu)照常。与 --onlyrun 不冲突(--onlyrun 优先级更高,
完全跳过构建)。依旧可与 --noclean / --noapp / --kernel-only 组合。
|
2026-10-14 15:34:40 +08:00 |
|
TermiNexus
|
8b0d24e0d5
|
feat(build, kernel): 内核链接直接产出带符号 kernel.elf,再由 objcopy 二次产出 kernel.bin
按方案调整:
- VKernel/project.vpj:linker 去掉 --oformat binary / --strip-all,output 改为 kernel.elf。
- build.py:用 objcopy -O binary --set-section-flags .bss=alloc,load,contents 由 kernel.elf
二次产出 kernel.bin,再拷到 disk/。同源产出 ⇒ 两者布局逐字节一致,日志里的 rip 可直接用
objdump / nm / readelf 落到函数名;原来那段依赖 phase2cmd.bat 的改写字样已整体删除。
- --set-section-flags .bss=...contents 把 .bss 一并写进裸镜像(ELF 里 .bss 默认 NOBITS),
于是 bootloader 按“文件大小”预留即可覆盖 .bss(boot.c 里另有 256KB 余量,双保险)。
- linker.ld:移除此前对 lld 无效的 LONG(0) 写法,.bss 恢复为干净定义。
注意:需完整重编(不能只 --onlyrun)才会生成新的 kernel.elf / kernel.bin。
|
2026-10-14 15:22:05 +08:00 |
|
TermiNexus
|
1ebb744418
|
fix(boot, build): bootloader 预留补上内核 .bss(多留 256KB);build 跳过路径过期的 kernel.elf
崩溃症状:paging.init 清 CR0.WP 的窗口里遍历页表时 #GP(cr0=0x80000033 → WP=0),
随内核体积变化时有时无。
根因分析(已实测确认):kernel.bin 由 ld.lld --oformat binary 产出,链接脚本里那条
“强制 .bss 为 PROGBITS”的写法对 lld 无效 —— 实测 kernel.bin 只有 249088 字节(0x3CD00),
而 .bss 结尾在 ~0x14B900,即约 60KB 的 .bss 尾部并未写进文件。bootloader 只按文件大小
预留物理页(61 页 → 0x100000..0x13D000),于是 .bss 尾部落在未预留的 EfiConventionalMemory
中:bootloader 自身的分配(页表、缓冲等)可能落进去,内核一写 .bss 就把它们破坏 ——
表现就是 paging.init 遍历到被破坏的页表项而 #GP,且随体积变化“时有时无”。
修改:
- boot/boot.c:PagesNeeded 在文件大小之外显式多预留 64 页(256KB),覆盖 .bss 并留余量。
- build.py:生成 kernel.elf 前逐个校验 .bat 里的 .obj 是否存在,缺失即跳过并给出提示
(--rebuild-includes 后 includes.binary_mlir 下目标文件名会变,.bat 路径会过期)。
注意:本修复需要同时重编 bootloader(python build.py --bootloader)才生效。
|
2026-10-14 15:17:13 +08:00 |
|
TermiNexus
|
59ba295532
|
feat(build): build.py 支持 --onlyrun(跳过编译/打包,复用现有 disk.img 反复跑 QEMU)
为反复复现偶发写坏提供快速通道:脚本拆成 BuildKernel / BuildApps / BuildBootloader /
BuildDisk 与 RunQemu 五段,--onlyrun 时只执行 RunQemu(清空 serial.log → 启动 QEMU →
打印串口日志),不再重编内核/应用/引导器、也不再重新打包 disk.img。行为与原来完全一致,
只是把“构建段”与“运行段”分开,便于跳过前者。用法可直接循环:python build.py --onlyrun
|
2026-10-14 15:01:30 +08:00 |
|
TermiNexus
|
21f4a6aeca
|
fix(build): kernel.elf 链接命令改写做稳健化,避免误覆盖 kernel.bin
原改写用字面 replace("--oformat binary"/"kernel.bin"),若 .bat 里的写法是
"--oformat=binary" 或输出名大小写/路径不同就会匹配不中——那种情况下执行的
仍是原始命令,会把 kernel.bin 覆盖成非预期产物。现改为正则同时兜住
"--oformat binary"/"--oformat=binary"、"-o <path>"/"--output=<path>",
并加保护:改写后若不包含 kernel.elf 则直接跳过,绝不执行未改写的命令。
|
2026-10-14 13:47:36 +08:00 |
|
TermiNexus
|
449f2dbc37
|
fix(mm): 加分配失败分步诊断;build.py 改用 --phase2command 产出 kernel.elf
- mm.vp: 在 malloc(slab 路径)、_create_page、allocate_block 三处失败分支各加一条
[mm] 诊断打印,用于定位“[desktop] dirty_rows malloc FAILED”
(768B → ≤SLAB_THRESHOLD → slab size class 5(1024B) → _create_page 需 order≥1 伙伴块;
DumpBuddy 显示伙伴空闲链健康,故需进一步区分是哪一步返回 NULL)
- build.py: kernel.elf 改为调用 viperc --phase2command 拿到“精确链接命令”再改写产出。
自行 glob .obj 去链会因对象顺序不同得到与 kernel.bin 不一致的段布局
(实测前 247KB 里 230KB 不同),无法把日志 rip 映射回函数。
|
2026-10-14 13:36:01 +08:00 |
|
TermiNexus
|
54e88ce957
|
feat(build): 额外链接带符号 kernel.elf;mm 增加 DumpBuddy 诊断
- build.py: 用同一批 .obj + 同一 linker.ld 再链一份
VKernel/__vpcbuild__/output/kernel.elf(仅去掉 --oformat binary/--strip-all),
段布局与 kernel.bin 一致 → 可把日志里的 rip 用 objdump/nm 映射回函数
- mm.vp: 新增 export DumpBuddy(),打印 arena start/end 与 total/used/free
及各阶空闲链表首块(上限 8 个),定位分配失败是“链表空”还是“块指针坏”
- main.vp: mm.init 之后、desktop.start 之前各调一次 DumpBuddy(),
用于排查“[desktop] dirty_rows malloc FAILED”
(768B → ≤SLAB_THRESHOLD → slab size class 5(1024B) → _create_page 需 order≥1 伙伴块)
|
2026-10-14 13:27:40 +08:00 |
|
TermiNexus
|
091efd11fc
|
chore(build): build.py 增加 --bootloader(make -C boot / GNU-EFI)
bootx64.efi 不由 viperc 产出,长期停留在旧件——改了 boot.c 却仍在用旧引导器
(本次即踩到:boot.c 的栈区占位因 bootloader 未重编而未生效)。
- 传 --bootloader 时执行 make -C boot(MSYS make → WSL Ubuntu → objcopy 直接
产出 disk/EFI/BOOT/bootx64.efi)
- 未传时若 boot/boot.c 比 disk/EFI/BOOT/bootx64.efi 新,打印过期提醒
|
2026-10-14 13:11:47 +08:00 |
|
TermiNexus
|
d093d3fc8b
|
chore: 改名同步 TransPyV -> ViperC(源码/配置内的纯替换)
|
2026-10-12 15:06:50 +08:00 |
|
TermiNexus
|
cd1cc915c5
|
修正了build.py,重置基线
|
2026-09-11 10:34:34 +08:00 |
|
TermiNexus
|
b887d3d9c2
|
更新,部分功能可用
|
2026-08-27 09:47:47 +08:00 |
|
TermiNexus
|
56d127cb88
|
将 project.json 改为了 project.vpj,初步尝试了使用 Viper 插件高亮
|
2026-07-30 17:24:35 +08:00 |
|
Viper
|
6813947181
|
Initial import of ViperOS
|
2026-07-19 12:38:20 +08:00 |
|