誰かが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つは、ほとんどの人があまり作業しないプラットフォームコンポーネントの帯域幅とディスクスペースが多くかかることです。 aospビルドシステムの一部としてではなく、ビルドシステムを分離しておくのが理にかなっています。カーネルの共通ブランチは、エミュレータで使用されるブランチです。experimental、msm(Qualcommプラットフォーム)、およびOmap(TIプラットフォームハードウェアでAndroidカーネルを使用したい場合、これらはあなたにとってより興味深いかもしれません。
BMBの投稿からいくつかのことを修正するだけで(これは私にとって非常に便利でしたが、プロジェクトを保存しました):
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 &
これに答えたすべての人に感謝します-私はこの答えからの断片でそれをすることができました。アマウンドの「あなたにはAVDが必要です」は、私にトラブルを与えた最後の作品でした。
これは、BMBおよびArnaud LMの回答の更新です。
2011/03/03から金魚の支店名が変更されたようです。金魚の枝をチェックアウトするとき、これを使用します:
git checkout -t Origin/archive/Android-gldfish-2.6.29 -b goldfish
Android-gldfish-2.6.29で欠落している「o」に注意してください!
これが誰かの時間を節約することを願っています。
Ubuntu 17.10ホスト上の完全自動Android 8.1ゲスト
# Download the source. Takes several minutes.
curl https://storage.googleapis.com/git-repo-downloads/repo >repo
chmod a+x repo
./repo init -b Android-8.1.0_r1 --depth 1 -u https://Android.googlesource.com/platform/manifest
./repo sync -c -j $(($(nproc) - 2)) --no-tags --no-clone-bundle
# Do the actual build. Takes minutes / hours.
. build/envsetup.sh
lunch aosp_x86_64-eng
USE_CCACHE=1 CCACHE_DIR=ccache make -j $(($(nproc) - 2))
# Run the emulator.
emulator -show-kernel
out/
ビルドディレクトリは約90 GB、残りのツリーはCCACHEを除く約40 GBを占有します。
エミュレータを起動してから約1〜2分後、ホーム画面に次のように表示されます。
Androidが起動されたホスト端末でEnterキーを押すと、ホスト端末のAndroidシステムにシェルが表示されます。
ノート:
./repo init -b
タグを指す必要があります。 master
ブランチは常に壊れており、-release
ブランチも常に壊れています。
タグのリストは、 https://Android.googlesource.com/platform/manifest で、またはそのリポジトリを複製することで見つけることができます。
ブランチが常に壊れるのには、おそらく2つの理由があります。
Androidは密室で開発され、コードは削除されました。そのため、GoogleとOEM開発者は既に公開の「マスター」の上に大量のパッチを用意しており、すでに問題を修正しています。
同じ理由で、マスターでビルドエラーを報告しようとしても役に立たない可能性があります。エラーは既に報告され、修正されています。また、ビルドの失敗を報告するための適切な公式の場所を見つけることさえできます。
ブランチ上のrepo sync
は、サブモジュールのように同期せずに、指定されたブランチのAOSPを構成するすべての650 gitリポジトリの最新バージョンをプルします。したがって、互換性を保証するものは何もありません。ただし、タグはすべてのリポジトリの特定のタグを取得します。
--depth 1
とsync -c --no-tags --no-clone-bundle
は、非常に遅いクローンを高速化する試みでした。それがどれほど成功したかはわかりません。参照: AOSPリポジトリ同期に時間がかかりすぎる
Host x86仮想化拡張機能により実行速度が大幅に向上するため、ARMの代わりにlunch aosp_x86_64-eng
を使用します。
代わりにARMバージョンをビルドするには、代わりにlunch aosp_arm-eng
を使用します。
さらに、ARMイメージはバグがありますが、これはおそらく遅いためですか? GUIが起動すると(運がよければ)、「システムUIが応答していません」と表示されます。参照: プロセスシステムがAndroidエミュレーターで応答しない
-show-kernel
は端末をシリアルにリンクします。つまり、ブートメッセージが表示され、最後にシェルが表示されます。これは、デバッグに非常に便利です。
type emulator
は、引数なしのemulator
の単なるエイリアスであることを示しています。 ROMでカスタムAndroidを実行Emulator は、ROMを明示的に選択するためにいくつかの引数を渡す方法を尋ねます。
エミュレータ-help
ターゲットは驚くほど洞察に富んでいます:
emulator -help
emulator -help-build-images
emulator -help-disk-images
以下を使用して、正確なQEMUコマンドライン引数を決定できます。
emulator -verbose | grep 'emulator: argv'
Androidエミュレーターの起動時にQEMUに渡されるオプションを表示する方法は?
これにより、いくつかのカスタムオプションが表示されます。 -Android-hw
なので、QEMUを分岐している必要があります: QEMU vs Android emulator:command line options ソースは5分ごとに位置を移動しているようです: Androidエミュレーターソースコードの変更
簡単だ。 http://source.Android.com/download の指示に従って、Android全体のソースコードを取得およびコンパイルします。それにはしばらく時間がかかりますが、それほど複雑ではありません。
それをビルドすることで、<Android>/out
ディレクトリに出力されます。これには、ROMイメージに加えて、エミュレーターを含む多数のツールも含まれます。エミュレーターは<Android>/out/Host/linux-x86/bin/emulator
にあります。Android_PRODUCT_OUT
という名前の環境変数を<Android>/out/target/product/generic
に設定し、エミュレーターを実行せずにoptionsはコンパイルされた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を抽出し、suのルートバージョンを追加するときそしてbusybox、system.imgを作り直し、エミュレーターは起動しません。私はまだその部分を理解しようとしています:S