組み込みデバイス用の小さな Linux システムを作成している間、デフォルトのツールチェーンで設定された構成に基づいてカーネルをビルドする必要があることを修正します。rootfs にはツールチェーンが必要ですが、? アーキテクチャはカーネルで設定されるため、ツールチェーンは必要ありません。一方、ビジーボックスはバイナリを作成します。したがって、ツールチェーンが必要です。ここに疑問があるので訂正してください。
3 に答える
ツールチェーンは、組み込みシステムの開発において非常に重要な役割を果たします。コンパイルとビルドでも、アーキテクチャに固有のクロス ツール チェーンが必要でした。ツール チェーンはデフォルトではありません。構成中または make コマンドを渡すときに、ツール チェーン プレフィックスを指定して設定する必要があります。
make CROSS_COMPILE=arm-none-linux-gnueabi-
Busybox のコンパイルとビルドには、同じツール チェーンを使用する必要があります。静的にbusyboxをコンパイルすれば、共有ライブラリについて心配する必要はありません。しかし、ビジー ボックスを動的にコンパイルした場合、ツールチェーンは rootfs で重要な役割を果たします。/lib
ここで、ツールチェーンのライブラリを rootfsフォルダーにコピーする必要があります。
次のコマンドを入力するだけで、コピーする必要があるライブラリを知ることができます。
strings _install/bin/busybox | grep ^lib
/lib
rootfs
に保持する必要があるライブラリのリストを示します。
このコマンドは、「ファイルからすべての文字列を取得し、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 をコンパイルしたこのツール チェーンを使用してコンパイルする必要があります。
--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}
通常、このフォルダーにはすべての共有ライブラリが含まれています。
@Shreyas、あなたは間違った解釈をしています。ツールチェーンは、ソースをクロス コンパイルするクロス コンパイラに他ならないため、コンパイル対象のプロセッサ アーキテクチャで実行できます。カーネルとブートローダーでさえ AC コードであり、それを組み込みボードに移植したい、クロスコンパイルする必要がある、カーネルと u-boot ソースをクロスコンパイルするためのツールチェーンが必要です。そのため、u-boot ブートローダー、カーネル、rfs (Busybox)、およびアプリケーションのいずれかであるツールチェーンが必要です。