私はアンドロイド用に動的に読み込まれたカーネルモジュールを作りたいと思っています。 私はLinuxをインストールしたくない、私はちょうどcygwinとアンドロイドNDKを持っている。アンドロイドNDKはカーネルモジュールのソースをコンパイルできますか?
答えて
このURLに従うと、Androidの開発者はcygwinよりもこのために仮想Ubuntuイメージを使用することを提案しています。
いいえ、私はアンドロイドをコンパイルするのではなく、ちょうど新しいカーネルモジュールをコンパイルします。 – lovespring
申し訳ありませんが、これまでのところこのような要件を満たしていません。私はソース全体を持っていたので、それぞれのドライバフォルダに自分のモジュールを追加してカスタムのアンドロイドイメージを取得しました。 – TheCottonSilk
はい、NDKを使用してカーネルモジュールを構築することは可能です。これは大文字と小文字を区別するファイルシステム(WindowsとMacシステムではデフォルトで提供されるものなど)でカーネルコードをクロスコンパイルするのが難しいため、Linuxシステム(Linux x86_64はサポートされている環境であると言われています)なぜなら、カーネルモジュールを構築するには、通常はLinux上にのみ存在するELFヘッダを必要とするELF操作バイナリ(modpost)を構築する必要があるからです。 それは...
まず、ソースコードをデバイスの同じ正確なカーネルに取得し、設定がデバイスと同じであることを確認する必要があります。 (そうでなければ、ビルドシステムを混乱させる可能性があります)
次に、Android NDKのクロスコンパイラツールチェーンがどこにあるかを判断する必要があります。ここで私は私の見つけ方法は次のとおりです。
サード(Iは、Android NDKをインストールした場所$NDK_HOME
は、ノート)
$ cd $NDK_HOME
$ find . | grep '\-gcc$'
./toolchains/arm-eabi-4.4.0/prebuilt/linux-x86/bin/arm-eabi-gcc
./toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-gcc
を、あなたは$NDK_HOME/toolchains/arm-eabi-4.4.0/prebuilt/linux-x86/bin
ディレクトリを追加する必要があります(またはそれはあなたのシステム上にある場所)をPATHに環境変数。
その後、あなたは2つの環境変数をエクスポートする必要があります。
export ARCH=arm
export CROSS_COMPILE=arm-eabi-
(ノート、arm-eabi-
プレフィックスは、我々はfind
コマンドで見たものと同じであるカーネルが構築されている場合は、そのようgcc
とld
としてコマンド。あなたがx86プラットフォーム用にビルドしていたのであれば、それらを調整しなければならないことに注意してください)。
次に、カーネルをコンパイルする必要があります。 (これを行うには、私はAndroidデバイスから/proc/config.gz
を取り出し、カーネルのソースディレクトリ内でzcat config.gz > .config
を実行した後、make menuconfig && make
を実行しました。)カーネルビルドのGurusはここでいくつかのショートカットを知っているかもしれませんが、カーネルソースディレクトリを正しく設定できませんでした実際のビルドを行わずにモジュールを構築するためのものです。 (あなたのビルドツリーのカーネルがあなたのデバイスに合っていれば、実際にカーネルを更新する必要はありません)。
最後に、普通のプロセスを使ってソースからカーネルモジュールをビルドしました。通常、カーネルモジュールにはパラメータ化されたビルドがあり、カーネルのソースツリーディレクトリに何とか読み込んでビルドを呼び出します。その時点で、カーネルソースツリーが正しく設定され、ARCH
とCROSS_COMPILE
が設定されている限り、モジュールはビルドする必要があります。
これで幸いです。私はいくつかのデバイスごとの違いがあると確信しています。
- 1. コンパイルLinuxカーネルモジュール(lincan)
- 2. システムコールは未定義です!カーネルモジュールのコンパイル
- 3. カーネルモジュールのコンパイルとKBUILD_NOPEDANTIC
- 4. UbuntuのAndroid NDK r5 - コンパイルできない
- 5. アンドロイドNDKでCでExceptionを捕まえることはできますか?
- 6. アンドロイドNDK
- 7. アンドロイドのOCR tesseractライブラリに関するNDKコンパイル警告
- 8. アンドロイドNDK(OpenCVの)
- 9. android NDKでlibuvをコンパイルする方法はありますか?
- 10. linuxでndkアプリケーションをコンパイルするには?
- 11. カーネルモジュールのコンパイル - 必要なパッケージ
- 12. カーネル全体を再コンパイルせずにカーネルモジュールにgcovを使用できますか?
- 13. 別のカーネル用にカーネルモジュールをコンパイルする
- 14. glMapBufferOESはndk 6でコンパイルされますが、7ではコンパイルされません
- 15. アンドロイドのCyginエラーNDK
- 16. UbuntuのソースからMeshLabをコンパイルできません。16.10
- 17. は、NDK-構築NDKビルドでコンパイルしながら
- 18. UE4 NDKアンドロイド-19「はLOG2」
- 19. どのような違いは、アンドロイドndk r9のレガシーツールチェーンとアンドロイドndk r9のWindows 64
- 20. アンドロイドはcc/C++でndk/JNIのimeiを取得します
- 21. アンドロイドのndkのスレッド用にC++コードをコンパイルするときにmemsetでエラーが発生する
- 22. libharuをAndroid NDKでコンパイルする
- 23. Android NDKでGoogleテストケースをコンパイルしていますか?
- 24. アンドロイド-ndkはNFCプログラミングの助けになりますか?
- 25. NDK r7cコンパイルの問題
- 26. アンドロイド用のndk-buildとmake APPの違いは何ですか?
- 27. ソースからopencvをコンパイルした後、どのフォルダを削除できますか?
- 28. NDKでコンパイルされたAndroid rtspクライアントはUDPパケットを受信できません
- 29. Android NDK共有ライブラリのコンパイル時に静的ライブラリをコンパイルできない
- 30. アンドロイドNDK - アンドロイド:コマンドが見つかりません
linuxにはカーネルABIがないので、個々のカーネルごとにモジュールをコンパイルする必要があります。 。 – lovespring
ルートコールの電話機のアプリケーションからLKMをロードして、システムコールを干渉させることができます。何か案は? – DroidBot