启动与运行
内核镜像不会自己知道要跑什么——demo 是作为 initrd 传进去的,启动后在 QEMU monitor 里输入名字选择。这一点常让人第一次跑时以为“卡住了”。
方式一:-kernel 直接加载
qemu-system-x86_64 -m 256M -kernel kernel/fujo-kernel.bin \
-initrd sdk/linux/m30_linux.elf \
-monitor telnet:127.0.0.1:4568,server,nowait -display none -no-reboot
# 另开一个终端,连上 monitor 并输入 demo 名:
# telnet 127.0.0.1 4568 → sendkey o s spc r u n spc h e r m e s ret
# 上面这串 sendkey 敲的是 "os run hermes"。
方式二:可引导 ISO
仓库里有现成的 release/fujo-boot.iso(GRUB 链、自动启动 demo、SHA-256 校验),适合不装 monitor 交互直接看结果。
sha256sum -c release/fujo-boot.iso.sha256
qemu-system-x86_64 -m 256M -cdrom release/fujo-boot.iso -boot d \
-display none -serial stdio -no-reboot
方式三:GRUB multiboot
与真机启动一致的那条路径。真机演示用的就是它,配合 AHCI/SATA 真盘做持久化验证。
起不来时先看哪里
- 全黑、没有任何输出 —— 先确认压平镜像那一步跑了,而不是直接用了 cargo 的 ELF 产物。
- 有内核横幅但没动静 —— 这是预期行为:还没选 demo。去 monitor 里敲名字。
- WHPX 上中断异常 —— 传统 8259 路径需要 kernel-irqchip=off;这条平台差异已记录在案。
下一步:
跑起来之后,用 回归、ISO 与 CI 判断它到底证明了什么。