一个没有 Linux 内核、没有 GRUB、没有现成 libc 的操作系统。512 字节的启动扇区把 CPU 拽进 32 位保护模式, 然后交给手写的 C 内核。目标很明确:插上 U 盘就能在真机上跑起来。
BOS 不追求通用性,追求的是"每一步都自己实现过"。磁盘读写走自己写的 AHCI 驱动, 可执行程序走自定义的 .bosapp 格式,连启动管理器 BOOTMGR 都是手搓的。
512 字节完成实模式到保护模式的切换,加载 stage2 与内核映像。
已通,支持从真实 SATA 硬盘读写扇区,不依赖 BIOS 中断。
自定义可执行格式,diskman、bootsfc 等工具以该格式交付。
PS/2 兜底,USB 键鼠(UHCI + HID)正在接入,两条路都要能走。
BIOS 读 0 磁道扇区,UEFI 读 BOOTX64.EFI,两条路径分别铺好。
构建 GDT,打开 A20,置位 CR0.PE,跳转进 stage2。
解析分区与文件系统,把内核映像搬进内存并交出控制权。
枚举 PCI 总线,定位 SATA 控制器,建立磁盘读写通道。
进行中:完成 HID 报告描述符解析后,与 PS/2 形成互补输入。
把磁盘工具的 5 条命令整理成正式应用,随系统一起发布。
最省事的验证方式,不用写盘、不碰真机。装好 QEMU 后一条命令:
# 光盘方式启动(推荐) qemu-system-x86_64 -cdrom bos-v0.9-bios-uefi.iso -m 256 # 软盘镜像方式 qemu-system-x86_64 -fda bos-disk.img -m 256 # 挂一块虚拟硬盘,验证 AHCI 读写 qemu-system-x86_64 -cdrom bos-v0.9-bios-uefi.iso \ -drive file=disk.qcow2,format=qcow2,if=none,id=d0 \ -device ich9-ahci,id=ahci \ -device ide-hd,drive=d0,bus=ahci.0
裸机才是 BOS 的主场。Windows 下可用 Rufus 或 balenaEtcher:
# 先确认磁盘号,写错盘会丢数据 lsblk # 写入(以 /dev/sdb 为例,去掉分区号) sudo dd if=bos-v0.9-bios-uefi.iso \ of=/dev/sdb bs=4M status=progress sync
写完插到目标机器,进固件启动菜单选 U 盘。若屏幕停在 BOOTMGR 提示,多半是键鼠驱动未命中,换 PS/2 键盘再试。