
如果你对老式DOS程序、底层C开发或者就是单纯想折腾点不一样的编译环境感兴趣那你迟早会撞见 FreeDOS 和 DJGPP 这两个名字。我最近就在 VirtualBox 里把这一套完整搭了一遍——从创建虚拟机开始到装好 FreeDOS 系统再在 DOS 命令行里用 gcc 编译出可执行文件整个过程比我想象中顺但坑也不少。这篇文章就是把我走的弯路和最终验证能跑的方案都记录下来给想在 Windows 或 Linux 主机上快速复现这套环境的朋友当个参考。整个流程真正操作下来也就两三个小时不需要找老古董硬件一台普通电脑就够了。1. 整体设计与方案选型1.1 为什么选择 VirtualBox 而不是其他虚拟机这个话题下很多人第一反应是 DOSBox。确实DOSBox 跑单个 DOS 程序和游戏非常方便启动快、配置简单但它本质上是一个模拟器追求的是“能跑”而不是“还原一套开发环境”。如果你只是想体验一下 DOS 下的 C 编译DOSBox 够了但如果你想深入研究 DOS 系统的引导过程、分区结构、内存管理或者模拟一台可以长期使用的开发机那 VirtualBox 这种虚拟机更合适。VirtualBox 是 Oracle 家的开源虚拟化软件跨平台支持 Windows、Linux、macOS最关键的一点是它成熟稳定、社区资料多。我这次用的是 5.2.44 这个版本老归老但配合 FreeDOS 这种轻量系统非常顺畅而且对老系统兼容性好。新版本也能用只是没必要为了一个 DOS 环境去适配最新版的功能。VirtualBox 还提供 VBoxManage 命令行工具这意味着整个建机、配参、挂载光盘的流程都可以脚本化对之后想部署多台测试环境的人非常友好。再说一个核心优势快照功能。DOS 系统老祖宗级的东西了配置错了、环境变量写崩了、程序把系统搞坏了在实机上你可能要重装系统但在 VirtualBox 里一个快照回滚就搞定。这一点在后面积累编译环境时简直是救命稻草。1.2 为什么用 FreeDOS 而不是 MS-DOS如果你是和我一样的老派玩家年轻时用过 MS-DOS 6.22那 FreeDOS 并不会让你觉得陌生。它是一个完全开源、兼容 MS-DOS 的免费系统支持 FAT16/FAT32 分区内置了大量工具而且官方镜像可以直接下载不需要考虑授权问题。更关键的是FreeDOS 还在持续更新比如 1.2、1.3 版本都带了不少额外的驱动和实用程序对现代硬件的虚拟机兼容性也更好。MS-DOS 的问题在于收不到了虽然很多网站还能找到老镜像但使用起来有安全隐患而且缺乏现代场景下的驱动支持。FreeDOS 则带着一股“开源社区项目”的开放劲你可以看到它的源码也可以按需裁剪甚至还能自己给它的内核提交补丁。作为一个学习和搭建环境的选择FreeDOS 是更接近“正常人会选”的答案。1.3 为什么用 DJGPP 作为编译环境DJGPP 全称是 DJs GNU Programming Platform简单说就是把 GNU 编译器工具链搬到了 DOS 平台上。它用的虽然是 32 位扩展模式但生成的可执行文件可以在 DOS 上直接运行这就让 FreeDOS 这台“老系统”拥有了现代化的 C/C 编译能力。选择 DJGPP 的原因很直接它是 DOS 下最完整、最接近 Linux 下 GCC 使用体验的编译环境。它包含 gcc、g、make、binutils、调试器 gdb 等一系列工具写好的 C 代码在 FreeDOS 里编译、运行和你在 Linux 终端里的感觉非常像。而且 DJGPP 自带 DPMIDOS Protected Mode Interface支持即使没有内存管理程序也能在保护模式下运行不过这中间有不少细节后面我会专门展开讲。如果你的需求只是想在虚拟机上体验一下“在 DOS 里敲命令编译程序”的复古感跳着看后面的安装步骤就够了如果你想认真在上面写代码、学编译原理那建议把每一节都看完很多坑我是实打实踩过的。2. 环境准备与虚拟机创建2.1 制作用到的文件清单动手之前先把原料备齐别到半路发现缺文件又去下载。下面是我这次用的完整文件清单你可以照着准备文件说明获取方式VirtualBox 5.2.44 安装包虚拟机本体官网或国内镜像站下载FreeDOS 1.3 Full CD ISO系统安装光盘镜像FreeDOS 官网下载 fdfullcd.isodjdev205.zipDJGPP 核心运行时DJGPP 官网或镜像站gcc1020b.zipgcc 编译器DJGPP 官网对应版本目录bnu225b.zipbinutils 工具集DJGPP 官网对应版本目录mak418b.zipmake 构建工具DJGPP 官网对应版本目录unzip32.exeDOS 下解压 zip 的免安装工具FreeDOS 安装包内自带或网上找DJGPP 的 zip 包有很多个最核心的是上面这几个。注意版本号可能随官网更新有变化比如 gcc 有 10.2、11.2 等不同版本选择时保持同一套工具链内部版本一致就好避免 binutils 和 gcc 版本差异导致莫名其妙的问题。下载时建议从 delorie 官方镜像或镜像站拉第三方站点改包的风险谁也不想碰到。2.2 创建虚拟机的关键参数设置装系统前先把虚拟机的“底子”打好。VirtualBox 图形界面里的“新建虚拟机”向导也可以完成大部分工作但我更推荐用 VBoxManage 命令行好处是可记录、可重复、参数透明。下面是我用的完整创建命令VBoxManage createvm --name FreeDOS-DJGPP --ostype DOS --register VBoxManage modifyvm FreeDOS-DJGPP \ --memory 128 \ --vram 16 \ --acpi off \ --ioapic off \ --audio sb16 \ --nic1 pcnet \ --cableconnected1 on \ --boot1 dvd \ --boot2 disk \ --boot3 none \ --boot4 none VBoxManage createhd --filename FreeDOS.vdi --size 2048 --format VDI --variant Standard VBoxManage storagectl FreeDOS-DJGPP --name IDE Controller --add ide --controller PIIX4 VBoxManage storageattach FreeDOS-DJGPP \ --storagectl IDE Controller --port 0 --device 0 --type hdd --medium FreeDOS.vdi VBoxManage storageattach FreeDOS-DJGPP \ --storagectl IDE Controller --port 1 --device 0 --type dvddrive --medium fdfullcd.iso这些参数一个个说。内存给 128MB 对 FreeDOS 来说已经非常宽裕了DOS 的常规内存上限是 640KB但 DJGPP 编出来的程序运行在保护模式下可以直接访问全部物理内存所以内存给大一点编译更快128MB 是一个很平衡的值。显存 16MB 足够FreeDOS 下的图形程序不多给太多没有意义。ACPI 我直接关了老系统上 ACPI 有时会引起中断分配异常尤其是 DOS 这类不依赖高级电源管理的系统开着反而可能出问题。网卡选了 PCnet-FAST III 而不是默认的 Intel PRO/1000因为 FreeDOS 对传统 AMD PCnet 的驱动支持更成熟后面装了网络包可以直接识别。声卡选 SoundBlaster 16这是 DOS 时代的事实标准兼容性最好。硬盘我给的是 2GB 固定大小Fixed Size 的好处是性能稳定且不碎片化缺点是创建时占用物理空间。2GB 对于装系统加 DJGPP 编译环境来说完全够用C 盘分 1.5GB剩下的留作 D 盘数据盘这样结构干净也方便管理。2.3 挂载安装光盘与启动顺序创建完虚拟机后在 VirtualBox 主界面选中“FreeDOS-DJGPP”进入“设置 - 存储”确认 IDE 控制器下已经挂载了 FreeDOS 的 ISO 文件。然后到“系统 - 主板”里把启动顺序调整为光驱优先、硬盘其次这样开机就能直接从安装盘引导。启动虚拟机后屏幕会出现 FreeDOS 的引导菜单通常有两个重要选项一个是安装到硬盘的 Install 流程另一个是直接进入 Live 环境体验但这不会写入硬盘。这里直接选择安装到硬盘即可别 livemode因为我后面还等着把系统装好装编译环境Live 模式重启就没了。如果你的 FreeDOS 引导画面乱码或显示异常先别慌多半是显存或显卡类型的问题。在 VirtualBox 里把显卡控制器改成 VBoxVGA老方案或 VMSVGA新方案一般就能解决。显示这块后面的排错章节我会再细说。3. 安装 FreeDOS 系统3.1 分区与格式化FreeDOS 安装器启动后会让你选择安装方式常见的有 Full Install、Custom Install 和 Minimum Install。我建议选 Custom 或者 Full因为后面编译环境需要用到一些配套工具用 Full 虽然占一点硬盘空间但省得后面缺工具再手动补。进入硬盘分区环节安装器会调用 FDISK 类工具。如果你看到的是字符界面操作方式和老 DOS 的 fdisk 一模一样用方向键选择“Create DOS partition or Logical DOS Drive”先创建主分区Primary DOS Partition把大小设成 1500MB 左右然后按 Esc 退回主菜单把该分区设为活动分区Set active partition。之后退出 FDISK系统会提示重启但重启前先不要关虚拟机回到安装器界面继续或者直接重启也行。分区格式化时安装器会提示选择文件系统FreeDOS 1.3 支持 FAT16 和 FAT32。主分区 1.5GB 用 FAT16 就够了FAT16 单分区最大 2GB但如果你后面想要更大的数据盘D 盘可以用 FAT32。实际上在虚拟环境里文件系统选 FAT32 更省心因为 FAT16 对文件名有 8.3 格式限制写代码文件倒是无所谓但拷贝一些工具的说明文档时太长的文件名会被截断。3.2 安装过程中的几个选择安装器会把选定的包挨个拷到硬盘。这里重点注意到了选择安装组件那一页一定要确保勾选了 Command Line Tools 和 Networking Support。命令行工具里包含 Edit 文本编辑器、Unzip 解压工具等都是后面要用的。Networking Support 会装网卡驱动和 DHCP 客户端虽然 FreeDOS 用得少但万一你要在虚拟机里做网络实验没有就尴尬了。安装过程很快几分钟就完事。完成后安装器会提示你取出光盘并重启。在 VirtualBox 里直接把光驱从启动顺序里去掉或者把启动顺序改回硬盘优先重启后看到 C: 提示符说明 FreeDOS 已经装好了。输入 VER 回车屏幕上会显示 FreeDOS 的版本号那一刻还挺有成就感的一台完全属于你的 DOS 机器就这样诞生了。3.3 装完系统后的基础验证系统装好后别急着装 DJGPP先做几项基础验证确认环境正常。依次执行这几个命令C:\ FDISK /STATUS C:\ MEM C:\ DIRFDISK /STATUS 可以查看分区状态确认 C 盘活动且格式正常MEM 能看到常规内存和扩展内存总量FreeDOS 启动后常规内存在 620KB 以上都算正常DIR 看一眼根目录文件确认系统文件都在。顺手也可以把 AUTOEXEC.BAT 和 FDCONFIG.SYS 打开看一下内容这两个是 DOS 的“开机自动执行”和“内核配置”文件后面配 DJGPP 环境变量用的就是它们。这里提醒一句VirtualBox 默认开启光标捕获装完系统后按右 Ctrl 键可以释放鼠标。DOS 系统里没有图形桌面鼠标基本用不上键盘操作就够了所以这块影响不大。4. 搭建 DJGPP 编译环境4.1 把 DJGPP 文件送进虚拟机这是整个流程里最容易被卡住的一步。FreeDOS 没有 VirtualBox Guest Additions所以“共享文件夹”这种虚拟机功能用不了U 盘直通对 DOS 系统支持又很差只靠软盘镜像 1.44MB 显然也放不下几百 MB 的编译器。我试验下来最稳定的方案是把 DJGPP 的所有 zip 包打成一个 ISO 镜像挂到虚拟机的光驱上然后在 FreeDOS 里直接读取光驱文件并解压。制作 ISO 的方法很多Linux 下就用 mkisofsmkdir djgpp-iso cp djdev205.zip gcc1020b.zip bnu225b.zip mak418b.zip djgpp-iso/ mkisofs -o djgpp.iso -J -R djgpp-iso/Windows 下可以用 UltraISO 或 AnyBurn 之类的工具拖拽生成。ISO 文件不用特别讲究只要能把 zip 包原样塞进去就行。注意生成时用 Rock Ridge 或 Joliet 文件系统这样在 DOS 下读长文件名不至于太乱。其实 DOS 下读 ISO 靠光驱驱动FreeDOS 安装时如果选了光驱支持D: 盘就是光驱挂载新 ISO 后直接就能访问到 zip 文件。4.2 在 FreeDOS 下解压 DJGPP进入 FreeDOS 后把制作好的 djgpp.iso 挂到虚拟机光驱VirtualBox 里直接在“存储”面板替换 ISO 即可。在 DOS 提示符下先看一下 D 盘内容C:\ D: D:\ DIR能看到几个 zip 文件就对了。接下来在 C 盘建立 DJGPP 目录并逐个解压。FreeDOS 自带的 unzip 可能版本旧也可以下载 unzip32.exe 备用。解压命令C:\ MKDR DJGPP C:\ CD DJGPP C:\DJGPP UNZIP D:\djdev205.zip C:\DJGPP UNZIP D:\gcc1020b.zip C:\DJGPP UNZIP D:\bnu225b.zip C:\DJGPP UNZIP D:\mak418b.zip注意解压顺序没有严格要求但 core runtimedjdev205.zip最好先解压因为它提供了解压工具和基础库。解压完成后C:\DJGPP 目录下应该会出现 BIN、LIB、INCLUDE 等子目录这是 DJGPP 的标准目录结构。BIN 里放着 gcc.exe、g.exe、make.exe 等可执行文件LIB 里是库文件INCLUDE 里是头文件。解压完先别急着关虚拟机打开 C:\DJGPP\BIN 看一眼睛有没有 gcc.exe。有时候 zip 包下载不完整解压过程会出现文件缺失后面编译就报“文件找不到”的错误。提前确认能省不少时间。4.3 配置环境变量DJGPP 不像现代系统有系统级环境变量它依赖 AUTOEXEC.BAT 里的两条设置。用 FreeDOS 自带的 Edit 编辑器修改C:\ EDIT C:\AUTOEXEC.BAT在文件里加入两行SET DJGPPC:\DJGPP\DJGPP.ENV SET PATHC:\DJGPP\BIN;%PATH%第一行的 DJGPP 环境变量告诉编译工具链去找它的配置文件 DJGPP.ENV这个文件在解压时已经自动生成了没有它 gcc 会报错说找不到配置文件。第二行的 PATH 把 DJGPP 的 bin 目录加进了查找路径这样在任意目录下敲 gcc 都能启动编译器。改完保存后重启虚拟机或者直接在命令行里重新执行两条 SET 让当前会话生效。重启后输入 gcc -v 测试如果看到一长串编译器的版本和配置信息说明 DJGPP 已经成功激活。我看到那个版本信息的时候真有那么一瞬间感觉自己回到了 1998 年的机房电脑前。5. 编译测试与核心环节实现5.1 用 DJGPP 编译一个 Hello World环境搭好之后的第一件事当然是写个 Hello World 感受一下。FreeDOS 自带的 Edit 编辑器足够改代码了虽然比不上现代 IDE 的自动补全但写个小程序绰绰有余。在 C 盘建一个开发目录C:\ MKDIR DEV C:\ CD DEV C:\DEV EDIT HELLO.C输入经典的 C 代码#include stdio.h int main(void) { printf(Hello, DJGPP on FreeDOS!\n); return 0; }保存后退出编辑直接编译C:\DEV gcc -Wall -o hello.exe hello.c如果没有任何输出那就是好消息。GCC 的特性是“不出声就是成功”。运行编译好的程序C:\DEV hello Hello, DJGPP on FreeDOS!第一个 DOS 原生可执行文件诞生了。这个 hello.exe 理论上拿到真实的 DOS 实机上也能跑前提是有足够的内存和 DPMI 支持这就是 DJGPP 的威力——编译出的不是模拟器里才能跑的玩具而是一个真正 32 位保护模式的 DOS 程序。5.2 写一个带文件操作的小程序练手只跑 Hello World 不过瘾我建议写一个带文件读写的小程序把 DJGPP 和 FreeDOS 的组合拳再练熟一点。比如生成斐波那契数列并写入文件#include stdio.h int main(void) { FILE *fp; long a 0, b 1, c; int i; fp fopen(FIB.TXT, w); if (fp NULL) { printf(Cannot create FIB.TXT\n); return 1; } fprintf(fp, Fibonacci sequence:\n); for (i 0; i 40; i) { fprintf(fp, %ld\n, a); c a b; a b; b c; } fclose(fp); printf(Done. Check FIB.TXT\n); return 0; }编译运行后用 TYPE 命令查看 FIB.TXT 的内容C:\DEV gcc -Wall -o fib.exe fib.c C:\DEV fib Done. Check FIB.TXT C:\DEV TYPE FIB.TXT到这一步你应该对 FreeDOS 下的开发流程有体感了编辑、编译、运行、查看输出全在命令行下完成没有任何图形界面的干扰。这种极简环境反而让人更专注于代码本身我现在偶尔还会专门开着这个虚拟机写点小算法不为别的就是图它清净。5.3 用 Make 管理多文件工程写单个源文件的程序用命令直接编译就够了但代码多起来、文件多起来之后Make 就成了必需品。DJGPP 自带了 make.exe用法和 Linux 下的 make 几乎一致。创建一个名为 Makefile 的文件all: fib.exe fib.exe: fib.c gcc -Wall -o fib.exe fib.c clean: del fib.exe del fib.txt然后在命令行里执行 make看到的效果和 Linux 下一样C:\DEV make gcc -Wall -o fib.exe fib.cMake 的存在让 FreeDOS 下的开发环境在工程组织能力上并没有输给现代系统太多。DJGPP 还支持 gdb 调试器如果你配置过远程调试或串口调试甚至可以在 FreeDOS 里做断点调试不过那是另一个大坑这里先不展开。6. 常见问题与排查技巧实录6.1 VirtualBox 层面的报错搭建过程中最容易遇到的报错往往不是 FreeDOS 系统的而是 VirtualBox 自身的。下面是我遇到过的高频问题报错 / 现象原因解决办法Kernel driver not installed (rc-1908)主机上的 VirtualBox 驱动被 Hyper-V 或内核隔离干扰关闭 Windows 的 Hyper-V、内存完整性隔离重启后重装 VirtualBox虚拟机启动黑屏光标闪但不引导启动顺序没设对或 ISO 镜像损坏检查系统启动顺序光驱是否第一优先重新下载 ISO 并校验 MD5鼠标被虚拟机捕获后无法释放虚拟机窗口外鼠标释放快捷键变了默认右 Ctrl 键释放检查 VirtualBox 全局设置创建虚拟机时找不到 DOS 或 FreeDOS 系统类型VirtualBox 版本太老或列表里叫法不同选择 Operating System 为 Other/Unknown 或 DOS不影响安装E_FAIL (0x80004005) 错误虚拟磁盘文件被占用或权限问题关闭所有 VirtualBox 进程检查 VDI 文件权限以管理员身份运行 VBoxManagerc-1908 这个报错在 Windows 上尤其常见核心问题几乎都是主机上开了虚拟化安全功能。如果你平时用 WSL2 或 DockerWindows 会默认启用 Hyper-V这时候 VirtualBox 5.x 的老驱动就起不来。网上各种“卸载重装”的偏方都试过之后我最后是到“启用或关闭 Windows 功能”里关掉 Hyper-V再关闭“内存完整性”相关设置才彻底解决。6.2 FreeDOS 系统运行中的问题FreeDOS 本体很稳定但在虚拟机上运行还是会遇到一些奇怪现象。我整理了一份排查速查现象原因解决办法安装光盘引导后乱码显卡类型或显示控制器不兼容切换显卡控制器为 VBoxVGA显存设到 16MB系统启动到一半卡住ACPI 中断冲突或网卡驱动没加载好在 VirtualBox 里关闭 ACPI网卡换成 PCnet-FAST III键盘输入延迟或丢字符虚拟机的 USB 键盘驱动与 FreeDOS 不兼容使用 PS/2 模式键盘避免 USB 直通用 DIR 看到的长文件名被截断FAT16 文件系统限制数据分区改 FAT32或文件按 8.3 命名规则取名网络命令找不到安装时没选 Networking Support 包重新运行安装器或手动安装网络驱动包如 PCNTPK9.SYS声卡测试无声声卡型号匹配不上VirtualBox 声卡类型选 SoundBlaster 16音量调节确认DOS 系统本身非常简单问题多半集中在硬件模拟不匹配上。FreeDOS 的官方文档和社区论坛对网卡、声卡的兼容性列表写得很详细遇到不识别的外设先去查那个表别自己瞎试浪费时间。6.3 DJGPP 编译和运行时的报错DJGPP 这边的问题更有针对性我遇到的坑基本都集中在环境变量和 DPMI 上报错 / 现象原因解决办法gcc: command not foundPATH 没配好确认 AUTOEXEC.BAT 里有 SET PATHC:\DJGPP\BIN;%PATH%gcc: DJGPP.ENV not foundDJGPP 环境变量没设置检查 SET DJGPPC:\DJGPP\DJGPP.ENV 是否生效找不到头文件 stdio.h解压不完整或 DJGPP.ENV 路径不对重新解压 zip 包确认 INCLUDE 目录存在编译好的 exe 运行报 DPMI not found缺少 DPMI 内存管理程序把 C:\DJGPP\BIN\CWSDPMI.EXE 复制到 PATH 任一目录或加载 HIMEMexe 一运行就退出没任何输出早期版本 DJGPP 与某些 VGA 模式冲突调整虚拟显存或切换 VBoxVGA 兼容模式编译时内存不足或溢出同时开了太多 TSR 程序占用常规内存卸载多余 TSR用 HIMEM/EMM386 管理扩展内存DPMI not found 是我踩过的一个比较经典的坑。DJGPP 生成的程序默认运行在 32 位保护模式下需要在 DOS 里有一个 DPMI 服务者来提供保护模式环境。DJGPP 自带的 CWSDPMI.EXE 正常会自动加载但如果你的内存管理配置把它挡住了程序就会瞬间退出。解决办法是最小化 AUTOEXEC.BAT 和 FDCONFIG.SYS 里的附加驱动尽量只保留 HIMEM 和必要的文件系统驱动给保护模式留出干净的环境。7. 踩坑实录与最终建议7.1 最值得说的几个坑整个流程走完有四个坑是我反复踩过才总结出来的值得单独记一笔。第一个是 ACPI 的坑。新装虚拟机时 VirtualBox 默认开启 ACPI 和 IO APIC但对 FreeDOS 这种老系统ACPI 带来的中断路由变化经常导致启动卡在“Loading...”之后黑屏。我第一次装的时候没注意卡了半小时才反应过来进设置一关 ACPI 马上正常。所以装 FreeDOS 时记住一个原则能关的现代硬件特性尽量关DOS 要的是简单直接。第二个是文件传输的坑。我最早想省事让 FreeDOS 去读 Windows 格式的 U 盘结果折腾 USB 直通搞了半天FreeDOS 对 USB 大容量存储的支持非常粗糙。后来老老实实把 zip 包做成 ISO 挂光驱一下子就通了。在 DOS 世界里光盘和软盘就是最靠谱的介质交换方案别想太多花活。第三个是解压的坑。DJGPP 的 zip 包很大如果在 Windows 下解压再把文件复制到虚拟磁盘很容易在文件名编码和长文件名上出问题。最稳妥的方法是把原始 zip 包直接丢进 FreeDOS在 DOS 环境下用 unzip 解压让 DOS 自己处理文件和目录结构。这样虽然慢一点但一次就到位。第四个是快照的坑。这个算不上坑是个经验每完成一个重要里程碑比如系统装好了、DJGPP 解压完了、第一个编译通过就打一个快照。后续操作出任何问题一条命令回到可用状态省下大量重复劳动。VirtualBox 在 FreeDOS 这种轻量系统上做快照几乎不占时间和空间成本极低。7.2 环境搭好之后还可以怎么玩DJGPP 能做的事远不止编译一个 hello world。你可以安装 NASM 汇编器在 FreeDOS 里写 x86 汇编程序配合 DJGPP 的库函数做混合编程也可以装 Open Watcom做 DOS4GW 类型的分段式开发甚至可以把 DJGPP 的 gcc 配成交叉编译器在 Linux 下编译 DOS 可执行文件形成现代开发、老系统运行的完整工作流。如果喜欢复古游戏开发DJGPP 配合 Allegro 图形库是经典组合开过源、有大量教程很多老游戏同人作品就是这套环境做出来的。对我来说这个虚拟机最大的价值是让我重新体会到了“极简开发”的乐趣——没有包管理器的自动依赖没有 IDE 的运行配置只有编辑器、编译器、命令行三件套一切清清楚楚。7.3 一点实用的配置建议最后分享一个我留作备忘的推荐配置组合照着这个组合省心一点虚拟机内存 128MB显存 16MB关闭 ACPI全程 PS/2 键盘网卡选 PCnet-FAST III仅当需要网络测试时启用平时可以断开连接硬盘 2GB VDI 固定分配C 盘 1.5GB FAT16D 盘剩余空间 FAT32 做数据盘编译环境打包好之后保留一份 ISO 形式的 DJGPP 安装包随时复建虚拟机每次进入复杂调试前先打快照哪怕是只打算试一个新驱动这套环境搭好后我最大的感受是它把“老系统”从博物馆变成了一个可以随时调用的开发环境。DOS 下开发没有现代 IDE 的辅助编译报错全靠自己读反而逼着你把 C 语言的内存、指针、编译过程这些底层概念彻底搞明白。如果你也在学 C 语言或者对操作系统底层感兴趣强烈推荐亲自搭一次体验绝对值得。最后再透露一个小技巧在 FreeDOS 里编译大工程前先在 VirtualBox 里拍个快照进可攻退可守折腾起来才放心。