2016-11-24 3 views
0

私は、再配置可能なライブラリを構築したい(つまり、ローカル変数以外には何も置かず、ライブラリ内の場所をメモリ内の固定された場所私はこれがmakefileで行われなければならないと思っていますが、私はライブラリが固定された場所にロードされるようにするために何をしなければならないのか混乱しています。これは、私が実際に他のプログラムのコピーを行っているコードをぶつけたくないローダーを書いてほしいからです。だから私はコピーを行っているプログラムが存在しない場所のどこかにあるようにしたい使用された(すなわち、ddr)microblazeで固定アドレス用のライブラリをコンパイルする方法

ライブラリにコンパイルしたすべての関数がある場合、これを例えば0x80000000の位置にロードするためには、特別なmakefile引数が必要です。

ご協力いただければ幸いです。前もって感謝します。

答えて

0

あなたはlinker scriptを書き、(あなたのファームウェアファイルを構築する方法に応じて、gccおよび/またはldに)-T script.ldオプションを使用して、それを使用するために、コンパイラ/リンカを教えてください。あなたのライブラリーのCソースファイルで

、あなたは特定のセクションにあなたのfunctionsvariablesを入れて__attribute__((section ("name")))構文を使用することができます。リンカスクリプトは、各セクションをどこに置くかを決めることができます。多くの場合、これらの種類のデバイスの固定アドレスに配置されます。

ライブラリ用に別個のファームウェアファイルを作成する場合は、属性を追加する必要はありません(コードを読みやすく理解しやすくするために、#define FIRMWARE __attribute__((section(".text.firmware")))などのマクロ宣言がよく表示されます)。コードに.text(実行可能コード)、.rodata(読み取り専用定数)、および.bss(適切なアドレスに)セクションを入れるためのリンカースクリプトを作成するだけです。

ウェブ検索でmicroblaze "linker script"を検索すると、便利な例やさらに多くのガイドが見つかります。それらのいくつかはあなたのツールに適している必要があります。

関連する問題