3

組み込み Linux セットアップ (DMP Vortex86DX プロセッサ) で実行する C++ アプリケーションを作成する必要があります。ベンダーは、ボードにインストールでき、適切なハードウェア ドライバーを含む最小限の Linux インストール イメージを提供します。私の質問は、特定のカーネルで Linux ソフトウェアを作成して別のカーネルで実行することに関する以前の質問への回答に基づいています。互換性を確保するためにソフトウェアを作成する場合、どこから始めればよいかわかりません。

私の本能的なアプローチは、組み込みデバイスとデスクトップ開発マシンに同じバージョンの g++ をインストールし、dev のマッチングでアプリケーションを作成し、ボードにコピーしてそこでコンパイルすることです。これは狂気のようですが、これが組み込みソフトウェアの開発方法であるとは信じがたいです。以前の質問への回答に関して、デスクトップ上でビルドするだけで、組み込みデバイスに存在する glibc のバージョンを使用する方法はありますか?もしそうなら、特定のバージョンへのリンクを強制するにはどうすればよいですか? または、アプリケーションが動的に何にもリンクしないように、すべてを静的に構築することは可能ですか (これが可能であるとは思えません)。

私は組み込み開発のまったくの初心者であり、適切なアドバイスやリソースが得られない限り、何ヶ月もフラストレーションを感じることが予想されます。どこから始めればよいかについての指針や提案は、それらがどれほど単純で些細なものに見えても、非常に感謝して受け取ります。私は組み込みのものに関しては、本当に一番下から始めています。

4

1 に答える 1

3

Vortex86SX/DX/MXが x86 互換であると主張しているという事実を考えると、コンパイラ スイッチの小さなセットを使用すると、ターゲット マシン用のコードをコンパイルできるようになります。つまり、 -m3232 ビット コードを保証-marchし、特定の CPU をターゲットとするスイッチはありません。

次に、コードをリンクする必要があります。凝ったものを使用しない限り、シンプルで確立された glibc 関数を使用する限り、ABI は開発マシンと組み込みシステムで同じになると思います。つまり、ホスト ライブラリに対してコンパイルし、バイナリを組み込みシステムにコピーすると、そこで利用可能なライブラリを使用して単純に実行する必要があります。

X-Linux がuclibcなどの他の libc を使用する場合は、ホストにクロス コンパイラが必要になります。その点で、Ubuntu の経験はほとんどありませんが、sys-devel/crossdevGentoo Linux 用のパッケージを使用すると、クロスコンパイラの生成が非常に簡単になることは知っています。これは、異なるアーキテクチャ (あなたのケースでは必要ありません) と異なるライブラリ (例: uclibc) の両方に適用できます。

バイナリをコピーしてみて、問題が発生した場合は報告してください。

于 2012-07-04T14:39:51.507 に答える