x86 ホスト上の ARM ターゲット用に Linux カーネルをクロスコンパイルすることに興味があります。あなたが推奨するいくつかの良い習慣はありますか? あなたの意見では、どのクロスコンパイル スイートが最適ですか? カスタムのクロスコンパイル環境を整えましたか? はいの場合、どのようなアドバイスがありますか? それは良い考えですか?
7 に答える
私は emdebian ツールチェーンを使用して、利用可能な小さなリソースでネイティブにコンパイルされることに満足していない 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 を使用していない場合、これはおそらくそれほど有用ではありませんが、ガムによっては、私にとってはうまく機能します。
私は、ARM プロセッサを使用する maemo (Nokia N810) 用のアプリの構築を実験する際に、scratchbox を使用しました。おそらく、scratchbox は maemo 開発に限定されません。
いくつかのターゲットで crosstool を使用しました。ツールチェーンをゼロから構築したい限り、これは素晴らしいことです。もちろん、arm 用のビルド済みツールチェーンもいくつかあります。Google で検索してください。ここで言及するには多すぎます。
1) 私の意見では、独自のツールチェーンを構築するのが最も効果的です。最終的にはすべてを厳密に制御できるようになります。また、組み込み Linux を初めて使用する場合は、素晴らしい学習体験となります。
2) 商用ツールチェーンを使用しないでください。自分でビルドするのに時間がかかりたくない場合でも、無料の代替手段があります。
あなたの会社がお金を使うなら、jtag デバッガーを買ってもらいましょう。
時間を大幅に節約できます。 カーネルの起動などを簡単に学習してステップ実行できます.Lauterbach jtag製品を使用することを強くお勧めします...それらは大量のターゲットで動作し、ソフトウェアはクロスプラットフォームです. 彼らのサポートも素晴らしいです。
jtag デバッガーを取得できず、カーネルで作業している場合は、VM を使用してユーザーモード Linux、vmware などを使用します。コードは x86 でデバッグされます。それを arm ターゲットに移植すると、別の話ですが、いくつかのバグを解決するための安価な方法です.
ブートローダーを移植する場合は、uboot を使用してください。もちろん、リファレンス プラットフォームを使用している場合は、BSP で提供されているものを使用した方がよいでしょう。
それが役立つことを願っています。
Buildrootは、カスタムの uClibc ベースのツールチェーンをゼロから構築するのにかなり幸運だったツールです。非常にカスタマイズ可能で、たまたま実行しているディストリビューションに過度にこだわる必要はありません。
また、既存のユーザー (組み込みルーター ディストリビューションなど) の多くも ARM をターゲットにしています。
Gentoo を使用している場合、クロスコンパイル ツールチェーンを入手するのは簡単です。
$ 出現クロス開発 $ crossdev -t $ARCH-$VENDOR-$OS-$LIBC
ここで、ARCH
はarm
またはarmeb
、VENDOR はunknown
またはsoftfloat
、OS
はlinux
、およびLIBC
はgnu
またはuclibc
です。
カーネル用のコンパイラ (およびリンカー) だけが必要な場合、そのLIBC
部分は無関係であり、-s1
/を使用して、 と のみが必要であること--stage1
を通知できます。crossdev
binutils
gcc
これは、EurotechがDebianARMの配布に使用しているものです。回避できる場合は、クロスコンパイラの使用を推奨していないことに注意してください。ターゲット自体でコンパイルすることは、実行されることがわかっている出力を取得するためのより信頼性の高い方法になる傾向があります。