You need to enable JavaScript to run this app. 如何将汇编实模式源码制作成可在物理机启动的可引导U盘与光盘
优惠活动
大模型
产品
解决方案
定价
更多

如何将汇编实模式源码制作成可在物理机启动的可引导U盘与光盘

实模式引导程序制作物理机可引导介质的实操方案

之前操作无法在物理机U盘启动的原因

  • 通过mkisofs生成的ISO,是光盘专用的无软盘模拟引导结构,引导记录存储在ISO9660格式的隐藏引导域中,本身不具备裸磁盘设备所需的MBR分区表与可识别引导头,因此写盘工具会判定为非可引导镜像,物理机的磁盘引导逻辑也无法识别这类结构。
  • Windows挂载ISO时看到的Boot.cat是mkisofs自动生成的ISO结构校验目录,Floopy_I.flp就是打包进去的原始软盘镜像。这个结构仅在虚拟机中因为内置了光盘引导模拟逻辑可以正常启动,不兼容物理机直读U盘的引导规则。

物理机可引导光盘的制作流程

  • 你之前生成的ISO本身已经兼容传统BIOS模式的物理机光盘启动,不要把ISO当成普通文件拷贝到光盘中,要使用刻录软件的“逐扇区镜像刻录”功能,将ISO完整写入空白CD/DVD光盘。
  • 这种制作方式下,物理机BIOS会直接识别ISO9660结构中标记为no-emul-boot的引导记录,加载运行编写的实模式程序,启动效果和Bochs、VMware中的运行表现完全一致。
  • 注意:这类光盘仅支持传统BIOS启动,无法在纯UEFI模式的机器上引导,因为编写的是16位实模式程序,本身不具备UEFI引导所需的PE32格式入口,属于代码定位决定的正常限制。

物理机可引导U盘的制作流程

U盘是裸块存储设备,引导逻辑和光盘完全不同,不能直接写入光盘专用的ISO结构,可按两种方式制作:

裸扇区直写引导

  • 编译生成的boot.bin是带0xaa55魔数的合法512字节引导扇区,可直接裸写到U盘的第一个块设备位置:
    • 操作前务必备份U盘内所有数据,设备选择错误会清空对应存储盘的全部内容。
    • Linux下执行命令(将/dev/sdX替换为自身U盘对应的块设备标识):
      sudo dd if=boot.bin of=/dev/sdX bs=512 count=1 conv=notrunc
      
    • Windows下可通过专用dd工具、Rufus的裸写引导扇区功能完成相同操作。
  • 启动原理:BIOS读取U盘第一个扇区,检测到合法的0xaa55引导魔数后,直接加载运行实模式程序,和Bochs加载软盘镜像的逻辑高度一致。
  • 这种方式制作的U盘仅支持传统BIOS启动,纯UEFI模式无法识别属于正常现象。

带标准分区表的引导U盘

  • 如果需要让U盘被操作系统正常识别为带文件系统的存储设备,可先通过分区工具给U盘创建标准MBR分区表,划分一个标记为“活动”的主分区,格式化为FAT16/FAT32格式后,再将引导扇区内容写入该分区的起始扇区即可。
  • Etcher、Rufus之前报错的核心原因:直接写入光盘ISO结构后,U盘的第一个扇区不存在合法MBR引导头,BIOS扫描引导设备时自然找不到可启动入口。

实际调试注意事项

  • 物理机启动时,在BIOS启动菜单中要选择对应U盘/光盘的传统BIOS模式启动项,不要选择UEFI开头的同设备选项,否则会因为缺少UEFI引导入口启动失败。
  • 当引导程序代码超过1个扇区大小后,需要单独补充适配U盘、光盘的扇区读取逻辑,不同存储介质的BIOS中断调用参数、设备识别规则和软盘存在差异,不能直接复用软盘的读写代码逻辑。

内容的提问来源于stack exchange,提问作者Paiku Han

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.31 06:27:05