AR# 21533

12.1 EDK - 実行プログラム (ELF ファイル) のサイズを小さくする方法

説明

EDK で C ファイルを作成しました。この実行プログラム ファイルの生成に LibGen を使用すると、ブロック メモリ サイズよりも大きなサイズの ELF ファイルになり、次のようなエラー メッセージが表示されます。

"ERROR:MDT - Elf file Counter/executable.elf does not reside completely within BRAM memory of processor ppc405_0."

この実行プログラム ファイル (ELF ファイル) のサイズを小さくするにはどうすればよいでしょうか。

ソリューション

ファイルのサイズを小さくするには、該当するライブラリを使用してコードを最適化し、リンカ スクリプトを変更します。

たとえば、xil_printf を使用すると、標準の printf よりも少ないリソースが使用されます。詳細は %EDK_install_directory%/doc にある oslib_rm.pdf を参照してください。

また、コマンド ラインで「-ffunction-sections -Wl,--gc-sections」というコマンドを使用することもできます。使用方法は次のとおりです。

-ffunction-sections : コンパイル中に各ファンクションが別のセクションにまとめられます。
-Wl,-gc-sections : リンカにより使用されていないセクションが削除されます。

使用されていないファンクションが破棄されます。

「-ffunction-sections」を実行すると、コンパイラでセクション名に「.text*」という文字列が作成されるので、これを変更するか、ユーザーのリンカ スクリプトを作成する必要がある場合があります。たとえば、

.text : { *(.text) }

ではなく

.text : { *(.text*) }

となります。また、外部チップ メモリでこの問題を回避する方法もあります。

メモ : -g オプションを使用するとデバッグ セクションが含まれるので ELF ファイルのサイズが大きくなりますが、このデバッグ セクションは、実行ファイルがエンベデッド システムに読み込まれると破棄されます。

メモ : 「-ffunction-sections -Wl,--gc-sections」 オプションは mb-gcc と一緒に使用すると正しく機能しません。詳細は、(ザイリンクス アンサー 37426) を参照してください。
AR# 21533
日付 08/16/2010
ステータス アクティブ
種類 一般
ツール