モバイルデバイスでカーネルモジュールをテストする方法は?

モバイルデバイスでカーネルモジュールをテストする方法は?

私はLinuxカーネル用のモジュールを作成しています。このモジュールを準備したら、カーネルを実行しているすべてのデバイスで実行したいと思います。

Android携帯でどのようにテストしますか?テストするには、電話のツリー全体をモジュールに再コンパイルする必要がありますか?では、どうすればよいですか?insmodAndroid用ですか?

答え1

はい、もちろんAndroidはそうです。insmodAndroidは通常のLinuxカーネルに基づいているからです。この質問に対する答えは、他のLinuxカーネルと同じです。

他のクロスコンパイル状況と同様に、デバイスのカーネルソースとカーネルオプションと正しいシステムアーキテクチャに基づいてモジュールをコンパイルする必要があります。これは、デバイス、メーカー、ROMなどによって大きく異なります。

デバイス、カーネルバージョン、ROM、または開発環境に関する詳細を提供していないため、「どうすればよいですか?」という質問に答えることはできません。

あなたが正しい道を行っているかどうか真剣に質問したいと思います。単にモジュールを作成して「すべてのデバイスで実行」することはできません。モジュールはカーネルのバージョンとアーキテクチャによって異なります。ほとんどのデバイスはロックされているため、カーネルだけでなくルートファイルシステムにもアクセスできません。このようなものを配布することは、通常、自分のデバイス固有のROMにバンドルすることを意味します。

カーネルモジュールを作成する唯一の理由は、特定のハードウェア機能をサポートすることが多いです。この場合、この質問は間違った方向から始まるようです。もう1つの可能性は、あなたが邪悪な行動をしたく、Linuxが通常許可しないことをしたいということです。しないでください。

答え2

Androidと他のLinuxプラットフォームとの間に根本的な違いはありません。モジュールをビルドするには、カーネルヘッダファイルとカーネルコンパイル中に生成されたいくつかのファイルが必要です。これらのファイルはカーネル構成によって異なります。一般的なLinuxディストリビューションには、これらのカーネルヘッダファイルと他のファイルを含むパッケージが付属しており、カスタムモジュールを簡単に作成できます。私はAndroid NDKがカーネルヘッダに付属していないと思います。 (ネイティブアプリケーションを書く人の数に比べてカーネルモジュールを作る人はほとんどいませんが、とにかくそれらの多くは独自のシステムイメージを作成するハードウェアメーカーです。)

だからそれを得るAndroidのソースコード具体的にカーネルツリー( kernel/common)。ターゲットデバイスのカーネル構成を取得します。基本画像は で構成を提供し、/proc/config.gzで取得できますadb shell 'gzip -d </proc/config.gz'

ソースツリーと設定ファイルがある場合は、一般的な練習に従ってください。つまり、構成ファイルを.configカーネルツリーにコピーして実行make oldconfigし、make modules_prepareモジュールmake M=/path/to/your/module/treeをビルドします。これLinuxカーネルモジュールプログラミングガイドそしてLinuxデバイスドライバカーネルビルドシステムは良い参考資料です。Documentation/kbuild/modules.txt

ターゲットデバイスでモジュールが有効になっていない場合(CONFIG_MODULES設定ファイル内)、モジュールを使用してカーネルを再構築してシステムイメージにコピーする必要があります。

エミュレータのAndroidイメージは非常に基本的なモジュールユーティリティであり、および付属していますが、パラメータinsmodを指定する方法はありません。これが問題なら、lsmodrmmodinsmod忙しい箱(他の用途にも便利です)。市場で入手することも、ソースからコンパイルすることもできます。

Androidカーネルとモジュールのコンパイルに関する多くのチュートリアルがあります。以下はいくつかあります。ちょうど見たことがあるので、品質を保証することはできません。

関連情報