我想在引导阶段使用 grub 引导加载程序加载一个共享库(闭源二进制用户空间库)。有没有这样的机会,或者我必须编写一个自定义elf-loader(grub模块)来做到这一点?
- 2014 年 8 月 29 日:有关更多详细信息,这是一个编程问题,我想在其中自定义或向 Grub 引导加载程序项目添加一些新功能。谢谢大家的支持!
我想在引导阶段使用 grub 引导加载程序加载一个共享库(闭源二进制用户空间库)。有没有这样的机会,或者我必须编写一个自定义elf-loader(grub模块)来做到这一点?
因此,您并没有明确说明您要做什么,但是:
将用户空间(假设 Linux SysV ELF 类型)共享库直接加载到 GRUB 是不可能的。GRUB 模块确实是 ELF 格式,但它们包含额外的标头。该标头中包含的信息是明确的许可声明 - GRUB 将拒绝加载任何未明确 GPLv2+、GPLv3 或 GPLv3+ 的模块。
应该可以编写 ELF 加载器,但更简单的方法可能是编写一个工具来将用户空间库转换为 GRUB 模块。这里当然会有几个限制:
如果重新编译是一个选项,GRUB 还提供了一个 POSIX 仿真层 - 将 CPPFLAGS_POSIX 添加到您的 CPPFLAGS 中,并使用核心标准 POSIX 头文件。看一下 gcrypt 支持的例子。