ELFおよびBINファイルの生成と変換

GccはELFファイルをコンパイルします。通常gcc -o test test.c、生成されたテストファイルはELF形式で、linuxshellで./testと入力して実行できます。

Binファイルは、ELF形式が削除された、圧縮された実行可能ファイルです。メモリイメージの直接表現です。これは、システムにオペレーティングシステムがロードされていないときに実行できます。

ELF(実行可能ファイルおよびリンク形式)ファイルは、アセンブリ等、シンボルテーブルを含みます
BINファイルは、コードセグメント、データセグメント、およびelfファイルの一部のカスタムセグメントを抽出することによって作成されたメモリイメージです。
 

Embeddedでは、システムの電源がオンでOSシステムが存在しない場合、ELF形式のファイルが焼き付けられ、ELF形式のものが含まれていると、arm操作でこれらの命令が発生し、エラーが発生します。arm-softfloat-linux -gnu-objcopyは純粋なアセンブリbinファイルを生成し、プログラムは段階的に実行できます。

両方のファイルを実行できます

マシンは最終的にBINのみを認識します。ELF形式の理由は、オペレーティングシステムがある場合、オペレーティングシステムはELFに従ってコードやデータなどを解析し、BINで実行されるためです。elfファイル内の情報は比較的完全であるため、シングルステップ追跡モードで実行するために使用できます。重要なのはローダーを確認することです。

 

組み込み開発では、* .Sファイルをコンパイルし、最後にbinファイルを生成します。コンパイルコマンドは、おおよそ次のようになります。

CC = arm-softfloat-linux-gnu-gcc

LD = arm-softfloat-linux-gnu-ld

OBJCOPY = arm-softfloat-linux-gnu-objcopy

 

$(CC)-g $(CFLAG)-c boot.S#まず、boot.oにboot.Sファイルを生成します。

$(LD)-g-Bstatic -T $(LDFILE)-Ttext 0x12345600 boot.o --start-group -Map boot.map -oboot.elf#次にboot.oをboot.elfに生成し、boot.elfは通常LinuxShellで./testと入力すると、gcc-o test test.cのテストファイルと同様の実行可能ファイルを実行できます。

$(OBJCOPY)-Oバイナリboot.elf boot.bin#次にboot.elf-> boot.binを置き換えます。これにより、コードサイズを縮小できます。

 

arm-softfloat-linux-gnu-objdump-h boot.elfを実行してファイルの情報を表示しますが、

arm-softfloat-linux-gnu-objdump-h boot.binはエラーを表示します。boot.binファイル情報を表示するには、次のように入力します。

arm-softfloat-linux-gnu-objdump-h -b binary -m arm boot.binで実行できます。ハハ私はまた、パラメータ-hを-D、-S、-sなどに置き換えることができるトリックを学びました。ビューアでは、arm-softfloat-linux-gnu-objdump--helpの意味を使用してください。

元の記事を25件公開 賞賛された8件 20,000回以上の閲覧

おすすめ

転載: blog.csdn.net/boazheng/article/details/104299236