
組み込みLinuxインストールで実行されるアプリケーションを開発しようとしています。付属のlibcのバージョンは、私の開発コンピュータのバージョンより古いです。開発コンピュータにchroot環境を作成し、chroot環境がデバイスをミラーリングするように組み込みデバイスからライブラリをコピーしてからアプリケーションをビルドする場合、デバイスで実行しても安全ですか?私の開発コンピュータとデバイスはどちらもx86 32ビットなので、クロスコンパイルする必要はないようです。
また、私が書いたアプリは、chrootの開発コンピュータで安全にビルドし、アプリをデプロイするためにデバイスにコピーできる他のライブラリ(デバイスには存在しない)に接続する必要がありますか?
このトピックについて私が読んだすべての内容からすべてが正しく接続されていることを確認する唯一の方法は、実際にデバイスからアプリケーションを構築することです。ただし、これは最小インストールであり、gccには付属していないため、オプションではありません。インストール。
答え1
これは一般的に機能します。ただ一度試してみたかったのですが、注意すべきいくつかの点があります。
ビルドするときは、ターゲットのCPUアーキテクチャと機能に合わせてバイナリをビルドする必要があります。どちらもx86であることを考慮すると多くの助けになりますが、sse3などのプロセッサ機能にはまだ注意する必要があります。ターゲットインストールで欠落している機能を利用するバイナリをビルドしても機能しません。
ビルドシステムのカーネルは、chroot環境の動作にある程度影響を与える可能性があります。 chroot ではホストシステムとは異なるカーネルを使用できないため、2 つの間に違いが生じる可能性があります。アプリケーションは通常、これらの問題を回避するのに役立つ標準インターフェイスを提供するlibcを介してカーネルと通信します。
libcはある程度カーネルと互換性がなければなりません。インターフェイスの変更によって、組み込みシステムのlibcがカーネルと完全に互換性がない可能性があります。ただし、libcがカーネルより前のバージョンである場合、問題になる可能性は少なくなります(以前のカーネルインタフェースは、以前のバイナリをサポートするために残っている可能性が高くなります)。 。
ホストシステムのサービスは、組み込みシステムに表示されます。これは、プロセステーブル、ネットワークインタフェースなどを共有するすべてのchrootで一般的です。
「アドオンライブラリ」の場合は、静的リンクを使用してアプリケーションに接続できます。これにより、デバイスにライブラリを配布する必要がなくなります。旅行費用は変更されることがあります。
これを行うには、仮想マシンを使用することを検討できます。すべての問題(プロセッサ機能/フラグなど)を必ずしも削除することはできませんが、組み込みシステムとより密接に一致する環境を持つことができます。つまり、同じカーネルを使用し、同じ起動プロセスを実行し、ホストサービスからの汚染を回避できます。
chroot内にビルドツールチェーンを設定する場合は、新しいファイルを組み込みシステムにコピーする方法を検討する必要があります。ツールチェーンファイル(gccなど)をコピーしたくない場合があります。
これを設定し、テストアプリケーションを作成し、ライブラリなどを構築し、組み込みシステムに移動するときにどれだけうまく機能するかを確認してください。