0

わかりました、これは非常に一般的な質問かもしれませんが、私はトピックに精通していないので、ヒントをいただければ幸いです.

ARM 用の SoucereyCodeBench からのクロス コンパイル ツール チェーンがあります (arm-xilinx-linux-gnueabi-)。コンパイラ オプションを使用するライブラリをクロス コンパイルしました。-DSC_INCLUDE_FX -DSC_USE_PTHREADS -pthreads -fPIC -DPIC

したがって、ベア メタル プログラム用のライブラリを使用する場合は、ベア メタル コンパイラ (arm-xilinx-eabi-) 用の pthreads が必要になると思います。

そうしないと、そもそも私のプログラムが実行またはコンパイルされない可能性があります。では、ベア メタル用に pthread をコンパイルすることはできますか?

4

2 に答える 2

5

スレッドとベアメタル

ベア メタル プログラミング ターゲットは、ユーザーが配置したものだけを提供します。ほとんどの人がよく知っている pthread 実装は、Linux NPTL バージョンです。これは、Linux カーネルと GNU C ライブラリーによって機能するため機能します。ベア メタル ターゲットでは、Linux カーネルまたは GNU C ライブラリのいずれの利点も得られません。独自のベア メタル スレッド ライブラリとランタイムを用意する必要がありますが、その時点では、スレッドを提供する RTOS を使用する方がよい場合があります。

ツールチェーンの接頭辞に関する注意

gcc ツールチェーンのプレフィックスarm-xilinx-linux-gnueabi-は、ターゲットがベアメタルではなく ARM Linux であることを示します。ツールチェーンはarm-xilinx-linux-gnueabi-pthread 対応コード ( -lpthread) をビルドしますが、Linux ターゲットには pthread ライブラリとその他の必要なソフトウェア レイヤーが既にインストールされていると想定します。

代わりに gcc ARM ザイリンクス ツールチェーンのベアメタル バージョンに切り替えると、ツールチェーンのプレフィックスはarm-xilinx-eabi-. ベアメタルとスレッドについて上で述べたことはすべて当てはまります。

于 2013-06-14T18:42:21.957 に答える
4

コードをそのままクロスコンパイルするのではなく、コードを移植することが重要になると思います。その名前が示すように、POSIX スレッド(pthreads) は POSIX API を想定しています。

ベア メタルARM ターゲットでスレッドが必要な場合、少なくともいくつかの種類のスレッド スケジューリング ライブラリが必要です。ほとんどの RTOS は Linux の意味での完全な OS ではなく、モノリシック アプリケーションに他のものと同様に静的ライブラリとしてリンクする IPC メカニズムを備えた単純なスケジューラです。main()タスク/スレッドの作成とスケジューラの開始を担当する関数。

一部の RTOS は POSIX API をサポートしているため、pthreads をサポートしていますが、これらは単純なスケジューラーではなく、より大規模で完全な OS である傾向があります。

もちろん、RTOS ライブラリのラッパーを作成して、コードの移植をより簡単にする可能性のある pthread 互換 API を提供することを止めるものは何もありません。

于 2013-06-14T08:45:58.573 に答える