【问题标题】:Port GNU C Library to minimal hobby OS将 GNU C 库移植到最小的爱好操作系统
【发布时间】:2013-03-12 19:04:19
【问题描述】:

所以我有一个功能不多的最小操作系统。有一个引导加载程序,它以 32 位保护模式加载基本的 C 内核。如何移植到 C 库中以便可以使用 printf 之类的东西?我正在寻找使用 GNU C 库。有教程吗?

【问题讨论】:

  • 它有多少“自定义”内核?
  • 首先你必须移植一个 C 编译器,这很困难(如果不是 GCC,那就是为什么,如果是 GCC,那就是为什么)。然后你必须让那个编译器吃掉glibc的源代码,这更难。
  • @H2CO3 +1 for 如果不是 GCC,那就是原因,如果是 GCC,那就是原因
  • @user21somethingorother...为了执行正确的 printf,移植 C 库和/或编译器还有。你的爱好操作系统有设备 IO 结构吗?如果 printf 是您的主要动机,我建议您忘记 gcc 库,而是查看efgh.com/software/gprintf.txt(您需要提供与您的操作系统/硬件兼容的字符输出功能)。
  • @H2CO3 这将是一个更合适的措辞/含义,同时也不那么令人生畏。 :)

标签: c assembly operating-system osdev hobby-os


【解决方案1】:

好的,移植到 C 库中并不难,我在内核中使用 Newlib。这是一个开始的教程:http://wiki.osdev.org/Porting_Newlib

你基本上需要:

  • 使用交叉编译器编译库(例如 Newlib)
  • 为内核中的一系列系统函数(如 fork、fstat 等)提供存根实现
  • 将库和内核链接在一起

如果您想使用 malloc 或 printf 等函数(在内部使用 malloc),您需要某种内存管理和最简单的 sbrk 工作实现。

【讨论】:

  • +1。我很快就在 EFI 中启动并运行了它。非常棒。
  • 谢谢。显然,您是可以在这里给出简单答案的人之一。其他人只是争论我在编程方面有多糟糕。
【解决方案2】:

我强烈建议不要使用 glibc。这是一头野兽。

改用newlib。将其移植到新内核很容易。您只需要编写一些支持函数,如here 所述。

【讨论】:

  • 您能否详细说明为什么“移植 glibc”会很痛苦?我有一个配备 glibc 的固件。我正在尝试了解 glibc 的可移植性问题,并因此针对我的特定嵌入式设备“消除”glibc。
  • 抱歉我的回复晚了。构建系统本身就是一个怪物,很少有人真正理解。您需要添加对新内核的支持,这是一项艰巨的任务。这需要几天时间,而且这仅适用于构建系统。
【解决方案3】:

另一个新人是musl,专门用于改善嵌入式空间的情况。

不过,它可能不是初学者的最佳选择,因为它仍在进行中。

【讨论】:

    【解决方案4】:

    最好找一个小的 libc,比​​如uClibc。 GNU C 库是巨大的。正如 cmets 所说,第一步是让 C 编译器运行。

    你想做什么?构建一个完整的操作系统是一群人持续几年的工作……最好从已经可行的东西开始,然后破解你最感兴趣的部分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-16
      • 2011-08-30
      • 2010-10-13
      • 1970-01-01
      • 1970-01-01
      • 2010-09-11
      • 2015-06-17
      相关资源
      最近更新 更多