bochs 中文文档 下载 App

NE2000 与 E1000 网卡——Bochs 的网络接口配置

Bochs 支持的网卡设备

网卡bochsrc 关键字总线速率适用系统
NE2000ne2k:ISA 或 PCI10 MbpsDOS、Windows 9x、Linux 老内核
Intel 82540EMe1000:PCI1 GbpsWindows XP+、Linux

NE2000 是 PC 史上最经典的网卡——几乎所有操作系统都有它的驱动,配置简单。E1000 是后来的千兆替代。

基本配置

NE2000 网卡

ne2k: enabled=1, mac=00:40:3c:00:00:01, ethmod=slirp

E1000 网卡

e1000: enabled=1, mac=00:40:3c:00:00:02, ethmod=slirp
字段说明
enabled开/关(OS 开发通常关)
macMAC 地址(6 字节十六进制,冒号分隔)
ethmod网络模式(最重要的字段)
script / optionethmod 的辅助参数(tap 模式的 tap 设备名等)

ethmod 网络模式详解

网络模式决定了模拟网卡的数据包到底去了哪里——这是 Bochs 网络配置里最关键的设计选择。

none(默认)

ethmod=none

不连网。客户机看不到任何外部网络。MAC 地址虽然配了但没用。

slirp(推荐,最易用)

ethmod=slirp

用户模式网络——Bochs 内置了一个轻量级的 NAT 路由器,客户机走一个虚拟的 10.0.2.x/24 网段。特点:

经典系统运行上网、OS 开发者在模拟内核里用 curl 下载东西——slirp 是首选。

tap(TAP 设备)

ethmod=tap, script=tap-linux.sh

宿主机上有一个真实的 TAP 虚拟网络设备,客户机网卡直接和它桥接。特点:

OS 开发者在调试网络驱动、做真实的 TCP/UDP 实验时用 tap 模式。

raw

ethmod=raw, script=eth0

把 Bochs 网卡直接绑定到宿主机的真实网卡(eth0)。客户机相当于直接插在宿主机所在的网络里。需要 root 权限,风险较高(客户机发的包直接出去了)。

fdb

ethmod=fdb, script=trace.pcap

从 .pcap 文件读取/写入数据包——完全离线,用来复现特定网络场景或回放抓包。

MAC 地址怎么选

Bochs 不强制 MAC 地址格式,但最好遵循:

OS 开发场景要不要开网卡

通常不开。原因:

  1. 网卡驱动本身是一个独立的复杂模块——对初学内核的人来说,在还没搞清楚内存管理和文件系统之前就加网卡只会增加复杂度
  2. Bochs 的 NE2000/E1000 实现精度很高,驱动如果写错可能很难排查是驱动 bug 还是 Bochs 模拟 bug
  3. 如果只是想在模拟内核里用 printf 输出,调试器本身就比网卡好用得多

例外:你的内核实验主题就是"写一个网卡驱动"——那就开。调试器里对 NE2000 的 I/O 端口下断点(如 b 0x300)可以追踪每一次寄存器读写。

经典系统运行的网络

Windows 98 上网:用 NE2000 + slirp,装 NE2000 驱动,IP 设为 DHCP(slirp 有内置 DHCP 服务)。

Windows XP:用 E1000 + slirp,XP 自带 E1000 驱动。

Bochs 调试器里可以用 watch ne2k 或 watch e1000 观察网卡行为(取决于编译时是否启用了对应的调试选项)。