如今,许多嵌入式系统都在Linux上运行。但是,很久很久以前,嵌入式系统要么运行在定制的专有平台上,要么运行在DOS上。FreeDOS网站声称大多数人使用FreeDOS来完成三个主要任务:玩经典DOS游戏运行老式DOS软件运行嵌入式系统但是运行“嵌入式”系统意味着什么?嵌入式系统基本上是专用于运行特定任务的非常小的系统。您可以将当今的嵌入式系统视为物联网(IoT)的一部分,其中包括传感器、恒温器和门铃摄像头。今天,许多嵌入式系统都在Linux上运行。但是,很久很久以前,嵌入式系统要么运行在定制的专有平台上,要么运行在DOS系统上。一些基于DOS的嵌入式系统今天仍在运行,例如,收银机或电话专用小交换机(PBX)系统。举个例子,2017年,火车爱好者发现了一个运行FreeDOS的俄罗斯电动列车控制系统(俄语:САВПЭ),它使用特殊的软件来控制和监控市郊列车的线路,并发布乘客公告。在DOS上构建嵌入式系统需要定义一个最小的DOS环境来运行单个应用程序。幸运的是,设置一个最小的FreeDOS环境非常容易。从技术上讲,启动FreeDOS和运行DOS应用程序所需的只是内核和FDCONFIG.SYS配置文件。安装最小系统我们可以使用QEMU模拟器来模拟专用的最小FreeDOS系统并为其分配少量资源。为了更准确地反映一个嵌入式系统,我将定义一个只有8MB内存和一个只有2MB硬盘的虚拟机。要创建这个微型虚拟硬盘,我将使用此qemu-img命令定义一个2M文件:$qemu-imgcreatetiny.img2MFormatting'tiny.img',fmt=rawsize=2097152下面的命令行定义了我安装32位“i386”CPU,8MB内存,使用2MBtiny.img文件作为硬盘映像,使用FreeDOS1.3RC4LiveCD作为CD-ROM介质。我们还将机器设置为从光驱启动(-bootorder=d),尽管我们只需要它来安装系统。完成所有设置后,我们将从该硬盘启动完成的嵌入式系统:qemu-system-i386-m8-hdatiny.img-cdromFD13LIVE.iso-bootorder=duse"liveenvironmentmodeLiveEnvironmentmode"来引导系统,这将为我们提供一个正在运行的FreeDOS系统,我们可以使用它来将最小的FreeDOS传输到硬盘驱动器。启动进入LiveCD环境(JimHall,CC-BYSA4.0),我们需要在虚拟硬盘驱动器上为我们的程序创建一个分区。为此,从命令行运行FDISK程序。FDISK是FreeDOS上的标准磁盘分区实用程序。使用FDISK创建占用整个(2MB)硬盘驱动器的单个硬盘驱动器分区。FDISK,在创建2MB分区后(JimHall,CC-BYSA4.0)但是,在您重新启动FreeDOS之前,FreeDOS将看不到新的硬盘驱动器分区-FreeDOS仅在启动时读取硬盘驱动器的详细信息。退出FDISK,然后重新启动FreeDOS。重新启动后,您需要在新硬盘上创建一个DOS文件系统。由于只有一个虚拟硬盘,FreeDOS会将其识别为C:驱动器。您可以使用FORMAT命令在C:驱动器上创建DOS文件系统。使用/S选项会将操作系统文件(内核以及COMMAND.COMshell的副本)传输到新驱动器。格式化新驱动器以创建DOS文件系统(JimHall,CC-BYSA4.0)现在您已经创建了硬盘驱动器并对其进行了格式化,您可以安装将安装在新的嵌入式系统上运行的应用程序。安装专用应用程序嵌入式系统实际上只是在专用系统上运行的单一用途应用程序。这些应用程序通常是为它们将要控制的系统定制构建的,例如收银机、显示终端或控制环境。对于这个演示,让我们使用FreeDOS1.3RC4安装CD中的一个程序。它需要足够小以适合我们为其创建的微型2MB硬盘驱动器。这可以是任何东西,所以,为了好玩,让我们把它变成一个游戏。FreeDOS1.3RC4包括一些有趣的游戏。我最喜欢的游戏之一是名为“SimpleSenet”的棋盘游戏。这是一款基于Senet的古埃及棋盘游戏。游戏的细节对于本次演示并不重要,我们将安装它并将其设置为嵌入式系统的专业应用程序。要安装该应用程序,请在FreeDOS1.3RC4LiveCD上转到\PACKAGES\GAMES目录。您会在其中看到一长串软件包,我们需要SENET.ZIP。来自FreeDOS1.3RC4的游戏包列表(JimHall,CC-BYSA4.0)要将“SimpleSenet”包提取到虚拟硬盘,请使用UNZIP命令。所有FreeDOS软件包都是Zip文件,因此您可以使用任何Zip兼容的归档实用程序来管理它们。FreeeDOS1.3RC4包括用于创建Zip档案的ZIP和用于提取Zip档案的UNZIP。它们都来自Info-Zip项目。UNZIPSENET.ZIP-dC:\FDOS通常,使用UNZIP将Zip文件解压缩到当前目录。命令行末尾的-dC:\FDOS选项将告诉UNZIP将Zip文件解压缩到C:\FDOS目录中。(-d指的是“目的地”)。解压SimpleSenet游戏(JimHall,CC-BYSA4.0)为了让嵌入式系统开始运行“SimpleSenet”游戏,我们需要告诉FreeDOS使用Senet作为系统“外壳”。默认的FreeDOSshell是COMMAND.COM程序,但是,您可以使用FDCONFIG.SYS内核配置文件中的SHELL=指令来定义不同的shell程序。我们可以使用FreeDOS的Edit新建一个C:\FDCONFIG.SYS文件。(JimHall,CC-BYSA4.0)如果您需要定义额外的参数来支持嵌入式系统,您可以将它们添加到FDCONFIG.SYS文件中。例如,您可能需要使用SET操作来设置环境变量,或者使用FILES=或BUFFERS=语句来调整FreeDOS内核。运行嵌入式系统完全定义了嵌入式系统后,我们现在可以重新启动计算机以运行嵌入式应用程序。运行嵌入式系统通常只需要有限的资源,因此为了演示我们需要将QEMU命令行调整为仅从硬盘驱动器启动(-bootorder=c)而不是定义光驱:qemu-system-i386-m8-hdatiny.img-bootorder=c当FreeDOS内核启动时,它会读取FDCONFIG.SYS文件以获取启动参数。然后它将使用SHELL=行上的定义运行shell。这将自动运行“SimpleSenet”游戏。将SimpleSenet作为嵌入式系统运行(JimHall,CC-BYSA4.0)我们使用“SimpleSenet”来演示如何在FreeDOS上设置嵌入式系统。根据您的需要,您可以使用任何您喜欢的独立应用程序。使用FDCONFIG.SYS中的SHELL=行将其定义为DOSshell,FreeDOS将在启动时自动启动该应用程序。但是,这里有一个限制。嵌入式系统通常不需要退出到命令行提示符,因此这些专门的应用程序通常不允许用户退出到DOS。如果您设法退出嵌入式应用程序,您可能会看到“错误或缺少命令解释器”提示,您需要在其中输入新shell的完整路径。对于以用户为中心的桌面系统,这将是一个问题。但在嵌入式系统上,它只专注于执行一种工作,所以你永远不需要退出嵌入式应用程序。
