X86ホスト上のARMターゲット用のLinuxカーネルをクロスコンパイルすることに興味があります。推奨するいくつかの良い方法はありますか?あなたの意見では、どれが最良のクロスコンパイルスイートですか?カスタムクロスコンパイル環境を確立しましたか?はいの場合、どのようなアドバイスがありますか?それは良い考えですか?
ARM/Linuxツールに使用したアプローチは2つあります。最も簡単なのは、構築済みのツールチェーンを直接ダウンロードすることです。
Pro:それはうまく機能し、プロジェクトの興味深い部分に取り掛かることができます
Con:彼らが選んだgcc/binutils/libcのバージョンに固執しています
後で問題になる場合は、 crosstool-ng を確認してください。このプロジェクトは、Linuxカーネル構成アプリケーションに似た構成ツールです。ビルドするgcc、binutils、libc(GNUまたはuCLibc)、スレッド、およびLinuxカーネルのバージョンを設定し、crosstool-ngが残りを実行します(つまり、tarボールをダウンロードし、ツールを構成して、ビルドします)。
Pro:構成中に選択したものを正確に取得します
Con:構成中に選択したものを正確に取得します
つまり、compiler/binutil/libcとそれに関連する機能/欠点/バグの選択について全責任を負います。また、コメントで述べたように、binutils、Cライブラリなどのバージョンの選択には、すべての組み合わせが必ずしも一緒に機能したり、構築されたりするわけではないため、いくつかの「苦痛」が伴います。
ハイブリッドアプローチの1つは、事前に構築されたツールから始めて、後で必要に応じてcrosstool-ngを介してカスタムソリューションに置き換えることです。
Update:答えは元々 CodeSourceryツール を事前に構築されたツールチェーンの例として使用していました。 ARMのCodeSourceryツールは無料で Mentor Graphicsからダウンロード ですが、現在はSourcery CodeBenchと呼ばれ、MentorGraphicsから購入する必要があります。その他のオプションには-が含まれます。 Linaro およびAndroid、Ubuntuなどのディストリビューション固有のツール。
ARMマシンは、利用可能な小さなリソース(/ meはカーネルを睨みつけます)でネイティブにコンパイルすることに満足していません。メインパッケージはgcc-4.X-arm-linux-gnueabi
(X = 1,2,3)、適切にサフィックスが付けられたgcc/cpp/ld/etcコマンドを提供します。これをsources.list
に追加します。
deb http://www.emdebian.org/debian/ unstable main
もちろん、Debianを使用していない場合、これはおそらくそれほど有用ではありませんが、gumによってはうまく機能します。
私はいくつかのターゲットでcrosstoolを使用しました。ツールチェーンを最初から構築したい限り、それは素晴らしいことです。もちろん、arm用のビルド済みツールチェーンもいくつかあります。グーグルで検索してください。ここで言及するには多すぎます。
1)私の意見では、独自のツールチェーンを構築するのが最も効果的です。最終的にはすべてを厳密に制御できるようになります。さらに、組み込みLinuxを初めて使用する場合は、すばらしい学習体験になります。
2)商用ツールチェーンを使用しないでください。時間をかけて自分で作成したくない場合でも、無料の代替手段があります。
あなたの会社がお金を使うなら、彼らにあなたにjtagデバッガーを買わせてください。
それはあなたにたくさんの時間を節約するでしょう。 また、カーネルの起動などを簡単に学習してステップ実行できます。 Lauterbach jtag製品を使用することを強くお勧めします...これらは大量のターゲットで動作し、ソフトウェアはクロスプラットフォームです。彼らのサポートも素晴らしいです。
Jtagデバッガーを取得できず、カーネルで作業している場合は、VMを使用して、ユーザーモードlinux、vmwareなどを使用してください。コードはx86でデバッグされます。 ..それをあなたの腕のターゲットに移植することは別の話になりますが、それはいくつかのバグを解決するためのより安価な方法です。
ブートローダーを移植する場合は、ubootを使用してください。もちろん、参照プラットフォームを使用している場合は、BSPで提供されているものを使用したほうがよいでしょう。
それがお役に立てば幸いです。
ARMプロセッサを使用するmaemo(Nokia N810)用のアプリの構築を実験しているときに、 scratchbox を使用しました。おそらく、scratchboxはmaemoの開発に限定されていません。
Buildroot は、カスタムのuClibcベースのツールチェーンを最初から構築するためにかなり幸運に恵まれたツールです。これは非常にカスタマイズ可能であり、実行しているディストリビューションに過度にこだわる必要はありません。
また、既存のユーザー(つまり、組み込みルーターディストリビューション)の多くもARMをターゲットにしています。
Gentooを使用している場合、クロスコンパイルツールチェーンを取得するのは簡単です。
$ Emerge crossdev $ crossdev -t $ Arch- $ VENDOR- $ OS- $ LIBC
ここで、Arch
はarm
またはarmeb
、VENDORはunknown
またはsoftfloat
、OS
はlinux
、およびLIBC
はgnu
またはuclibc
です。
カーネルのコンパイラ(およびリンカ)だけが必要な場合は、LIBC
の部分は関係ありません。また、-s1
/--stage1
を使用してcrossdev
に通知できます。必要なのはbinutils
とgcc
だけです。
これはEurotechが使用しているものです 彼らのDebian ARM配布。回避できるのであれば、クロスコンパイラの使用を推奨しないことに注意してください。ターゲット自体は、実行されることがわかっている出力を取得するためのより信頼性の高い方法になる傾向があります。