AR# 25252

14.2 EDK - mb-objcopy を使用して ELF ファイルをバイナリに変換しようとするとエラー メッセージが表示される

説明

mb-objcopy.exe を使用して ELF ファイルをバイナリに変換しようとすると、次のエラー メッセージが表示されます。

"Error Message:

---------------------------------------

mb-objcopy -O binary loader.elf loader.bin
BFD: Warning: Writing section `.text' to huge (ie negative) file offset 0x86000000.
BFD: Warning: Writing section `.init' to huge (ie negative) file offset 0x86000b2c.
BFD: Warning: Writing section `.fini' to huge (ie negative) file offset 0x86000b58.
BFD: Warning: Writing section `.ctors' to huge (ie negative) file offset 0x86000b78.
BFD: Warning: Writing section `.dtors' to huge (ie negative) file offset 0x86000b80.
BFD: Warning: Writing section `.rodata' to huge (ie negative) file offset 0x86000b88.
BFD: Warning: Writing section `.data' to huge (ie negative) file offset 0x86000cc8.
BFD: Warning: Writing section `.jcr' to huge (ie negative) file offset 0x86001014.
mb-objcopy: loader.bin: File truncated"

ソリューション


この警告メッセージは、実行ファイルのベクター セクションとメイン セクションの間のメモリ ギャップが大きいために表示されます。

objcopy プログラムで連続していないメモリ セクションが処理されると、自動的に 0 に置き換えられます。上記のケースでは、オフセットが非常に大きいので、プログラムが出力 BIN ファイルを切り捨てて、警告メッセージを出力している状態です。こうしないと、出力ファイルのサイズが非常に大きくなります (バイトで 0x00 ~ 0x86000000 = 2GB)。

この問題を回避するには、次のコマンドを使用して、連続していないメモリ セクションが 0 に置き換えられるのを防ぎます。

mb-objcopy -O binary -j .vectors.reset -j .vectors.sw_exception -j .vectors.interrupt -j .vectors.hw_exception ./spi_user_app/executable.elf ./flash_burn/spi_user_app1.b
mb-objcopy -O binary -R .vectors.reset -R .vectors.sw_exception -R .vectors.interrupt -R .vectors.hw_exception ./spi_user_app/executable.elf ./flash_burn/spi_user_app2.b
cat ./flash_burn/spi_user_app1.b >> ./flash_burn/spi_user_app2.b

これらのコマンドで異なるセクションごとにそれぞれ BIN ファイルを生成し (ベクター セクションのみのものと、ベクター セクションを除いたもの)、後でファイルをまとめます。

このアンサーは、mb-objcopy で作成される BIN ファイルのサイズを縮小し、フラッシュに BIN ファイルを保存する必要がある場合にも適用します。この BIN ファイルはフラッシュからは実行できず、ブートローダーを使用して、フラッシュから DDR に BIN ファイルをコピーする必要があります。

注記 : BIN フォーマットに変換された Xilkernel アプリケーションの中には、DDR にブートロードされた後に実行しないものがあります。この問題を回避するには、cat コマンドを実行しないでください。

代わりに、iMPACT (またはコマンド ライン) で MCS ファイルを生成するとき、2 つの BIN ファイルが別々にまとめられます。たとえば、ベクター スペースを含む BIN ファイルが b400000 の SPI オフセットに配置されると、それ以外のセクションは b400000 にベクター スペース (400hex) を足したところに配置されます。コマンド ラインからこれを実行するには、次のようになります。

promgen -spi -w -p mcs -u 0 download.bit -data_file up b40000 app1.bin -data_file up b40400 app2.bin

アンサー レコード リファレンス

マスター アンサー レコード

Answer Number アンサータイトル 問題の発生したバージョン 修正バージョン
34609 EDK 12.x - アンサーのリスト N/A N/A

関連アンサー レコード

Answer Number アンサータイトル 問題の発生したバージョン 修正バージョン
36497 12.1 EDK - 割り込みルーチンが含まれているとブートローダーでユーザー アプリケーションを読み込むことができない N/A N/A
AR# 25252
日付 01/30/2013
ステータス アクティブ
種類 一般
ツール 詳細 概略