bochs 中文文档 下载 App

硬件设备启用与禁用——PCI USB 网卡声音的 bochsrc 配置

pci: PCI 总线与芯片组

pci: enabled=1, chipset=i440fx, slot1=cirrus, slot2=..., slot3=...
字段说明
enabled是否启用 PCI 总线(1 开 0 关)
chipsetPCI 芯片组型号
slotNPCI 插槽 N 上的设备

chipset 选择

chipset适用场景
i440fx经典 PC 芯片组(Pentium II/III/4 时代),最常用
i440bx类似 i440fx,略新
piix3 / piix4更老的芯片组
x58 / ivybridge / haswell现代芯片组,配合 coreduo 及以上 CPU

OS 开发和 WinXP 用 i440fx 就够了。

slot 上可插什么

Bochs 预定义了一系列 PCI 设备可以插入 slot:

VGA 通常通过 pci slot1 插入——这样操作系统才能通过 PCI BAR(Base Address Register)找到 VGA 的内存映射窗口。

ne2k / e1000:网卡

ne2k: enabled=1, mac=00:40:3c:00:00:01, ethmod=slirp, script=
字段说明
macMAC 地址(不能全 0,不能和其他网卡重复)
ethmod网络模式
script网络模式辅助参数

ethmod 网络模式

ethmod说明OS 网络可见性
none不连网无
slirp用户模式网络(最常用)客户机能上网,外面不能连进来
tapTAP 设备客户机有独立 IP,可和宿主机互通
raw原始套接字(Linux only)完整的网络层,但需 root
fdb用 .pcap 文件作为输入/输出离线测试

OS 开发通常不开网卡——减少变量。经典系统运行上网试试可以开 slirp。

e1000(PCI 千兆网卡)

e1000: enabled=1, mac=00:40:3c:00:00:02, ethmod=slirp

配置和 ne2k 几乎一样,只是设备更现代。Linux 内核默认有 e1000 驱动。

sb16 / es1370:声卡

sb16: enabled=1, midimode=none, wavemode=dummy, waveintfreq=44100

SB16 是 DOS/Win9x 时代最经典的 ISA 声卡。字段里 wavemode 可选 dummy(静音)或 wav(录到 .wav 文件)。现代系统用 es1370。

OS 开发不开声卡——对内核调试没帮助。跑经典 DOS 游戏时开 SB16 享受音效。

usb: USB 控制器和设备

usb: enabled=1
usb_uhci: enabled=1
usb_e1000: ...   # USB 网卡
usb_mouse: ...   # USB 鼠标
usb_tablet: ...  # USB 手写板

OS 开发通常不开 USB——驱动太复杂,对调试内核没帮助。

只开必要的设备

OS 开发场景下,大部分硬件都不需要:

# 最小化配置示例
cpu: model=pentium4, count=1, ips=15000000
memory: guest=64, host=64

romimage: file=BIOS-bochs-latest, address=0xfffc0000
vgaromimage: file=VGABIOS-lgpl-latest-cirrus.bin

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

vga: extension=cirrus
pci: enabled=1, chipset=i440fx, slot1=cirrus
keyboard: keymap=us
mouse: enabled=0
display_library: sdl

# 网络/声卡/USB 全关掉——os 开发不需要
ne2k: enabled=0
sb16: enabled=0
usb: enabled=0

简洁的 bochsrc 有两个好处:

  1. 少一个设备就少一个可能出错的地方(设备初始化失败、IRQ 冲突)
  2. PCI 枚举、MSI/MSI-X 路由这些对 OS 开发者来说反而是噪声——除非你在写 PCI 驱动

关于 model 和 BIOS 检测

ata0-master 的 model 字段可选:

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

这个字符串会被 BIOS 和操作系统枚举到。某些老软件会根据型号字符串判断硬件类型——如果遇到兼容性问题可以试试改。通常留空让 Bochs 用默认值就行。