bochs 中文文档 下载 App

bochsrc 语法错误——"syntax error"和关键字段解析失败

bochsrc 语法错误的表现

三种典型报错:

bochs: bochsrc: line 3: syntax error
bochs: bochsrc: unknown keyword 'vga:extension'
bochs: bochs can't find ROM image BIOS-bochs-latest

第一种是"解析失败";第二种是"关键字根本不认";第三种是"字段认了但值有问题"。

五种最高频语法错误

1. 冒号后漏空格(冠军)

bochsrc 每行格式:关键字: 值

冒号和值之间必须有且仅有一个空格。没有空格、有多个空格、或用 Tab 都可能导致问题。

# 错误(冒号后无空格)
vga:extension=cirrus

# 错误(冒号后 Tab 键)
vga:    extension=cirrus

# 正确
vga: extension=cirrus

2. Windows 反斜杠路径被当转义符

bochsrc 里的字符串值(如 file=后面的路径)会被当作 C 风格字符串解析——反斜杠 \ 是转义符。

# 错误(\B、\V、\P 等被当转义符了)
romimage: file=C:\Program Files\Bochs-3.1\BIOS-bochs-latest

# 正确(用正斜杠,bochsrc 完全兼容)
romimage: file=C:/Program Files/Bochs-3.1/BIOS-bochs-latest

# 也可以(双反斜杠)
romimage: file=C:\\Program Files\\Bochs-3.1\\BIOS-bochs-latest

推荐:Windows 路径一律用正斜杠——和 bochsrc 的默认行为最兼容。

3. 值里的引号问题

bochsrc 通常不需要用引号把值括起来:

# 正确
romimage: file=BIOS-bochs-latest

# 也可以(bochsrc 容忍)
romimage: file="BIOS-bochs-latest"

但如果路径里真的有空格,用引号可能有用:

romimage: file="C:/Program Files/Bochs-3.1/BIOS-bochs-latest"

但正斜杠路径 + 引号的组合更保险。

4. 关键字拼写错误

bochsrc 的关键字拼写必须精确,一个字母都不能错。bochsrc 不支持别名或缩写:

正确错误Bochs 行为
romimagerom-image报 "unknown keyword"
romimagerom报 "unknown keyword"
vgaromimagevgarom报 "unknown keyword"
pciPCIbochsrc 对大小写不敏感(但关键字全小写更安全)
ata0-masterata_0_masterbochsrc 对中间分隔符不敏感(- 和 _ 都可以)

5. 注释和空白行

bochsrc 里 # 开头的行是注释。注意:

# 正确(# 在行首)
# 这是一个注释

boot: disk   # 错误!bochsrc 可能把 "boot: disk   # 这是一个注释" 全部当值解析

bochsrc 不支持行尾注释——如果你在关键字值后面写注释,会被一起当值解析。正确做法:注释单独占一行。

用 Launcher 校验 bochsrc

Bochs Launcher(bochs.exe 启动时弹出的那个对话框)有一个隐藏的 bochsrc 校验功能:

  1. 启动 bochs.exe → 输入 2 → Edit Options
  2. 在打开的文本编辑器里粘贴你的 bochsrc 内容(替换原来的 bochsrc.bxrc)
  3. 保存 → 退出编辑器 → Launcher 自动重新加载
  4. 如果 bochsrc 有语法错误,Launcher 会在错误行下面加红色波浪线

这是快速定位 bochsrc 语法问题的最好方法——比逐行瞎猜高效得多。

调试器里验证 bochsrc 是否被正确解析

bochsrc 有一个隐藏功能:可以在 bochsdbg 里用 info 命令查看 bochsrc 的解析结果:

bochs:1> show config           # 显示 bochsrc 最终解析后的完整配置
bochs:2> show feature          # 显示编译时启用的特性

show config 输出里可以看到:

如果 bochsrc 某行解析失败,那行对应的字段在 show config 输出里可能显示为 "default" 或缺失。

bochsrc 示例:一份无语法错误的最简配置

# 最简 bochsrc(注释独占一行)
romimage: file=BIOS-bochs-latest
vgaromimage: file=VGABIOS-lgpl-latest.bin

cpu: model=pentium, count=1
memory: guest=16, host=16

boot: none
mouse: enabled=0
display_library: wx

log: bochsout.txt
panic: action=ask

把上面内容原样保存为 bochsrc(UTF-8 编码),放在 Bochs 安装目录或当前工作目录,bochsdbg -q 应该能正常启动。

PowerShell Set-Content 的坑(Windows 用户注意)

如果你用 PowerShell 创建 bochsrc 文件:

# 错误!Set-Content 默认加 UTF-8 BOM
$config = "romimage: file=BIOS-bochs-latest`nvgaromimage: file=..."
Set-Content -Path "bochsrc" -Value $config

BOM(Byte Order Mark)是 3 个字节(EF BB BF)写在文件开头,bochsrc 解析器可能把它当作关键字的一部分——导致第一行 romimage 变成 romimage,报 "unknown keyword"。

解决方法:

# 用 -Encoding ascii 或 -Encoding utf8 不带 BOM
Set-Content -Path "bochsrc" -Value $config -Encoding ascii

# 或者用 .NET API 精确控制
[System.IO.File]::WriteAllText("bochsrc", $config, [System.Text.Encoding]::ASCII)

或者直接用文本编辑器保存无 BOM 的文件(VS Code / Notepad++ 都支持保存时选择编码)。