硬件设备启用与禁用——PCI USB 网卡声音的 bochsrc 配置
pci: PCI 总线与芯片组
pci: enabled=1, chipset=i440fx, slot1=cirrus, slot2=..., slot3=...
| 字段 | 说明 |
|---|---|
enabled | 是否启用 PCI 总线(1 开 0 关) |
chipset | PCI 芯片组型号 |
slotN | PCI 插槽 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:
cirrus→ Cirrus Logic GD5446 VGA(常用)ne2k→ PCI NE2000 网卡e1000→ Intel 82540EM 千兆网卡sb16→ Sound Blaster 16 ISA(注意:SB16 通常插 ISA 槽,但 Bochs 里也能插 PCI)es1370→ Ensoniq AudioPCI(PCI 声卡)ahci→ SATA 控制器uhci/ehci/xhci→ USB 控制器
VGA 通常通过 pci slot1 插入——这样操作系统才能通过 PCI BAR(Base Address Register)找到 VGA 的内存映射窗口。
ne2k / e1000:网卡
ne2k: enabled=1, mac=00:40:3c:00:00:01, ethmod=slirp, script=
| 字段 | 说明 |
|---|---|
mac | MAC 地址(不能全 0,不能和其他网卡重复) |
ethmod | 网络模式 |
script | 网络模式辅助参数 |
ethmod 网络模式
| ethmod | 说明 | OS 网络可见性 |
|---|---|---|
none | 不连网 | 无 |
slirp | 用户模式网络(最常用) | 客户机能上网,外面不能连进来 |
tap | TAP 设备 | 客户机有独立 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 有两个好处:
- 少一个设备就少一个可能出错的地方(设备初始化失败、IRQ 冲突)
- 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 用默认值就行。