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

tua*_*ntm 11 grub shared-libraries bootloader

我想在启动阶段使用grub boot-loader加载共享库(闭源二进制用户空间库).有没有机会,或者我必须编写一个自定义精灵装载程序(grub模块)来执行此操作?


  • 2014年8月29日:有关更多详细信息,这是一个编程问题,我想在其中自定义或添加一些新功能到Grub boot-loader项目.感谢您的支持!

uni*_*urf 20

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

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

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

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

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

  • 哦,这很有意思(额外的标题).我很高兴你重新打开这个问题所以你可以发布这些信息. (5认同)