Android カーネルを正常にコンパイルし、Android エミュレーターでテストした人はいますか?もしそうなら、特別なことをする必要がありますか?
SDK のドキュメントは優れていますが、カーネルのコンパイルとエミュレータでのカスタム マシンのセットアップに関するドキュメントを見つけるのは困難でした。
Android カーネルを正常にコンパイルし、Android エミュレーターでテストした人はいますか?もしそうなら、特別なことをする必要がありますか?
SDK のドキュメントは優れていますが、カーネルのコンパイルとエミュレータでのカスタム マシンのセットアップに関するドキュメントを見つけるのは困難でした。
2009 年 8 月以降、カーネルは、Android オープン ソース プロジェクトのソース コードをダウンロードする手順に従って取得する標準リポジトリ マニフェストの一部ではなくなりました。エミュレーターで特定のカーネルを正常にダウンロード、ビルド、および実行するために必要な手順は次のとおりです。
git clone https://android.googlesource.com/kernel/goldfish.git
git checkout -t origin/android-goldfish-2.6.29 -b goldfish
make ARCH=arm goldfish_defconfig
make ARCH=arm goldfish_armv7_defconfig
make ARCH=arm CROSS_COMPILE=mydroid/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-
emulator -kernel mydroid/kernel/common/arch/arm/boot/zImage
上記の説明ではデフォルトのパスを使用していることに注意してください。セットアップに適用されるパスに変更する必要があります。前回これをテストしてからしばらく経ちましたが、うまくいくはずです。
追加情報: 標準の Android オープン ソース ディストリビューションでは、カーネルはビルド済みのバイナリとしてmydroid/prebuilt/android-arm/kernel
フォルダーに配布され、ソース コードは含まれていません。カーネル ソースがデフォルトのマニフェストから削除された理由は 2 つあります。1 つは、ほとんどの人があまり使用しないプラットフォーム コンポーネントに多くの帯域幅とディスク容量を必要とすることです。もう 1 つの理由は、カーネルは aosp ビルド システムの一部としてではなく、カーネル ビルド システムでビルドされるため、分離しておくことが理にかなっているからです。カーネルの共通ブランチは、エミュレーターが使用するものです。また、experimental、msm (Qualcomm プラットフォーム)、Omap (TI プラットフォーム) などのブランチもあります。ハードウェアで Android カーネルを使用したい場合は、これらの方が興味深いかもしれません。
BMBの投稿からいくつかのことを修正するだけです(これは私にとって非常に役に立ち、プロジェクトを保存しました):
これは、BMB と Arnaud LM の回答の更新です。
2011/03/03より金魚の枝名が変更になったようです。金魚ブランチをチェックアウトするときは、これを使用します。
git checkout -t origin/archive/android-gldfish-2.6.29 -b goldfish
android-gldfish-2.6.29 で「o」が欠落していることに注意してください。
これが誰かの時間を節約することを願っています。
2012 年の時点で、カーネルのダウンロードは source.google.com で十分に文書化されていますが、コンパイルには数回の試行が必要であることがわかりました。ARM エミュレータ用のカーネルを構築するために使用したコマンドは次のとおりです。
cd /kernel/source/root
make mrproper
adb pull /proc/config.gz # from the emulator
gunzip config
mv config .config # now you have a (perhaps slightly outdated kernel .config)
make ARCH=arm silentoldconfig # update the .config - take the defaults if prompted
make ARCH=arm menuconfig # make any further changes
time make -j4 ARCH=arm CROSS_COMPILE=/path/to/android/source/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi- 2>&1 | tee ../../logs/$(date +%Y%m%d-%H%M)-make-kernel.log
emulator -kernel /kernel/source/root/kernel/goldfish/arch/arm/boot/zImage -avd myAVD &
これに答えてくれたすべての人に感謝します-私はこの答えから少しずつそれを行うことができました. Amaund の「you need the AVD」は、私を悩ませた最後の作品でした。
簡単だ。Android 全体のソース コードを取得してコンパイルするには、http: //source.android.com/download の手順に従ってください。少し時間がかかりますが、それほど複雑ではありません。
<android>/out
それをビルドすると、ディレクトリに出力されます。これには、ROM イメージに加えて、エミュレーターを含む多数のツールも含まれます。私のエミュレータは にあり<android>/out/host/linux-x86/bin/emulator
ます。という名前の環境変数を設定するだけANDROID_PRODUCT_OUT
で<android>/out/target/product/generic
、オプションなしでエミュレーターを実行すると、コンパイルされた ROM が実行されます。
2012 年 5 月の時点で、カーネルのコンパイルに「goldfish_defconfig」を使用できないことがわかりました。goldfish_armv7_defconfig を使用する必要があります。これは、JonnyLambada のエミュレーターから構成を抽出する方法 (事前に構築されたカーネル用) が機能し、必要な理由を説明します。
goldfish_defconfig はカーネルを ARM 926 プロセッサで実行するように構成しますが、エミュレータは Coretex A8 (ARM V7 CPU) として実行するように構成されています。したがって、動作させたい場合は新しい defconfig を使用する必要があります (またはエミュレーターから構成をプルします)。
参考までに。
コンパイルした AOSP rom を起動する方法は、コンパイルされた system.img を ~/.android/avd/Froyo.avd/ にコピーすることでしたが、system.img を抽出して root 化されたバージョンの su を追加すると、と busybox を実行してから、system.img を作り直すと、エミュレーターが起動しません。私はまだその部分を理解しようとしています:S