FreeDOS 网站 指出,大多数人使用 FreeDOS 主要用于三个任务:
- 玩经典的 DOS 游戏
- 运行旧版 DOS 软件
- 运行嵌入式系统
但是,运行“嵌入式”系统意味着什么呢?
嵌入式系统基本上是一个非常精简的系统,专门用于运行特定任务。 您可以将如今的嵌入式系统视为物联网 (IoT) 的一部分,包括传感器、恒温器和门铃摄像头。 如今,许多嵌入式系统都在 Linux 上运行。
但曾几何时,嵌入式系统要么在定制的专有平台上运行,要么在 DOS 上运行。 其中一些基于 DOS 的嵌入式系统至今仍在运行,例如收银机或电话专用交换机 (PBX) 系统。 最近在 2017 年的一个例子中,火车迷发现一个俄罗斯电力火车控制系统(俄语:САВПЭ)运行着 FreeDOS,并带有特殊的软件来控制和监控市郊列车的路线并进行乘客广播。
在 DOS 上设置嵌入式系统需要定义一个运行单个应用程序的最小 DOS 环境。 幸运的是,设置最小的 FreeDOS 环境非常容易。 从技术上讲,启动 FreeDOS 并运行 DOS 应用程序所需的全部内容是内核和 FDCONFIG.SYS
配置文件。
安装最小系统
我们可以使用 QEMU 模拟器和非常小的分配来模拟专用的最小 FreeDOS 系统。 为了更准确地反映嵌入式系统,我将定义一个虚拟机,它只有 8 兆字节的内存和一个仅 2 兆字节的虚拟硬盘驱动器。
为了创建微型虚拟硬盘驱动器,我将使用此 qemu-img
命令来定义一个 2 兆字节的文件
$ qemu-img create tiny.img 2M
Formatting 'tiny.img', fmt=raw size=2097152
此命令行定义了一个 32 位“i386”CPU,具有 8 兆字节的内存,使用 2 兆字节的 tiny.img
文件作为硬盘驱动器映像,并将 FreeDOS 1.3 RC4 LiveCD 用作 CD-ROM 介质。 我们还将机器设置为从 CD-ROM 驱动器启动 (-boot order=d
),尽管我们只需要它进行安装。 设置好一切后,我们将从硬盘驱动器启动已完成的嵌入式系统
qemu-system-i386 -m 8 -hda tiny.img -cdrom FD13LIVE.iso -boot order=d
使用“Live Environment mode”(实时环境模式)启动系统——这为我们提供了一个正在运行的 FreeDOS 系统,我们可以使用它将最小的 FreeDOS 传输到硬盘驱动器。

启动进入 LiveCD 环境
(Jim Hall,CC-BY SA 4.0)
我们需要在虚拟硬盘驱动器上为我们的程序创建一个分区。 为此,请从命令行运行 FDISK 程序。 FDISK 是 FreeDOS 上的标准固定磁盘实用程序。 使用 FDISK 创建一个跨越整个(2 兆字节)硬盘驱动器的单个硬盘驱动器分区。

FDISK,在创建 2 兆字节分区后
(Jim Hall,CC-BY SA 4.0)
但是 FreeDOS 在您重新启动之前不会看到新的硬盘驱动器分区——FreeDOS 仅在启动时读取硬盘驱动器详细信息。 退出 FDISK 并重新启动,您就可以进行下一步了。
重新启动后,您需要在新的硬盘驱动器上创建一个 DOS 文件系统。 由于只有一个虚拟硬盘驱动器,FreeDOS 会将其识别为C:
驱动器。 您可以使用 FORMAT 命令在C:
上创建 DOS 文件系统。 /S
选项将操作系统文件(内核,加上COMMAND.COM
shell 的副本)传输到新驱动器。

