Skip to content

0.5.0 —— 第三台机器不再是例外 - #3

Merged
Sunrisepeak merged 1 commit into
mainfrom
feat/qemu-x86-runner
Aug 21, 2026
Merged

0.5.0 —— 第三台机器不再是例外#3
Sunrisepeak merged 1 commit into
mainfrom
feat/qemu-x86-runner

Conversation

@Sunrisepeak

Copy link
Copy Markdown
Member

xPack 按目标族发布 QEMU 且没有 x86 构建,于是 x86_64 那一行此前从 apt 装模拟器再手工调用 —— 它是三行里唯一一行结果取决于 Ubuntu 恰好发了什么的。mcpplibs/qemu-x86 从源码为五个宿主构建 qemu-system-x86_64,xim:qemu-x86 已合入索引(openxlings/xim-pkgindex#665)。

改动

  • build.mcpp 的三分支同形。机器类型按 arch 选:两台 RISC 机器上 virt,x86_64 上 q35 —— 它没有 para-virtual 板,镜像经 multiboot 而不是 -kernel 的裸镜像路径进入,这也是它的链接脚本带 a.out kludge 而另外两个不带的原因
  • CI 三行都走 mcpp run,if [ -n "\${{ matrix.qemu }}" ] 那个分支消失,apt 一列删除
  • 模板与 README 里「x86_64 只能 build」全部改为可运行
  • 新增 examples/clock-study:时钟归属的调研,三台机器各跑一次,FINDING.md 记录结论
  • README 的「未做」表:xim:qemu-x86 一行删除;时钟一行从「未开始」改为「已回答未实现」

⭐ 时钟调研的产出

三台机器都能用一条无地址指令读到单调递增的计数器,只有一台能说出它走多快(aarch64 的 cntfrq_el0 = 62500 kHz;riscv 架构不报告,x86_64 的 CPUID leaf 0x15 拒绝)。

⇒ 把「时钟」当一件事是错的:counter() 属于本层,frequency()set_deadline() 不属于。先写接口会得到三件一套,其中两件在三台里的两台上无法兑现。

本地实测

两个例子 × 三台机器全部构建并运行:switch ok 在 riscv64 / aarch64 / x86_64 上都打印,clock-study 三台都跑完。x86_64 的引导用的是 qemu-x86 的载荷。

xPack 按目标族发布 QEMU 且没有 x86 构建,于是 x86_64 那一行此前从 apt 装模拟器
再手工调用:它是唯一一行结果取决于 Ubuntu 恰好发了什么的。mcpplibs/qemu-x86 从源码
为五个宿主构建 qemu-system-x86_64,xim:qemu-x86 携带它。

- build.mcpp 的三分支同形,机器类型按 arch 选(virt / q35)
- CI 三行都走 mcpp run,分支消失
- 模板与 README 的 'x86_64 只能 build' 全部改为可运行
- README 的「未做」表:时钟一行从「未开始」改为「已回答未实现」,由
  examples/clock-study 的实测支撑;xim:qemu-x86 一行删除

实测:三例(switch / clock-study)× 三机器全部构建并运行。
@Sunrisepeak
Sunrisepeak merged commit b0c0b92 into main Aug 21, 2026
8 checks passed
@Sunrisepeak
Sunrisepeak deleted the feat/qemu-x86-runner branch August 21, 2026 00:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant