具有共享库支持的Grub引导加载程序

时间:2014-08-20 04:25:46

标签: shared-libraries bootloader grub

我想在启动阶段使用grub boot-loader加载共享库(闭源二进制用户空间库)。有没有机会这样做,或者我必须编写一个自定义精灵加载器(grub模块)来做它?


  • 29/08/2014:有关详细信息,这是一个编程问题,我在其中 想要为Grub boot-loader定制或添加一些新功能 项目。感谢您的支持!

1 个答案:

答案 0 :(得分:20)

所以,你不清楚自己想要做什么,但是:

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

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

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

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