【问题标题】:C / C++ bootable program which reads file contents from a directory on the computer [closed]从计算机上的目录读取文件内容的 C / C++ 可引导程序 [关闭]
【发布时间】:2013-10-05 14:39:24
【问题描述】:

我想创建一个可以存储在 CD 或闪存驱动器上的程序。
该程序应该能够读取目录中的文件内容(如果存在)。例如,在包含“123”的 Linux 桌面文件夹中搜索文件“test”。

但是如何创建可以直接从 BIOS 启动的程序呢?当我在 linux 上创建一个简单的 hello-world 可执行文件时,它将无法在非 linux-OS 上运行。

stdio.h 和 stdlib.h 等库是否仍然可用?

【问题讨论】:

  • 你在这里问的是“我如何编写自己的操作系统?”,答案可能是几本
  • @ranmat11:当他可以使用现有的操作系​​统时,他为什么要编写操作系统?你只需要在 linux 启动后执行脚本。
  • 您可以使用 Buildroot 等工具构建微型 Linux 微发行版,并让它在启动时运行您的程序。
  • @ranmat11:该死的小 linux 是 50mb。而且它不仅仅是“运行一个小程序”。引导程序需要提供文件系统(以及访问它的 api)和程序执行环境。
  • 你们想得太高了。只需构建您自己的定制 RISC 芯片,该芯片只执行您想要的代码,然后将其制作在 fPGA 上,并将其连接到面包板上。将文件刻录到 EEPROM 上,然后 BLAM,您得到了解决方案。软件是为婴儿设计的。

标签: c++ c linux bios


【解决方案1】:

简短的回答是,除非您想编写自己的迷你操作系统,否则这是不可能的。您描述的功能涉及与硬件的大量交互,这通常被提供良好高级 API 的操作系统隐藏。

一个实用的解决方案可能是获取众多迷你 Linux 发行版中的一个,并将它们的实时映像与您的应用程序捆绑在一起。

stdio.h 和 stdlib.h 等库还能使用吗?

它们不会,因为它们的实现通常由操作系统提供。

【讨论】:

    【解决方案2】:

    使用现有的 linux 发行版,其中大部分可从 CD/闪存驱动器启动,并附有如何创建新映像的说明。

    只需将您的程序添加到启动序列中即可。

    你必须弄清楚要挂载/搜索哪个驱动器 - 你说的是一个“目录”,没有提到在什么设备上......

    【讨论】:

    • 他的程序现在如何从 BIOS 启动?
    • @NikosC.:Linux 发行版可从 BIOS 启动,并在启动时运行他的程序,有效地从 BIOS 启动他的程序。
    【解决方案3】:

    好吧,我不是这方面最好的专家,但我做过一些类似的事情,据我所知,你最好的办法是在数据介质(闪存、CD-ROM)的引导扇区中放置一个汇编程序然后做工作 - 例如分区软件的工作原理。当从您的中型 BIOS 启动时,将在启动扇区开始执行代码,这就是您可以启动的地方。但由于您似乎需要支持不同的文件系统,这在汇编中可能很难做到。我在汇编中使用过 FAT32,但不确定 Linux 文件系统。也许有人在网上放了一些汇编代码。

    【讨论】:

    • 这是一个很好的例子,说明了一个基本正确但几乎无用的答案。你说得很对,但想想你在回答谁,以及他们从这样的回答中受益的可能性有多大。此外,在汇编中编写文件系统访问代码充其量是错误的建议。我认为这是当今时代疯子的胡言乱语,但这只是我:)
    • 谢谢你的意见,好吧,正如我所提到的 - 因为我不是每天都面临这样的问题,所以这些只是我的两分钱(只有关于使用可启动 Linux 的答案证明了这一点分发更容易做),我还提到从程序集进行文件系统访问是一种开销,但至少作者被告知拥有 MBR 代码的可能性,这不是这个网站要展示的重点所有观点?;)
    【解决方案4】:

    不采用整个现有操作系统内核(如 linux)的唯一实用解决方案是重用 grub。 Grub 是一个 32 位受保护模式的可执行文件,并支持某些文件系统。我认为它有足够的文件系统实现来让您遍历目录和文件块。我非常怀疑它会让你通过 C 库 API 来完成,你需要使用 grub 自己的内部 API。而且它可以从 BIOS 启动。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多