0

Android用のカーネルモジュールを構築したい。そして、私はクロスコンパイルを使用していることを知っています.カーネル内では、arm-none-linux-gnueabi-gcc などの一般的なクロスコンパイルを使用できると思います。プロンプトが表示されますか?クロスコンパイルのためにubuntuで環境を構築する方法についての記事はありますか? 第二に、モジュールをコンパイルするたびに、モジュールとしてカーネルにロードするにはどうすればよいですか? 最後に、NDK、クロスコンパイル、ツールチェーンの関係を説明してくれる人はいますか? どうも

4

1 に答える 1

3

うーん、これは一種の大きな質問ですが、少なくとも私が知っていることを答えようとします. 特定のハードウェア メーカーが、動作するソフトウェアの完全なセットを含む Android の「バンドル」を提供すると思います。これには、ツールチェーン、Linux カーネル ソース、u-boot ブーター、および Android システム全体が含まれます。私の場合、Freescale は、彼らが提供する特定のプロセッサと評価ボード用の Android バンドルを提供しました。

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

Android 用の Linux をビルドすることは、単に Linux をビルドすることとまったく変わりません。残りの Android システムのビルドに使用したものと同じツールチェーンを使用して Linux をビルドすることをお勧めします。Linux をビルドするには、"ARCH=arm" および "CROSS_COMPILE=arm-none-linux-gnueabi-" (または実際に使用しているクロス コンパイラのプレフィックス) の環境変数を設定します。クロス コンパイル プレフィックスで重要な末尾の "-" に注意してください。

次のリンクでは、開発環境のセットアップ方法について説明しています。

Android 開発環境をセットアップします。

Ubuntu 10.04 から 11.04 までは正常に動作することに注意してください。これらのバージョンのいずれかにとどまることをお勧めします。

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

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

NDKに関する限り、私はまったく経験がありません。私の理解では、これはAndroid Javaアプリが重要な機能のタイミングのために「C」および「CPP」コードを呼び出すためのインターフェースです。私が知らないのは、これが JNI インターフェースより優れている点と、JNI インターフェースとの違いです。

これが便利で役立つことを願っています。

于 2012-04-11T14:03:20.067 に答える