我想在引导加载阶段本身使用 libc 提供的一些功能。是否有可能在加载阶段获得它们?
答案1
您很可能必须编写自己想要的函数版本,但在某些情况下您可能可以使用 libc 源代码作为起点。 libc 本身的函数是在 UNIX 用户空间程序的所有假设下编写的,包括:
- 内核的存在(或更具体地说,内核的系统调用接口)
- 平面内存模型
- 动态链接基础设施(除非静态链接)
而在引导加载程序阶段,这些都没有。相反,(默认情况下,在英特尔的领导下)您拥有 BIOS、分段内存模型、无内存保护以及对机器的完全控制。
printk()
这与您在内核代码中看到自定义函数而不是printf()
libc 所做的假设printf()
不适用于内核空间的原因相同。
答案2
是的。最简单的方法是将所需的代码复制到引导加载程序。
这些是哪些功能?您应该明白,如果它们依赖系统调用来履行其职责,您就无法使用它们。
答案3
只需使用静态链接即可。动态链接此时将不起作用。