我想创建一个可以存储在 CD 或闪存驱动器上的程序。
该程序应该能够读取目录中的文件内容(如果存在)。例如,在包含“123”的 Linux 桌面文件夹中搜索文件“test”。
但是如何创建可以直接从 BIOS 启动的程序呢?当我在 linux 上创建一个简单的 hello-world 可执行文件时,它将无法在非 linux-OS 上运行。
像 stdio.h 和 stdlib.h 这样的库还能使用吗?
使用现有的 linux 发行版,其中很多都可以从 CD/闪存驱动器启动,并附有如何创建新映像的说明。
只需将您的程序添加到引导序列中即可。
不过,您必须弄清楚要挂载/搜索的驱动器-您说的是“目录”,而没有提及在什么设备上...
好吧,我不是这方面最好的专家,但我做过一些类似的事情,据我所知,你最好的办法是将汇编程序放在数据介质(闪存、CD-ROM)的引导扇区中,然后执行工作 - 例如分区软件的工作方式。当从您的中型 BIOS 启动时,将在启动扇区开始执行代码,这就是您可以启动的地方。但由于您似乎需要支持不同的文件系统,这在汇编中可能很难做到。我在汇编中使用过 FAT32,但不确定 Linux 文件系统。也许有人在网上放了一些汇编代码。
唯一不采用整个现有操作系统内核(如 linux)的实用解决方案是重用grub。Grub 是一个 32 位受保护模式的可执行文件,并支持某些文件系统。我认为它有足够的文件系统实现来让您遍历目录和文件块。我非常怀疑它会让你通过 C 库 API 来完成,你需要使用 grub 自己的内部 API。而且它可以从 BIOS 启动。
简短的回答是,除非您想编写自己的迷你操作系统,否则这是不可能的。您描述的功能涉及与硬件的大量交互,这通常被提供漂亮的高级 API 的操作系统隐藏。
一个实用的解决方案可能是获取许多迷你 linux 发行版中的一个,并将它们的实时图像与您的应用程序捆绑在一起。
像 stdio.h 和 stdlib.h 这样的库还能使用吗?
它们不会,因为它们的实现通常由操作系统提供。