使用 efi 的“grub_efi_get_variable”函数构建 GRUB2 模块时出错

Posted

技术标签:

【中文标题】使用 efi 的“grub_efi_get_variable”函数构建 GRUB2 模块时出错【英文标题】:Error when building GRUB2 module with efi's "grub_efi_get_variable" function 【发布时间】:2014-12-24 15:20:40 【问题描述】:

这是在我的 Makefile.core.def 中: ... ... 模块 = 名称 = mymod; 共同=净/mymod.c; ; ... ...

当我尝试构建时,我得到: mv syminfo.lst.new syminfo.lst 猫 syminfo.lst |排序 | gawk -f /build/boot_project/src/grub/grub2/grub-core/genmoddep.awk > moddep.lst || (rm -f moddep.lst;退出 1) mymod 中的 grub_efi_get_variable 未定义 make[5]: *** [moddep.lst] 错误 1

mymod.c has "#include <grub/efi/efi.h>" and tries to use "grub_efi_get_variable" function.  I see that in syminfo.lst
> more syminfo.lst
...
undefined mymod grub_efi_get_variable
...

有人能解释一下错误以及如何解决吗?

谢谢,

PS 我在 /build/boot_project/src/grub/grub2/grub-core/ 中编辑了 Makefile.core.def 和 Makefile.core.am 以包含我的模块并在 /build/boot_project/src/ 中运行 autogen.sh grub/ 重新生成 Makefile.in,然后我在 /build/boot_project/src/grub/ 中运行 dmake

【问题讨论】:

您要为什么平台构建,如何配置它? 我正在使用在 x86 系统上运行的 Solaris。我修改了 grub2.core.def 和 grub2.core.am 并构建。我没有运行任何额外的配置。 这些是实际的文件名吗?我什至没有在谷歌上得到任何点击。你如何在没有任何配置的情况下构建它?源代码来自哪里?您能否编辑问题并添加您运行的实际命令? 是的,这些是实际的文件名,来源来自 grub 源代码树(旧树)。最新的来源可以在git.savannah.gnu.org/gitweb/… 找到。我在我的问题中添加了更多信息。 那是非常老的源代码。你有什么理由不能使用现代代码吗?但鉴于此,我的猜测是您不是为 EFI 平台构建的。尝试使用 --with-platform=efi 运行配置。 【参考方案1】:

使用 --with-platform=efi 运行配置。无论如何,我注意到 Makefile.core.am 为模块 mymod 启用了所有平台。所以我将 Makefile.core.def 编辑为: module = name = mymod;共同=净/mymod.c;启用 = efi;重新运行 autogen.sh 后,Makefile.core.am 中只添加了带有 efi 的平台,并且构建工作正常。

【讨论】:

以上是关于使用 efi 的“grub_efi_get_variable”函数构建 GRUB2 模块时出错的主要内容,如果未能解决你的问题,请参考以下文章

ubuntu安装必须要有efi吗,win7与ubuntu12.04双系统如何使用efi,efi分区应必须是硬盘的第一个分区吗?

使用EFI引导从硬盘(U盘)安装Win7的图文教程

关于黑苹果的EFI该如何的配置和Config Configuration工具的使用

修改efi分区

FindFirstVolume 不返回 EFI 系统分区

EFI引导安装Win7过程是怎样的安装教程