引导链
UEFI 固件 → Limine 引导管理器 → initsoke.efi 引导加载器 → sptkrnl.elf 内核 → BSD 组件...
下面是 QEMU/OVMF 无头启动的串口输出节选,原样保留。里面的页数、定时器频率、 CPU 数都是当次实测值,换台机器跑就会变 —— 正因为会变,才说明不是编的。
[snmk] long mode entry [snmk] SNMK KNRL_VER=0.3.1000.0 (edition preview) [snmk] loader: Limine 12.9.0 [snmk] hhdm=0xffff800000000000 memmap=35 usable=115548 pages kernel_img=172 modules=1 [snmk] fb: 1280x800 pitch=5120 bpp=32 8bit/channel masks r=8/16 g=8/8 b=8/0 [snmk] pmm: 115547 pages free [snmk] heap: bootstrap bump online (256 KiB) [snmk] vmm: kernel aspace online, cr3=0x000000001bf7c000 hhdm=0xffff800000000000 [snmk] bsd: sysinit=0 modules=0 [snmk] cpu: gdt/idt/tss ready [snmk] exc: #UD selftest ok [snmk] lapic: online @ phys=0x00000000fee00000 virt=0xffffff0000000000 id=0 [snmk] syscall: gate armed, lstAr=0xffffffff80001138 [sched] preemptive online [snmk] lapic: timer calibrated 627045 ticks/10ms (62704kHz) [snmk] smp: 4 cpu online (bsp_lapic_id=0) [snmk] initrd: initrd 258560 bytes, 1 module(s) [snmk] spk: welcome-notes 1.0.0 x64 payload=data.tar.zst files=2 [initd] ring-3 alive, tid=1 [initd] 这条消息来自 ring 3,经 syscall 门与用户内存校验后由内核打印 [snmk] dynlink: objs=3 libs=2 relocs=12 [dynprobe] dynamic link verified
从固件到 BSD 组件的交接链。每一环的产物都是下一环的输入, 引导加载器由本项目自研,引导管理器则用上游 Limine。
全部 21 项都带实测证据,没有跑通的一律不写进来。
UEFI 固件 → Limine 引导管理器 → initsoke.efi 引导加载器 → sptkrnl.elf 内核 → BSD 组件...
冷入口设置 CR4 的 OSFXSR/OSXMMEXCPT 并执行 fninit,随后进入 kmain。版本号不在代码里写死,构建期由 version.toml 生成版本模块。
引导器响应块被收编成内核内部引导事实,HHDM 基址、内存图、可用页数、内核映像大小全部取自运行期而非编译期常量。
记录引导器给出的 GOP 帧缓冲几何与通道掩码。当前 QEMU/OVMF 给的是 32bpp、每通道 8bit,日志照实写 8bit/channel —— 不把 32bpp 说成 10bit,全链路 10bit 尚未实现。
从引导器内存图建立空闲页栈,内核拿到全部可用物理页。
内核早期阶段先上线 bump 分配器,供地基各子系统在真实分配器就位前使用。
随系统分发的壁纸素材。桌面栈的设计已经定稿 —— 液态玻璃材质、视觉语言、交互动效各有独立规范 —— 但尚未开始实现, 状态见路线图。
这不是一个能日常使用的系统。内核地基、用户态、动态链接已经跑通并有串口证据, 但驱动模型、文件系统、POSIX 面、桌面栈都还没做 —— 13 项已知缺口全部列在路线图里,包括那些看起来不体面的。