54

Android カーネルを正常にコンパイルし、Android エミュレーターでテストした人はいますか?もしそうなら、特別なことをする必要がありますか?

SDK のドキュメントは優れていますが、カーネルのコンパイルとエミュレータでのカスタム マシンのセットアップに関するドキュメントを見つけるのは困難でした。

4

8 に答える 8

58

2009 年 8 月以降、カーネルは、Android オープン ソース プロジェクトのソース コードをダウンロードする手順に従って取得する標準リポジトリ マニフェストの一部ではなくなりました。エミュレーターで特定のカーネルを正常にダウンロード、ビルド、および実行するために必要な手順は次のとおりです。

  • リポジトリ マニフェストに追加するか、次を実行して手動で Android カーネルを取得します。
    git clone https://android.googlesource.com/kernel/goldfish.git
  • エミュレーター、つまり金魚を操作するための正しいブランチを確認してください。
    git checkout -t origin/android-goldfish-2.6.29 -b goldfish
  • エミュレータ構成を生成します (qemu エミュレータは arm コード、つまり arm 構成を実行します)。
    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-
  • この方法でビルドされたカーネルは、カーネル ツリーの arch/arm/boot フォルダー (git clone からコードを配置した場所) に配置されるはずです。
  • カーネルでエミュレーターを実行するには、2 つの方法があります。オープン ソース プロジェクトのビルド済みカーネル フォルダーにエミュレーターをコピーして、標準のカーネルを置き換えます。もう 1 つのオプションは、カーネル オプションを設定してエミュレータを起動することです。
    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 カーネルを使用したい場合は、これらの方が興味深いかもしれません。

于 2010-02-17T09:26:51.793 に答える
20

BMBの投稿からいくつかのことを修正するだけです(これは私にとって非常に役に立ち、プロジェクトを保存しました):

  • git clone git://android.git.kernel.org/kernel/common.git (カーネルが見つかりませんでした) ;
  • git checkout -t origin/android-goldfish-2.6.29 -b 金魚 (同じ) ;
  • make ARCH=arm goldfish_defconfig (同上) ;
  • make ARCH=arm CROSS_COMPILE=mydroid/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi- (同上)
  • emulator -avd my_avd -kernel mydroid/kernel/common/arch/arm/boot/zImage (ここでは、コマンドにavdを追加しましたが、それなしでは機能しませんでした)。

于 2010-07-20T16:45:00.563 に答える
8

これは、BMB と Arnaud LM の回答の更新です。
2011/03/03より金魚の枝名が変更になったようです。金魚ブランチをチェックアウトするときは、これを使用します。

git checkout -t origin/archive/android-gldfish-2.6.29 -b goldfish 

android-gldfish-2.6.29 で「o」が欠落していることに注意してください。

これが誰かの時間を節約することを願っています。

于 2011-03-03T23:08:40.417 に答える
8

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」は、私を悩ませた最後の作品でした。

于 2012-05-03T12:06:37.973 に答える
6

簡単だ。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 が実行されます。

于 2009-11-28T12:56:55.597 に答える
4

2012 年 5 月の時点で、カーネルのコンパイルに「goldfish_defconfig」を使用できないことがわかりました。goldfish_armv7_defconfig を使用する必要があります。これは、JonnyLambada のエミュレーターから構成を抽出する方法 (事前に構築されたカーネル用) が機能し、必要な理由を説明します。

goldfish_defconfig はカーネルを ARM 926 プロセッサで実行するように構成しますが、エミュレータは Coretex A8 (ARM V7 CPU) として実行するように構成されています。したがって、動作させたい場合は新しい defconfig を使用する必要があります (またはエミュレーターから構成をプルします)。

参考までに。

于 2012-05-04T17:33:24.637 に答える
1

コンパイルした AOSP rom を起動する方法は、コンパイルされた system.img を ~/.android/avd/Froyo.avd/ にコピーすることでしたが、system.img を抽出して root 化されたバージョンの su を追加すると、と busybox を実行してから、system.img を作り直すと、エミュレーターが起動しません。私はまだその部分を理解しようとしています:S

于 2010-09-04T20:42:19.907 に答える