Android用のカーネルモジュールを構築したい。そして、私はクロスコンパイルを使用していることを知っています.カーネル内では、arm-none-linux-gnueabi-gcc などの一般的なクロスコンパイルを使用できると思います。プロンプトが表示されますか?クロスコンパイルのためにubuntuで環境を構築する方法についての記事はありますか? 第二に、モジュールをコンパイルするたびに、モジュールとしてカーネルにロードするにはどうすればよいですか? 最後に、NDK、クロスコンパイル、ツールチェーンの関係を説明してくれる人はいますか? どうも
1 に答える
うーん、これは一種の大きな質問ですが、少なくとも私が知っていることを答えようとします. 特定のハードウェア メーカーが、動作するソフトウェアの完全なセットを含む 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-" (または実際に使用しているクロス コンパイラのプレフィックス) の環境変数を設定します。クロス コンパイル プレフィックスで重要な末尾の "-" に注意してください。
次のリンクでは、開発環境のセットアップ方法について説明しています。
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 インターフェースとの違いです。
これが便利で役立つことを願っています。