bochs 中文文档 下载 App

光盘与软盘镜像——ISO 启动和软盘引导的 bochsrc 配置

光盘(ISO)镜像配置

基本用法

ata1-master: type=cdrom, path="debian.iso", status=inserted
boot: cdrom, disk
字段说明
typecdrom(光盘专用,不要用 disk)
pathISO 文件路径
statusinserted(已插入)或 ejected(弹出)
model光驱型号字符串(可选)
biosdetectBIOS 是否检测(默认 auto)

光盘不需要 C/H/S 参数——ISO 9660 文件系统有自己的扇区布局,Bochs 能自动识别。

典型场景

Linux 发行版安装

ata0-master: type=disk, path="linux.img", mode=flat, cylinders=2482, heads=16, spt=63
ata1-master: type=cdrom, path="debian-12.iso", status=inserted
boot: cdrom, disk

先从光盘启动进入 Debian 安装器,装完改 boot: disk 从硬盘启动。

Windows XP 安装

ata0-master: type=disk, path="winxp.img", mode=flat, cylinders=1040, heads=255, spt=63
ata1-master: type=cdrom, path="winxp-sp3.iso", status=inserted
boot: cdrom, disk

注意 Windows 安装盘需要把启动顺序放在首位——boot: cdrom, disk。

动态弹出/更换

Bochs Launcher 或 bochsrc 都可以动态更换光盘:

经典场景:装完系统,换一张驱动光盘继续装驱动。

软盘镜像配置

基本用法

floppyA: type=1_44, path="boot.img", status=inserted
boot: floppy
字段说明
type软盘尺寸(决定容量和几何)
path软盘镜像文件
statusinserted / ejected
biosdetectBIOS 是否检测(默认 auto)

软盘的 type 值:

type容量说明
1_441.44 MB最常用的 3.5" 高密度盘
720k720 KB3.5" 低密度
2_882.88 MBED(Extra High Density)
2_880同上别名

type 隐含了软盘的 C/H/S 参数——1.44MB 软盘默认是 80 cylinders × 2 heads × 18 sectors/track。

OS 开发场景:用软盘引导 Bootloader

这是 Bochs OS 开发实验的经典起步方式——因为软盘 0 道 0 头 1 扇区就是 Bootloader 的加载位置,恰好是物理地址 0x7c00。

# 1. 创建空白软盘镜像
bximage -q -create -fd -size 1_44M -filename boot.img

# 2. 写入 512 字节 Bootloader
dd if=bootloader.bin of=boot.img bs=512 count=1 conv=notrunc

# 3. bochsrc 里
floppyA: type=1_44, path="boot.img", status=inserted
boot: floppy

然后 bochsdbg 启动后:

bochs:1> b 0x7c00          # 在 Bootloader 入口下断点
bochs:2> c                 # 继续执行
# 第一次启动时 BIOS 会从软盘加载引导扇区到 0x7c00 然后跳转
# 调试器停住,你可以开始分析

这个流程是 MIT 6.828、哈工大操作系统等课程实验一的起步方式。

软盘里放更多数据

如果 Bootloader 需要读软盘上的内核文件(超过 512 字节),可以用 losetup 挂载软盘镜像、copy 内核文件进去:

sudo losetup /dev/loop0 boot.img
sudo mount -t vfat /dev/loop0 /mnt/floppy
cp kernel.bin /mnt/floppy/
sudo umount /mnt/floppy
sudo losetup -d /dev/loop0

软盘镜像可以格式化成 FAT12/FAT16——大多数老 OS 和 Bootloader 都支持。

光盘和软盘不能同时作为启动盘

boot: cdrom, floppy, disk   # Bochs 会按这个顺序尝试

但有个陷阱:BIOS 启动顺序里光盘和软盘的优先级有时会有冲突——某些老 BIOS 的启动顺序是固定的,bochsrc 的 boot: 关键字可能不生效(取决于芯片组和 BIOS 版本)。如果遇到奇怪的启动行为,把不需要的设备禁用(注释掉 ata1-master 或 floppyA)更可靠。

软盘和 BIOS 启动签名

BIOS 判定软盘是否"可引导"的依据是引导扇区最后两个字节(偏移 0x1FE, 0x1FF)是否是 0x55 0xAA。OS 开发者写 Bootloader 时必须确保这两个字节在 510 和 511 位置。

如果 Bochs 报:

Boot failed: could not read the boot disk

检查一下你的 bootloader.bin 最后两个字节——大概率是没写 0x55AA 签名。

大小限制

对于 OS 内核(几十到几百 KB),软盘足够装 Bootloader,内核文件可以:

  1. 追加到软盘剩余空间
  2. 放在另一个硬盘镜像里,让 Bootloader 从硬盘读取
  3. 从光盘读取(适合更复杂的实验)