1

次の 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

追加 1

関連リンクを見つけました: https://forums.gentoo.org/viewtopic-p-7197314.html

Gentoo Linux ディストリビューションとgnu-efiプロジェクトを検討する必要があるようです。

リンクが壊れている場合に備えて、以下の引用を追加してください。

質問:

UEFI アプリケーションの作成方法を学ぶことに興味がありました。gnu-efi ebuild をインストールしたところ、readme で objcopy が efi-app-x86_64 をサポートする必要があることがわかりました。objcopy --help を実行すると、efi-app-x86_64 について言及されていません。multitarget useflag を追加しようとしましたが、うまくいきませんでした。efiをサポートするツールチェーンを入手する方法を誰かが知っているか、またはgentoo / Linuxを使用してefiアプリを構築することに関するgoosdチュートリアルがあるかどうか疑問に思っていました.

答え:

まず、Gentoo の GNU-EFI はバージョン 3.0i で、これは非常に古いものです (2009 年 9 月)。現在のバージョンは 3.0 ですが、私のテストではうまく動作しません (バイナリの実行に失敗します)。バージョン 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

これによりエラーは発生せず、実際、バイナリは正常に動作します。

つまり、問題が発生しない限り、心配する必要はありません。その場合は、詳細を投稿してください。

もう 1 点: GNU-EFI ではなく TianoCore EDK2 を使用して EFI アプリケーションをコンパイルすることが可能です。TianoCore は完全な EFI 実装であるため、EFI アプリケーションをコンパイルするだけではやり過ぎですが、十分に機能します。また、奇妙な (Linux 標準による) コンパイル プロセスもあり、Linux からインストールして使用するのは厄介です。新しい Shim セキュリティ ツールや gummiboot ブート ローダーなど、Linux ユーザー向けに開発されたほとんどの EFI プログラムは GNU-EFI を使用し、TianoCore ではコンパイルされません。OTOH、TianoCore は GNU-EFI よりもはるかに最新であり、TianoCore またはその前身の開発キット (EFI シェル プログラムなど) で開発されたものをコンパイルする場合に適しています。rEFInd などの一部のツールは、どちらの方法でもコンパイルできます。(rEFInd' ただし、BIOS/レガシー ブート ローダーを起動する機能は、TianoCore の機能に依存します。rEFInd を GNU-EFI でコンパイルすると、BIOS/レガシー ブート ローダーを起動できません。rEFInd の BUILDING.txt と Makefile を見て、より Linux/Unix に似た方法で TianoCore を使用する方法を学ぶことができます。最終的に、どのツールが最適かは、何をコンパイルするか (特定の既存のプログラムか、ゼロから作成する独自のプログラムか) によって異なります。新しいプログラムを作成している場合は、使用する EFI 機能を理解することが重要になる場合があります。どのツールが最適かは、何をコンパイルするか (特定の既存のプログラム、またはゼロから作成する独自のプログラム) によって異なります。新しいプログラムを作成している場合は、使用する EFI 機能を理解することが重要になる場合があります。どのツールが最適かは、何をコンパイルするか (特定の既存のプログラム、またはゼロから作成する独自のプログラム) によって異なります。新しいプログラムを作成している場合は、使用する EFI 機能を理解することが重要になる場合があります。

4

1 に答える 1