EOS 自研内核 N100 真机问题 — 全量事实与判别实验清单(版本 eos-0.2.1k,2026-09-15)
| 项目 | 内容 |
|---|---|
| 目标机 | Intel N100 小主机(Alder Lake-N),UEFI 启动,SecureBoot 已关闭,16GB 内存,核显 HDMI 输出,无独立串口(机箱无 COM 口,主板 COM 针脚未确认) |
| 固件 | AMI UEFI;核显 GOP 驱动版本 IGFX GOP 21.0.1050(BIOS 内可见) |
| 启动介质 | U 盘刻录 eos-0.2.1k.iso(历史版本问答记录,最新ISO见install页;0.2.1k含 /efi/boot/bootx64.efi GRUB 2.12 EFI 版 + El Torito BIOS 双启动) |
| 操作步骤 | 插 U 盘 → 开机按启动菜单选 UEFI USB → 出现 GRUB 菜单(菜单文字渲染正常,说明显卡 GOP 在 GRUB 阶段工作)→ 选任一菜单项回车 → 立即黑屏 |
| 现象 | 三个菜单项(EFI GOP/multiboot2、text console safe、fallback keep)全部黑屏,现象一致;黑屏后无任何后续输出;尚未观察 NumLock 灯 / Ctrl+Alt+Del / 10 秒自动复位指纹等判别信号(见问题清单 Q1-Q3) |
| 内核 | EOS 0.2.1,自研 32 位 i386 ELF(21KB),Multiboot2 兼容(带合法 MB2 头),QEMU 下日志线确认能走到 "800x600@24bpp OK → boot complete → 10s 后自动复位指纹" |
⚠️ 关键后验事实(我们事后解包 0.2.1k ISO 发现):ISO 内 kernel.elf 的 MB2 头是 24 字节最小头,不含任何 tag(framebuffer 请求 tag 实际缺失)——构建链在"源码修复→重新编译→打入 ISO"之间断了。即 0.2.1j 声称的 fb 请求在真机上从未存在过。
| # | 假设 | 支持证据 | 强度 |
|---|---|---|---|
| H1 | serial 死等自旋:内核第一动作是初始化 16550 UART 并 serial_puts 打印,send 前 `in 0x3FD & 0x20` 死等 THR 空位。N100 无 COM、LPC 上可能无 16550,`in` 返回 0 时 bit5=0 → 内核在第一条日志处无限自旋,CPU 活着但永远黑屏 | 可完整解释"三菜单全黑+两轮修复零变化"(兜底代码从未执行到);QEMU 有模拟串口所以畅通 | ★★★★☆ |
| H2 | fb tag 修复未进 ISO(已实证缺失),真机上 GRUB 以当前 native GOP 模式交权,内核后续显示路径依赖的 fb 参数链路未按预期建立 | 解包实证 MB2 头无任何 tag;QEMU 里 GRUB 按 MB2 规范仍会自动提供当前 fb tag,掩盖了缺失 | ★★★★☆(缺失本身已实证) |
| H3 | GRUB→内核交权瞬间显示切换失败:GRUB `terminal_output console` 切 GOP 图形控制台在 IGFX GOP 21.0.1050 上失败,黑屏发生在 GRUB 阶段而非内核 | GRUB 菜单本身可见说明 GOP 初期正常;该 GOP 驱动版本行为已知特殊 | ★★★☆☆ |
| H4 | 内核早期 triple fault / 异常重启循环 | QEMU 同二进制正常;内核代码极简 | ★★☆☆☆ |
| H5 | 磁盘/引导介质识别问题 | 内核是纯内存镜像,无 root 概念;与黑屏无逻辑通路 | ★☆☆☆☆ |
1. 最可能根因(从 H1-H5 中选或另提),一句话理由 2. 零成本现场判别实验:建议做哪 1-3 个(如 Q1-Q4 类) 3. 需要补充的信息(请列清单,我们可提供 grub.cfg 全文 / kernel.elf 二进制 / 反汇编 / QEMU 完整日志) 4. 推荐的最终修复方向(如:GRUB 侧 serial 双输出 / 内核 serial 加超时 / 交权前主动 SetMode 到 1024x768 / 改用 UEFI stub 直接以 EFI 应用启动绕开 GRUB) 5. 若方便:您处理过的类似"GRUB 可见、内核黑屏"案例的关键教训
set timeout=5
if [ "$grub_platform" = "efi" ]; then set default=0; else set default=1; fi
insmod font; insmod terminfo
echo "Platform: $grub_platform"
if [ "$grub_platform" = "efi" ]; then
insmod efi_gop
insmod efi_uga
else
insmod vbe
fi
insmod all_video
terminal_output console
echo "**** EOS 0.2.1k banner ****"
menuentry "EOS v0.2.1k (EFI GOP, multiboot2)" {
multiboot2 /boot/kernel.elf
boot
}
menuentry "EOS v0.2.1k (text console safe, BIOS)" {
set gfxpayload=text
multiboot /boot/kernel.elf
boot
}
menuentry "EOS v0.2.1k (fallback keep, legacy)" {
set gfxpayload=keep
multiboot /boot/kernel.elf
boot
}
QEMU/OVMF 实测串口日志(正常路径参考):
[0.2.1] kernel alive, serial ok [mb2] parsing tags, magic=920085129 ... tag type=8 (fb tag FOUND) ... [fb] addr=2147483648 [fb] bpp=24 [fb] w=800 [fb] h=600 → 800x600@24bpp OK [boot] multiboot magic OK → GDT → IDT → PIT 100Hz → PS/2 EOS v0.2.1 (MB2) boot complete. → 10s 后自动复位指纹
EOS 项目组 · 2026-09-16 · 本页面自包含,无外部依赖,可直接转发。可提供 kernel.elf 二进制(21,748 字节)与完整构建脚本供复现。