2012-04-11 9 views
0

私はアンドロイド用のカーネルモジュールを構築したいと思います。 そして私はクロスコンパイルを使用していることを知っています。カーネルの中で、私はarm -none-linux-gnueabi-gccのようないくつかの一般的なクロスコンパイルを使うことができると思います。私に尋ねることができますか?クロスコンパイルのためのubuntuで環境を構築する方法についての任意の人工物? 第2に、私がモジュールをコンパイルするときに、どのようにモジュールとしてカーネルにロードすることができますか? 最後に、誰もNDK、クロスコンパイル、ツールチェーンの関係について説明していますか? thxandroid cross compile、ndk、toolchain

+0

私はこの質問に何かを加えたいと思っています。次のリンクは、NDKとNDKのツールチェーンを使っています。違いは何ですか? http://developer.android.com/tools/sdk/ndk/index.html – sandyJoshi

答えて

3

これは大きな問題ですが、少なくとも私が知っていることを試してみます。私は、特定のハードウェアメーカーが、一連の作業ソフトウェアを含むAndroidの「バンドル」を持っていると確信しています。これには、ツールチェーン、Linuxカーネルソース、u-boot booter、およびAndroidシステム全体が含まれます。私のケースでは、フリースケールは提供する特定のプロセッサと評価ボード用にAndroidバンドルを提供しました。

「クロスコンパイラ」という用語は、「ツールチェーン」に含まれています。 「ツールチェーン」という用語は、クロスコンパイラ、クロスライブラリなどを網羅しています。各ツールチェーンは、ホスト(Linux、cygwinなど)とターゲットプロセッサ(アーム、mips、PowerPCなど)用に構築されています。

Android用Linuxのビルドは、Linuxを構築するだけの違いはありません。残りのAndroidシステムを構築するために使用されたLinuxを構築するために、同じツールチェーンを使用することをお勧めします。 Linuxをビルドするには、 "ARCH = arm"と "CROSS_COMPILE = arm-none-linux-gnueabi-"(または使用している実際のクロスコンパイラの接頭辞)の環境変数を設定します。クロスコンパイルの接頭辞で重要な " - "という終わりに注意してください。

次のリンクは、開発環境の設定方法を説明しています。うまく

Android Development environment set up.

注意、Ubuntuの10.04 11.04に作品。これらのバージョンのいずれかにとどまることをお勧めします。

Linuxカーネルをターゲットに配置することは、完全にターゲットに依存します。私が使用しているFreescaleでは、SDカード上のLinuxカーネルがオフセット0x800ブロック(各ブロックはSDカード上で512バイト)であることが予想されます。私はSDカードのrawに書き込むために以下を使用します:

sudo dd if = uImage of =/dev/sdb bs = 1M seek = 1;同期

NDKが実行される限り、私はそれについての経験は全く持っていません。私はそれを理解して、Android Javaアプリケーションがタイミングクリティカルな機能のために 'C'と 'CPP'コードを呼び出すためのインターフェイスです。私が知らないのは、JNIインターフェイスとの違い、そしてJNIインターフェイスとの違いです。

この情報は役に立ちましたか?