質問

x86 ホスト上の ARM ターゲット用に Linux カーネルをクロスコンパイルすることに興味があります。あなたが推奨する良い習慣はありますか?あなたの意見では、最高のクロスコンパイル スイートはどれですか?カスタムのクロスコンパイル環境を構築しましたか?「はい」の場合、どのようなアドバイスがありますか?それは良いアイデアですか?

役に立ちましたか?

解決

ARM/Linux ツールに対して私が使用したアプローチは 2 つあります。最も簡単なのは、事前に構築されたツール チェーンを直接ダウンロードすることです。
プロ:それはうまく機能し、プロジェクトの興味深い部分に取り組むことができます
コン:彼らが選択した gcc/binutils/libc のどのバージョンでも行き詰まっています。

後が重要な場合は、チェックしてください クロスツールNG. 。このプロジェクトは、Linux カーネル構成アプリケーションに似た構成ツールです。gcc、binutils、libc (GNU または uCLibc)、スレッド、および Linux カーネルのどのバージョンをビルドするかを設定すると、残りの作業は Crosstool-ng が実行します (つまり、tar ボールをダウンロードし、ツールを設定し、ビルドします)。
プロ:構成中に選択した内容が正確に得られます
コン:構成中に選択した内容が正確に得られます

つまり、コンパイラ/binutil/libc の選択と、それらに関連する機能/欠点/バグに対して全責任を負うということです。また、コメントで述べたように、binutils や C ライブラリなどのバージョンの選択には多少の「苦労」が伴います。すべての組み合わせが必ずしも連携して機能するわけではなく、さらには構築できるわけでもありません。

ハイブリッド アプローチの 1 つは、事前に構築されたツールから開始し、必要に応じて、後で Crosstool-ng を介してカスタム ソリューションに置き換えることです。

アップデート:答えはもともと、 CodeSourcery ツール 事前に構築されたツールチェーンの例として。ARM 用の CodeSourcery ツールは無料でした メンターグラフィックスからダウンロード, ですが、現在は Sourcery CodeBench と呼ばれており、Mentor Graphics から購入する必要があります。その他のオプションには以下が含まれます リナロ Android、Ubuntu などのディストリビューション固有のツールも含まれます。

他のヒント

私は、利用可能な小さなリソース(/私はカーネルで睨む)にネイティブにコンパイルされて幸せではない私のARMマシン用のものをコンパイルするためにはEmdebianツールチェーンを使用します。主パッケージはgcc-4.X-arm-linux-gnueabi(X = 1,2,3)であり、そしてなどのコマンド/適宜サフィックスGCC / CPP / LDを提供します。私は私のsources.listにこれを追加します:

deb http://www.emdebian.org/debian/ unstable main

Debianを使用していない場合はもちろん、これはおそらくそれほど便利ではありませんが、のガムのことで、それは私のためにうまく機能します。

ARMを使用した、Maemoのための建物のアプリ(ノキアN810)で実験しながら、

私は scratchbox に使用しましたプロセッサ。たぶん、scratchboxはMaemoの開発に限定されるものではない。

いくつかのターゲットでクロスツールを使用しました。ツールチェーンを最初から構築したい場合には、これは素晴らしいことです。もちろん、arm 用の事前に構築されたツールチェーンもいくつかあります。ググってみてください。ここで言及するには多すぎます。

1) 私の意見では、独自のツールチェーンを構築するのが最も効果的です。最終的にはすべてを厳密に制御できるようになり、組み込み Linux を初めて使用する場合には、素晴らしい学習体験になります。

2) 商用ツールチェーンを使用しないでください。時間をかけて独自に構築したくない場合でも、無料の代替手段があります。

会社がお金を出してくれるなら、jtag デバッガーを買ってもらいましょう。
時間を大幅に節約できます。 これにより、カーネルの起動などを簡単に学習してステップ実行することができます。を使用することを強くお勧めします ラウターバッハ jtag製品...これらは大量のターゲットで動作し、ソフトウェアはクロスプラットフォームです。彼らのサポートも素晴らしいです。

jtag デバッガーを入手できず、カーネルで作業している場合は、ユーザーモード linux、vmware などの VM を使用してください。コードは x86 でデバッグされます。それを腕のターゲットに移植する場合は別の話になりますが、いくつかのバグを解決するための安価な方法です。

ブートローダーを移植する場合は、uboot を使用してください。もちろん、リファレンス プラットフォームを使用している場合は、BSP で提供されているものを使用する方がよいでしょう。

それが役立つことを願っています。

Buildroot の私からカスタムuClibcをベースツールチェーンを構築するために合理的に幸運を持っていたツールです。スクラッチ。それはあなたが実行することが起こるものを配布について過度に特定の非常にカスタマイズ可能な、とはありません。

また、その既存のユーザー(すなわち。組み込みルータのディストリビューション)の多くはまた、ARMをターゲットとしている。

あなたがクロスコンパイルツールチェーンを取得し、Gentooを使用している場合は、

と同じくらい簡単です
$ emerge crossdev
$ crossdev -t $ARCH-$VENDOR-$OS-$LIBC
ARCHarm又はarmebであり、ベンダがunknown又はsoftfloatである

OSlinuxであり、そしてLIBCgnu又はuclibcである。

あなたが望むすべてがカーネル用のコンパイラ(リンカ)である場合には、LIBC部分は無関係です、そしてあなたが唯一-s1--stage1が必要crossdevを知らせるためにbinutils / gccを使用することができます。

これは、ユーロテックは、自分のDebian ARM用に使用するものですdistibution。あなたはそれを避けることができれば、彼らは、クロスコンパイラを使用することはお勧めできませんのでご注意ます。ターゲット自体にコンパイルすると、あなたが実行されます知っている出力を得るための、より信頼性の高い方法である傾向がある。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top