格式化新驱动器以创建 DOS 文件系统
(Jim Hall,CC-BY SA 4.0)
现在您已经创建了驱动器并对其进行了格式化,您可以安装将在嵌入式系统上运行的应用程序了。
安装专用应用程序
嵌入式系统实际上只是在专用系统上运行的单用途应用程序。 这种应用程序通常是为它将控制的系统定制构建的,例如收银机、显示终端或控制环境。 对于此演示,让我们使用 FreeDOS 1.3 RC4 安装 CD-ROM 中的程序。 它需要足够小,才能安装到我们为其创建的微型 2 兆字节硬盘驱动器中。 这可以是任何东西——所以只是为了好玩,让我们把它做成一个游戏。
FreeDOS 1.3 RC4 包括几个有趣的游戏。 我喜欢的一个游戏是名为 Simple Senet 的棋盘游戏。 它基于 Senet,一种古埃及棋盘游戏。 游戏的细节对于此演示并不重要,除了我们将安装它并将其设置为嵌入式系统的专用应用程序。
注意:FreeDOS 1.3 中的路径已更改。 本文是在 FreeDOS 1.3 Release Candidate 4 为最新版本时编写的,但 FreeDOS 1.3(非 RC4)更改了一些路径,包括
SENET.EXE
程序的路径。如果您想在 FreeDOS 1.3 上尝试本文中的步骤,则必须更新您的路径。 在 FreeDOS 1.3 RC4 中,
SENET.EXE
二进制文件位于BIN
目录中。 在 FreeDOS 1.3 中,SENET.EXE
位于GAMES\SENET
目录中。也就是说,如果您使用
unzip senet.zip -d C:\FDOS
解压缩 Simple Senet,然后在您的FDCONFIG.SYS
文件中使用SHELL=C:\FDOS\GAMES\SENET\SENET.EXE
。
要安装应用程序,请进入 FreeDOS 1.3 RC4 LiveCD 上的 \PACKAGES\GAMES
目录。 您会在那里看到一长串软件包,我们想要的是 SENET.ZIP
。

FreeDOS 1.3 RC4 中的游戏软件包列表
(Jim Hall,CC-BY SA 4.0)
要将 Simple Senet 软件包解压缩到虚拟硬盘驱动器上,请使用 UNZIP
命令。 所有 FreeDOS 软件包都是 Zip 文件,因此您可以使用任何与 Zip 兼容的存档实用程序来管理它们。 FreeDOS 1.3 RC4 包括 ZIP
用于创建 Zip 存档,以及 UNZIP
用于解压缩 Zip 存档。 两者都来自 Info-Zip 项目。
UNZIP SENET.ZIP -d C:\FDOS
通常,使用 UNZIP
会将 Zip 文件解压缩到当前目录中。 命令行末尾的 -d C:\FDOS
选项告诉 UNZIP
将 Zip 文件解压缩到 C:\FDOS
目录。(-d
表示“destination”,即“目标”。)

解压缩 Simple Senet 游戏
(Jim Hall,CC-BY SA 4.0)
为了在每次嵌入式系统启动时运行 Simple Senet 游戏,我们需要告诉 FreeDOS 使用 Senet 作为系统“shell”。 默认的 FreeDOS shell 是 COMMAND.COM
程序,但您可以使用 FDCONFIG.SYS
内核配置文件中的 SHELL=
指令定义不同的 shell 程序。 我们可以使用 FreeDOS Edit 创建新的 C:\FDCONFIG.SYS
文件。

(Jim Hall,CC-BY SA 4.0)
如果您需要定义其他参数来支持嵌入式系统,您可以将这些参数添加到 FDCONFIG.SYS
文件中。 例如,您可能需要使用 SET
操作设置环境变量,或者使用 FILES=
或 BUFFERS=
语句调整 FreeDOS 内核。
运行嵌入式系统
在完全定义嵌入式系统后,我们现在可以重新启动机器以运行嵌入式应用程序。 运行嵌入式系统通常只需要有限的资源,因此对于此演示,我们将调整 QEMU 命令行以仅从硬盘驱动器启动 (-boot order=c
) 并且不定义 CD-ROM 驱动器
qemu-system-i386 -m 8 -hda tiny.img -boot order=c
当 FreeDOS 内核启动时,它会读取 FDCONFIG.SYS
文件以获取其启动参数。 然后,它使用 SHELL=
行运行 shell。 这会自动运行 Simple Senet 游戏。

将 Simple Senet 作为嵌入式系统运行
(Jim Hall,CC-BY SA 4.0)
我们使用 Simple Senet 演示了如何在 FreeDOS 上设置嵌入式系统。 根据您的需要,您可以使用任何您喜欢的独立应用程序。 在 FDCONFIG.SYS
中的 SHELL=
行中将其定义为 DOS shell,FreeDOS 将在启动时自动启动该应用程序。
但是,这里有一个限制。 嵌入式系统通常不需要退出回到命令提示符,因此这些专用应用程序通常不允许用户退出到 DOS。 如果您设法退出嵌入式应用程序,您可能会看到“Bad or missing Command Interpreter”(错误或缺少命令解释器)提示,您需要在其中输入新 shell 的完整路径。 对于以用户为中心的桌面系统,这将是一个问题。 但是在专用于仅执行一项工作的嵌入式系统上,您应该永远不需要退出。
评论已关闭。