【问题标题】:Coding C libraries for an Operating System为操作系统编写 C 库
【发布时间】:2020-02-10 01:14:36
【问题描述】:

我需要一些认真的帮助。我正在尝试,我的意思是真的想创建一个类似 DOS 的操作系统。我阅读了多篇文章,阅读了多本书(我什至为 O'Reilly Media 支付了终身订阅费),但无济于事,我发现没有任何用处。我想学习如何制作操作系统库,这就提出了一个问题: 如果您为操作系统编译程序,那么您为程序编写的库是否相同? 我知道操作系统的制作非常具有挑战性,而且极少数确实尝试制作的程序员从未产生过这就是为什么它被描述为the great pinnacle of programming.的原因。但是,我仍然会尝试制作一个(只是为了好玩,也许会在途中学习一些指针)。我需要做的基本上就是学习如何制作库、C(我已经知道并喜欢)、程序集(我有点知道如何与 C 一起使用)和编译器(我使用 GNU 工具链)。 我唯一遇到的问题是对库进行编码。我现在就像 ,谁知道编码库如此之难,就像给我指一本书一样或者其他的东西!但不是。 我不是在这里要一本书,我要的只是一些关于如何做到这一点的建议:

  • 如何开始制作一些基本的 I/O 库

  • 和做普通C库一样吗

最后,

  • 会很难吗? (JK 我已经知道这将是非常困难,这就是我准备这么多的原因)

总之,主要问题是,谁能帮助我或提供一些关于如何完成这项工作的提示或建议,或者是否有一个预构建的库最有可能加快这个过程?

【问题讨论】:

  • 不要尝试。这很无聊也很困难。我试过一次,我怀疑我会完成我的。如果没有底层知识,I/O 是非常困难的,并且首先要淘汰一大堆其他东西,比如中断处理程序。与此相比,C 库是小菜一碟。甚至一个标准的 C 库也是。
  • 编写一些基本的 I/O 库需要首先了解信息是如何存储在磁盘上的。然后我相信通常有一些方法可以通过BIOS芯片访问信息。所以这将取决于平台(?),我建议使用像 QEMU 这样的模拟器进行开发
  • 我会看看这个,因为它有一些很好的信息,我认为涵盖了你会感兴趣的 github.com/cfenollosa/os-tutorial
  • @AlecC BIOS 是一个令人讨厌的、过时的 x86 可憎之物。 ARM SoC 中没有等价物。我不认为 UEFI 提供了 BIOS 兼容模式或任何 IO 服务供操作系统使用。任何操作系统都将枚举硬件并直接与设备交互。这显然不是微不足道的。
  • FreeDOS 是一个与 DOS 兼容的开源操作系统,部分使用 C 编写。它可能包含一些 C 库来查看

标签: c operating-system libraries osdev


【解决方案1】:

如果您为操作系统编译程序,您为程序编写的库是否相同?

绝对不是。最低级别的用户空间 C 库对操作系统进行系统调用,以通过设备驱动程序与硬件进行交互;它是您将要编写的设备驱动程序和与硬件的交互。

根据我在嵌入式系统启动方面的经验,您可以从带有传统 RS-232 端口的开发板入手。这是编写驱动程序的最简单的设备 - 您将字节写入内存映射的 IO 地址,稍等片刻,然后再写一些。这也是您的第一个调试输出所在。

您可能会发现自己在摆动 IO 引脚并在通往此的路径上使用逻辑分析仪或 DSO 探测它们 - 因此您需要一个可以访问信号的开发板。

您将无法使用任何标准 C 库 - 因此您需要它提供的某些东西的等价物 - 但在内核空间中 - 包括类型定义、内存管理和编译器期望的内在函数 - 尤其是那些用于记忆障碍。无论如何,C 库不提供任何数据结构或算法,但您肯定希望尽早编写一些。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-07
    • 2017-01-25
    • 2021-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多