5

問題のシナリオ: 簡単に言えば、ターゲットにロードされた ELF ファイルからシンボル (およびその内容) を読み取る Trace32 コマンドはありますか? ELF ファイルのアプリケーション固有のデバッグ シンボルが ELF の「.noload」セクションの一部として作成される特殊なケースがあります。これは、シンボル/コンテンツが ELF ファイルの一部として存在することを意味します (readelf -a xxxx. elf_file_name) ですが、生成される最終的なバイナリ イメージの一部ではありません。つまり、ELF ファイルの「.noload」セクションは、ターゲット メモリにフラッシュされる xxx.bin を生成するときに取り除かれます。

  • 「.noload」セクションのデバッグ シンボルは静的に割り当てられた値であり、これらの値は実行時に変更されません。
  • 「.noload」セクションのデバッグ シンボル部分を読み取ろうとすると (バイナリにコンパイルして Trace32 にロードした後)、trace32 ポップアップ ウィンドウに「MMU 失敗」というフラグが表示されます。これは、trace32 がシンボルの内容をメモリから読み取ろうとしているが、アドレスがマップされているにもかかわらず、「.noload」セクションのシンボル部分がまったくロードされなかったため、アクセスできません。

任意の入力:
- ターゲット メモリからではなく、ELF ファイルからシンボル コンテンツを直接読み取ることができる trace32 コマンドのヘルプが必要です。
- また、練習用スクリプトで「readelf」を使用できるかどうかもわかりません。上記のクエリの解決策がない場合、この方向で何か助けはありますか?

4

1 に答える 1

10

コマンドを使用

Data.LOAD.Elf myfile.elf [<optional address offset>] /NoCODE

オプション /NoCODE は、TRACE32 に ELF からデバッグ シンボルのみをロードし、コードをターゲットにロードしないように指示します。コマンドでシンボルを表示できますsYmbol.Browse

ただし、TRACE32 を使用してアプリケーションをターゲットにロードする場合、最初に ELF からバイナリを作成する必要はありません。TRACE32 を使用すると、ELF の PROGBITS セクションをターゲットに直接ロードすることもできます。この場合、/NoCODE オプションを指定せずに Data.LOAD.Elf コマンドを使用するだけです (フラッシュ プログラミングを有効にした後)。

MMU を使用しているため、 command で論理メモリ空間 ID を有効にすることができますSYStem.Option.MMUSPACES ON。次に、シンボルをロードします

Data.LOAD.Elf myfile.elf <space-ID>:<offset> /NoCODE

ここで、'space-ID' は MMU がタスクに使用するスペース ID と一致し、'offset' は通常ゼロです。

組み込み Linux でアプリケーションをデバッグする場合は、Linux 用の TRACE32 OS 認識と Linux シンボル オートローダーを使用して、シンボルを正しいアドレスにロードする必要があります。

TRACE32 内から「readelf」を使用する必要がある理由はないと思います。とにかく、コマンドOS.AreaまたはOS.Command.

于 2016-11-28T11:08:32.837 に答える