是否可以在引导加载阶段本身​​使用 libc?

是否可以在引导加载阶段本身​​使用 libc?

我想在引导加载阶段本身​​使用 libc 提供的一些功能。是否有可能在加载阶段获得它们?

答案1

您很可能必须编写自己想要的函数版本,但在某些情况下您可能可以使用 libc 源代码作为起点。 libc 本身的函数是在 UNIX 用户空间程序的所有假设下编写的,包括:

  • 内核的存在(或更具体地说,内核的系统调用接口)
  • 平面内存模型
  • 动态链接基础设施(除非静态链接)

而在引导加载程序阶段,这些都没有。相反,(默认情况下,在英特尔的领导下)您拥有 BIOS、分段内存模型、无内存保护以及对机器的完全控制。

printk()这与您在内核代码中看到自定义函数而不是printf()libc 所做的假设printf()不适用于内核空间的原因相同。

答案2

是的。最简单的方法是将所需的代码复制到引导加载程序。

这些是哪些功能?您应该明白,如果它们依赖系统调用来履行其职责,您就无法使用它们。

答案3

只需使用静态链接即可。动态链接此时将不起作用。

相关内容