我想在启动阶段使用grub boot-loader加载共享库(源代码二进制用户空间库)。有什么机会吗,或者我必须编写一个自定义的elf-loader(grub模块)来做到这一点?

  • 2014年8月29日:有关详细信息,这是我遇到的编程问题
    想要自定义或向Grub引导加载程序添加一些新功能
    项目。感谢您的全力支持!
  • 最佳答案

    因此,您并不清楚要做什么,但是:

    无法将用户空间(假定为Linux SysV ELF类型)共享库直接加载到GRUB中。 GRUB模块确实采用ELF格式,但是它们包含其他头文件。该 header 中包含的信息包括显式许可证声明-GRUB将拒绝加载非显式GPLv2 +,GPLv3或GPLv3 +的任何模块。

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

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

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

    关于shared-libraries - 具有共享库支持的Grub bootstrap ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25396711/

    10-12 03:39