bochs 中文文档 下载 App

磁盘设备配置——IDE SATA 光盘软盘在 bochsrc 里的声明

Bochs 模拟的存储硬件

Bochs 模拟了一个典型 2000 年代 PC 的存储控制器:

最常用的组合是:ata0-master 放启动盘、ata1-master 放光盘 ISO、floppyA 放软盘镜像(启动介质或调试用)。

ata0-master:声明主硬盘

典型配置:

ata0-master: type=disk, path="hd60M.img", mode=flat, cylinders=121, heads=16, spt=63

各字段含义:

字段说明
typedisk(硬盘)、cdrom(光盘)、unknown(自动检测)
path磁盘镜像文件路径(相对或绝对)
mode磁盘格式模式
cylinders柱面数(flat 格式必须手动指定)
heads磁头数(flat 格式必须手动指定)
spt每磁道扇区数(flat 格式必须手动指定)
model磁盘型号字符串(可选,影响某些老软件的硬件识别)
biosdetectBIOS 是否检测这个设备(none / auto / cmos)
statusinserted / ejected(光盘常用)

mode:磁盘格式家族

Bochs 支持多种磁盘镜像格式:

mode说明cylinders/heads/spt典型用途
flat单文件平面格式必须手动指定最常用;bximage 创建的默认格式
concat多文件拼接不需要大磁盘分卷存储
sparse稀疏可回滚格式不需要系统还原 / 实验环境(可撤销)
vmware3VMware v3 格式不需要导入 VMware 镜像
vmware4VMware VMDK v4 格式不需要导入 VMware 镜像
vhdxHyper-V VHDX 格式不需要导入 Hyper-V 镜像
undoable只读基映像 + 可写红日志不需要基映像不变,修改写日志

flat 格式为什么必须手动指定几何参数(cylinders/heads/spt)?因为 flat 就是把数据纯线性写入文件——没有元数据告诉你磁盘多大、C/H/S 是多少。bximage 创建 flat 时会打印这些参数,你要抄到 bochsrc 里。

其他格式(sparse、vmdk、vhdx)都带元数据,能自动推断几何参数。

ata1-master:光盘驱动器

ata1-master: type=cdrom, path="debian.iso", status=inserted

光盘不需要 C/H/S 参数,直接写 ISO 路径即可。status=inserted 表示光盘已插入,可以通过 Bochs 菜单弹出/更换。

floppyA:软盘驱动器

floppyA: type=1_44, path="boot.img", status=inserted

软盘 type 常用值:1_44(1.44MB 3.5"高密度)、720k(720KB)、2_88(2.88MB ED 盘)。

软盘是 OS 开发里的经典启动介质——Bootloader 实验通常用软盘镜像起步(512 字节引导扇区直接写进首扇区)。

cylinders / heads / spt 怎么算

flat 磁盘的几何参数要和磁盘镜像的实际大小匹配。计算公式:

总扇区数 = path 文件大小(字节)/ 512
总扇区数 = cylinders × heads × spt

已知总扇区数后,选一组合理的 C/H/S 组合。比如 60MB(62914560 字节)= 122880 扇区:

注意:实际容量可能和乘积略有出入——BIOS 会按你写的参数计算容量,OS 按真实扇区数使用。参数和真实扇区数差距太大会导致某些老系统(如 DOS FDISK)分区错误。bximage 创建磁盘时会自动打印推荐参数,抄下来就行。

一条好记的原则

OS 开发场景下,磁盘配置就这一条模板:

ata0-master: type=disk, path="hd60M.img", mode=flat, cylinders=121, heads=16, spt=63
ata1-master: type=cdrom, path="your-os.iso", status=inserted
floppyA: type=1_44, path="boot.img", status=inserted
boot: disk

光盘和软盘按需启用,不用的删掉或注释掉。