6

ARM アーキテクチャ用のバイナリを生成するクロス コンパイル ツール チェーンがあるとします。

ツールチェーンは次のようになります (Linux を搭載した X86_64 マシンで実行):

  • arm-linux-gnueabi-gcc.exe : ARM で実行される Linux のクロス コンパイル用。
  • arm-gcc.exe : ARM を対象とするベアメタル クロス コンパイル用。

...そして、ARM でのクロス コンパイル用の他のツールが多数あります。

私が興味を持っているポイントは次のとおりです。

  • (E) バイナリ間の ABI の違い (ある場合)
  • ベアメタルの場合の制限 (動的メモリ割り当て、C++ の場合の静的コンストラクタの使用、スレッド モデルなど)
  • それぞれに固有の情報 (デバッグ情報のサポートなど) に関する 2 つのケース間のバイナリレベルの違い。
4

2 に答える 2

1

最近、ベアメタル環境で Linux 標準 C ライブラリを使用する小さなプロジェクトを開始しました。私は自分のブログでそれについて説明してきました: http://ellcc.org/blog/?page_id=289 基本的に私が行ったことは、特定のシステム コールの簡略化されたバージョンを実装することによって、Linux システム コールを処理する方法をセットアップすることです。標準ライブラリの関数を使用できます。たとえば、ARM の現在の状態では、read()、readv()、write()、writev()、および brk() の簡略化されたバージョンが実装されています。これにより、printf()、fgets()、および malloc() を変更せずに使用できます。

私の場合、Linux とベアメタルをターゲットにするために同じコンパイラを使用しています。これは clang/LLVM ベースであるため、同じコンパイラを使用して他のプロセッサをターゲットにすることもできます。現在、Mips のベアメタルの例に取り組んでいます。

ですから、答えは、違いがある必要はないということだと思います。

于 2014-05-12T18:59:50.923 に答える