11

我想在引导阶段使用 grub 引导加载程序加载一个共享库(闭源二进制用户空间库)。有没有这样的机会,或者我必须编写一个自定义elf-loader(grub模块)来做到这一点?


  • 2014 年 8 月 29 日:有关更多详细信息,这是一个编程问题,我想在其中自定义或向 Grub 引导加载程序项目添加一些新功能。谢谢大家的支持!
4

1 回答 1

20

因此,您并没有明确说明您要做什么,但是:

将用户空间(假设 Linux SysV ELF 类型)共享库直接加载到 GRUB 是不可能的。GRUB 模块确实是 ELF 格式,但它们包含额外的标头。该标头中包含的信息是明确的许可声明 - GRUB 将拒绝加载任何未明确 GPLv2+、GPLv3 或 GPLv3+ 的模块。

应该可以编写 ELF 加载器,但更简单的方法可能是编写一个工具来将用户空间库转换为 GRUB 模块。这里当然会有几个限制:

  • 您需要确保用户空间库不执行任何系统调用 - GRUB 将无法处理它们。
  • 您需要遵守许可规则(因此只能接受三个以上的许可)。
  • 您需要确保这些库不依赖于 glibc 为它们设置的全局偏移量表。

如果重新编译是一个选项,GRUB 还提供了一个 POSIX 仿真层 - 将 CPPFLAGS_POSIX 添加到您的 CPPFLAGS 中,并使用核心标准 POSIX 头文件。看一下 gcrypt 支持的例子。

于 2014-08-25T18:26:28.560 回答