2012-05-03 17 views
5

"arm-elf"を生成するコンパイラ(gnuarm GCC 4.1.1)を使ってブートローダとアプリケーションをコンパイルした製品があります。arm-eabiとarm-elfを混在させることはできますか?

ブートローダとアプリケーションは、リンカスクリプトの異なるFLASHメモリ領域に分かれています。

アプリケーションには、(2つのパラメータを持つ単純なc-functionとして)ブートローダを呼び出すことができる機能があります。

私は世界中の既存製品をアップグレードする必要があります。これは、常に同じコンパイラを使用して安全に行うことができます。

私はarm-eabiを出力する新しいGCCバージョンを使ってこの製品アプリケーションをコンパイルできるようにしたいと思います。

アプリケーションとブートローダの両方が同じツールチェーンを使用してコンパイルされている新しい製品はすべて問題なく動作しますが、既存の製品はどうなりますか? GCC 4.6.xとarm-none-eabiでコンパイルされた新しいアプリケーションをフラッシュすると、私のアプリケーションは古いarm-elfブートローダのブートローダ関数を呼び出せますか?また、直接、上記の質問に関連していない


、私は腕-EABIでコンパイルされたバイナリに腕エルフでコンパイルされたオブジェクトファイルを混在させることができますか?


編集:私はそれはどんな違いがあれば...

答えて

4

号アンABIが作る魔法です、私はベアメタルARM7のために構築しています明らかにすることをいいです

考えます互換性のあるバイナリ。アプリケーションバイナリインタフェースは、他のライブラリ/アプリケーションとの通信方法に関するさまざまな慣習を決定します。例えば、ABIは呼び出し規約を定義します。これは、C関数に引数を渡すためにどのレジスタが使用されるか、余分な引数を処理する方法についての暗黙の前提を作成します。

私はEABIとABIの正確な違いは分かりませんが、EABIを読んでその一部を見つけることができます。 Debian's pageには、syscallの規約といくつかのアラインメントの変更があります。

もちろん、arm-elfオブジェクトとarm-eabiオブジェクトを混在させることはできません。

上記の答えは、メインアプリケーションのブートローダコードと話すことを前提にしています。インタフェースが非常にシンプル(2つのパラメータを持つ関数呼び出し)の場合、それが機能する可能性があります。試してみると面白い実験です。ただし、動作保証**はありません。

EABIを使用する必要はありませんのでご注意ください。 gcc 4.6と旧バージョンのarm-elfツールチェーンを生成することができます。 Windows上でバイナリツールチェーンを使用しているので、より多くの課題があるかもしれません。私はcrosstool-ngを調べることをお勧めします。これはLinuxでうまく動作し、適切なツールチェーンを構築するためにcygwin上で正常に動作するかもしれません。

+0

私はWindowsに限られていません。そのままにする大きな理由の1つは、開発がはるかに容易な、すぐに使えるLinux用の新しいツールチェーンを簡単に手に入れることができるということです。とにかく、私はファンクションコールをしようとすると、私はできるだけ早くニュースを返すだろう。ありがとう。 – j4x

+0

私はそれがうまくいくかもしれないが、私は間違いなく実際のシステムでこの動作に頼ることは推奨しないことに注意してください。 – djs

+0

ちょっと@fljx - それは動作しましたか?あなたは今これを試して4年かかっています:) – blueshift

3

ブートローダをインラインアセンブリで呼び出すオプションが常にあります。この場合、必要な呼び出し標準に準拠することができます:)。

しかし、移植性のほかに、それは紹介を発行、このアプローチはまた、あなたのブートローダとアプリケーションに関する2つの仮定になります:

  • を使用すると、特定のデバイスがあなたで構築されたブートローダを持っていることを、あなたのアプリに検出することができますEABI以外のツールチェーンを使用することができます。これは、アセンブリコードを使用して古いタイプのブートローダのみを呼び出すことができるためです。
  • 上記の2つのパラメータは、ブートローダによってプリミティブデータとして使用されます。例えば、構造体へのポインタとして、ブートローダーがそれらを使用すると、不正な位置合わせ、パディングなどの問題に直面する可能性があります。
2

l これは問題ありません。私はこのようなマイグレーションを自分でやっていました。私が思い出したことから、私は分裂を扱うだけの問題に遭遇しました。

This is the best info I can find about the differencesのように、構造体の整列の問題がない場合は、問題ありません。

関連する問題