0

組み込みデバイス用の小さな Linux システムを作成している間、デフォルトのツールチェーンで設定された構成に基づいてカーネルをビルドする必要があることを修正します。rootfs にはツールチェーンが必要ですが、? アーキテクチャはカーネルで設定されるため、ツールチェーンは必要ありません。一方、ビジーボックスはバイナリを作成します。したがって、ツールチェーンが必要です。ここに疑問があるので訂正してください。

4

3 に答える 3

2

ツールチェーンは、組み込みシステムの開発において非常に重要な役割を果たします。コンパイルとビルドでも、アーキテクチャに固有のクロス ツール チェーンが必要でした。ツール チェーンはデフォルトではありません。構成中または make コマンドを渡すときに、ツール チェーン プレフィックスを指定して設定する必要があります。

make CROSS_COMPILE=arm-none-linux-gnueabi-

Busybox のコンパイルとビルドには、同じツール チェーンを使用する必要があります。静的にbusyboxをコンパイルすれば、共有ライブラリについて心配する必要はありません。しかし、ビジー ボックスを動的にコンパイルした場合、ツールチェーンは rootfs で重要な役割を果たします。/libここで、ツールチェーンのライブラリを rootfsフォルダーにコピーする必要があります。

次のコマンドを入力するだけで、コピーする必要があるライブラリを知ることができます。

strings _install/bin/busybox | grep ^lib/librootfs に保持する必要があるライブラリのリストを示します。

このコマンドは、「ファイルからすべての文字列を取得し、lib で始まる行のみを表示する」ことを示しています。プログラム ldd は、プログラムがクロスコンパイルされており、開発ホストで実行されないため、使用できません。これらのファイルは、ツールチェーンの sysroot ディレクトリから取得する必要があります。最近のほとんどのツールチェーンは sysroot で構成されています。これは、ツールチェーンの対象となるシステムのルート ファイル システムに表示されるツールチェーンのファイルを含むディレクトリです。ツールチェーンが sysroot をサポートしているかどうかを確認するには、次のことを試してください。

$ arm-linux-gcc -print-sysroot

/arm-unknown-linux-gnueabi/bin/arm-linux-gcc これが有効なパスである場合、ここからファイルをコピーする必要があります。パスが表示されない場合は、find を使用して の sysroot ディレクトリを見つけるか、find を使用して libc.so を探します。

$ find . -name libc.so libc と libm を見つけたら、(your rootfs)/libディレクトリを作成してそこにコピーします。ファイルは他のファイルへのシンボリック リンクである可能性が高いため、すべてのファイルを収集してください。次に取得するファイルは、通常は ld-linux- と呼ばれるダイナミック ローダーで、これも libc.so.* とともに lib ディレクトリにあります。/libそれをディレクトリにコピーします。システムにはすべての共有ライブラリとローダーが含まれているため、BusyBox を実行できます。

最後に、アプリやプログラムをコンパイルする場合は、busybox をコンパイルしたこのツール チェーンを使用してコンパイルする必要があります。

于 2013-07-22T12:30:28.787 に答える
1

--sysroot=dir

このオプションは、ヘッダーとライブラリが配置されているルート ディレクトリを指定します。あなたが与えるとき (gcc) -print-sysroot

これにより、それぞれの gcc (スタンドアロン ツール チェーンの場合) が表示され、ヘッダーとライブラリがその特定のディレクトリに表示されます。

gcc のビルドおよびコンパイル時にスタンドアロンのクロスツール チェーンをビルドする際に、それぞれのインクルード ファイルとライブラリ ファイルを見つけるために --sysroot=dir が指定されます。

ここで構成を見ることができます

cd $CLFS_SRC

tar -jxvf gcc-4.7.0.tar.bz2 && mkdir -v gcc-build && cd gcc-build

AR=ar LDFLAGS="-Wl,-rpath,${CLFS_CROSS_TOOLS}/lib" \ ../gcc-4.7.0/configure --prefix=${CLFS_CROSS_TOOLS} \ --build=${CLFS_HOST} --target=${CLFS_TARGET} --host=${CLFS_HOST} \ --with-sysroot=${CLFS_CROSS_TOOLS}

通常、このフォルダーにはすべての共有ライブラリが含まれています。

于 2013-08-05T07:30:52.850 に答える
0

@Shreyas、あなたは間違った解釈をしています。ツールチェーンは、ソースをクロス コンパイルするクロス コンパイラに他ならないため、コンパイル対象のプロセッサ アーキテクチャで実行できます。カーネルとブートローダーでさえ AC コードであり、それを組み込みボードに移植したい、クロスコンパイルする必要がある、カーネルと u-boot ソースをクロスコンパイルするためのツールチェーンが必要です。そのため、u-boot ブートローダー、カーネル、rfs (Busybox)、およびアプリケーションのいずれかであるツールチェーンが必要です。

于 2013-07-26T03:11:32.213 に答える