磁盘设备配置——IDE SATA 光盘软盘在 bochsrc 里的声明
Bochs 模拟的存储硬件
Bochs 模拟了一个典型 2000 年代 PC 的存储控制器:
- IDE 控制器(ATA):两组(ata0、ata1),每组一个 master + 一个 slave,共 4 个 IDE 设备
- 软盘控制器(FDC):floppyA、floppyB
- NVMe(可选,取决于编译选项):现代存储接口
最常用的组合是:ata0-master 放启动盘、ata1-master 放光盘 ISO、floppyA 放软盘镜像(启动介质或调试用)。
ata0-master:声明主硬盘
典型配置:
ata0-master: type=disk, path="hd60M.img", mode=flat, cylinders=121, heads=16, spt=63
各字段含义:
| 字段 | 说明 |
|---|---|
type | disk(硬盘)、cdrom(光盘)、unknown(自动检测) |
path | 磁盘镜像文件路径(相对或绝对) |
mode | 磁盘格式模式 |
cylinders | 柱面数(flat 格式必须手动指定) |
heads | 磁头数(flat 格式必须手动指定) |
spt | 每磁道扇区数(flat 格式必须手动指定) |
model | 磁盘型号字符串(可选,影响某些老软件的硬件识别) |
biosdetect | BIOS 是否检测这个设备(none / auto / cmos) |
status | inserted / ejected(光盘常用) |
mode:磁盘格式家族
Bochs 支持多种磁盘镜像格式:
| mode | 说明 | cylinders/heads/spt | 典型用途 |
|---|---|---|---|
flat | 单文件平面格式 | 必须手动指定 | 最常用;bximage 创建的默认格式 |
concat | 多文件拼接 | 不需要 | 大磁盘分卷存储 |
sparse | 稀疏可回滚格式 | 不需要 | 系统还原 / 实验环境(可撤销) |
vmware3 | VMware v3 格式 | 不需要 | 导入 VMware 镜像 |
vmware4 | VMware VMDK v4 格式 | 不需要 | 导入 VMware 镜像 |
vhdx | Hyper-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 扇区:
- 60MB 标准参数:cylinders=121, heads=16, spt=63 → 121 × 16 × 63 = 122208(接近)
- 或者:cylinders=765, heads=4, spt=40 → 765 × 4 × 40 = 122400
注意:实际容量可能和乘积略有出入——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
光盘和软盘按需启用,不用的删掉或注释掉。