0

再配置可能なライブラリを構築したい (つまり、ローカル変数以外は何もない。また、ライブラリの場所を強制的にメモリ内の固定場所にしたい。これはメイクファイルで行う必要があると思うが、私はライブラリを強制的に固定の場所にロードするために何をしなければならないかについて混乱しています.これはmb-gccを使用しています.

これが必要な理由は、他のプログラムのコピーを実際に実行しているコードを上書きしたくないローダーを書きたいからです。したがって、コピーを実行しているプログラムを、使用されていない場所 (つまり、ddr) の別の場所に配置する必要があります。

ライブラリにコンパイルするすべての関数がある場合、たとえば、これを 0x80000000 の場所に強制的にロードするには、どの特別な makefile 引数が必要ですか。

どんな助けでも大歓迎です。前もって感謝します。

4

1 に答える 1

0

リンカー スクリプトを作成し、オプションを使用してコンパイラ/リンカーにそれを使用するように指示します (ファームウェア ファイルのビルド方法に応じて、-T script.ldtogccおよび/または)。ld

ライブラリ C ソース ファイルでは、__attribute__((section ("name")))構文を使用して関数変数を特定のセクションに配置できます。その後、リンカー スクリプトは、各セクションを配置する場所 (多くの場合、これらの種類のデバイスの固定アドレス) を決定できます。#define FIRMWARE __attribute__((section(".text.firmware")))(コードを読みやすく理解しやすくするために、 のようなマクロ宣言がよく見られます。)

ライブラリ用に別のファームウェア ファイルを作成する場合は、属性をコードに追加する必要はありません。リンカー スクリプトを記述して、.text(実行可能コード)、.rodata(読み取り専用定数)、および.bss(初期化されていない変数) を配置するだけです。 ) セクションを適切なアドレスに配置します。

を Web 検索するとmicroblaze "linker script"、いくつかの有用な例とさらに多くのガイドが見つかります。それらのいくつかは、ツールに適している必要があります。

于 2016-11-24T19:32:49.207 に答える