以下makefile片段似乎是objcopy
命令行选项,用于将.so
文件转换为.efi
文件。
OBJCOPYFLAGS = \
-j .text\
-j .sdata\
-j .data\
-j .dynamic\
-j .dynsym\
-j .rel\
-j .rela\
-j .reloc\
--target=efi-app-$(TARGET) <=====HERE
它基本上从.so
文件中提取某些部分并转换为efi-app
目标。
但是当我使用objcopy --info
查看所有支持的输出文件格式(见下文)时,没有efi-app
类型。
那么如何使objcopy
支持efi-app
输出格式?
找到相关链接: https://forums.gentoo.org/viewtopic-p-7197314.html
我似乎需要考虑Gentoo Linux发行版和gnu-efi项目。
如果链接坏了,请添加以下引号。
问题:
我有兴趣学习如何创建UEFI应用程序。一世 安装了gnu-efi ebuild并在自述文件中找到了objcopy 需要支持efi-app-x86_64。当我做objcopy --help时,没有 提到efi-app-x86_64。我尝试添加multitarget useflag 没运气。我想知道是否有人知道如何获得工具链 支持efi或者是否有任何goosd教程(我没有 能够找到任何关于使用gentoo / linux构建efi应用程序。
答案:
首先,Gentoo的GNU-EFI版本为3.0i,非常棒 旧的(2009年9月)。目前的版本是3.0s,虽然在我的 测试它不能很好地工作(二进制文件无法执行)。版本3.0r 对我来说很好,所以你可能想尝试从它下载它 Sourceforge页面并在本地安装。 FWIW,我提交了一份错误报告 要求在今年4月份发布版本,但它没有 官方行动,虽然此错误报告包括本地链接 的ebuild。
关于你的主要问题,我的objcopy也没有显示efi-app-x86_64 作为目标,但它确实有效。这是我得到的支持 目标:
代码:
objcopy: supported targets: elf64-x86-64 elf32-i386 elf32-x86-64 a.out-i386-linux pei-i386 pei-x86-64 elf64-l1om elf64-k1om elf64-little elf64-big elf32-little elf32-big plugin srec symbolsrec verilog tekhex binary ihex
当我使用GNU-EFI编译我的rEFInd时,我得到以下内容(其中包括 make输出中的许多其他消息:
代码:
/usr/bin/objcopy -j .text -j .sdata -j .data -j .dynamic -j .dynsym -j .rel \
-j .rela -j .reloc --target=efi-app-x86_64 refind_x64.so refind_x64.efi
这不会产生任何错误,事实上二进制文件工作正常。
所以底线是:除非它给你,否则不要担心 问题。如果是这种情况,请回复详细信息。
还有一点:可以使用。编译EFI应用程序 TianoCore EDK2而不是GNU-EFI。 TianoCore是一个完整的EFI 实现,所以编译EFI应用程序太过分了,但是 它可以完成这项工作。它也有点奇怪(按Linux标准) 编译过程,这可能使安装和使用尴尬 Linux操作系统。大多数为Linux用户开发的EFI程序,例如新用户 Shim安全工具和gummiboot引导装载程序,使用GNU-EFI,但不会 用TianoCore编译。 OTOH,TianoCore比最新的更新 GNU-EFI,如果你想编译一些东西,它是更好的选择 与TianoCore或其前身开发套件一起开发,如 一个EFI shell程序。可以编译某些工具,例如rEFInd 无论哪种方式。 (rEFInd启动BIOS /传统启动加载器的能力取决于 但是,关于TianoCore的功能;你无法启动BIOS /传统启动 如果你用GNU-EFI编译rEFInd,那就是加载器。)你可以查看rEFInd BUILDING.txt和Makefiles学习如何使用更多的TianoCore Linux / Unix式的方式。最后,哪种工具最好可能依赖 你想要编译什么(哪个特定的现有程序或你自己的程序 你从头开始编写的程序。如果你正在写一个新的 程序,了解您想要使用的EFI功能 重要的。
答案 0 :(得分:1)
我最近一直在考虑生成 64 位 UEFI 应用程序。据我所知,efi-app-x86_64
被 binutils 翻译成 pei-x86-64
。所以我假设 efi-app
被翻译成 pei-i386
。
不幸的是,这似乎没有记录在任何地方。给我线索的邮件列表帖子:https://sourceware.org/legacy-ml/binutils/2018-12/msg00109.html