Frage

Hat jemand erfolgreich kompiliert android-kernel und getestet, die es in der Android emulator, und wenn ja, ist es etwas so besonderes, das getan werden muss?

Dokumentation für das SDK ist ausgezeichnet, aber die Dokumentation für die Kompilierung den kernel und einrichten einer benutzerdefinierten Maschine im emulator wurde schwer für mich zu finden.

War es hilfreich?

Lösung

Seit August 2009 der Kernel ist nicht mehr Teil des Standard-Repo-Manifest, das Sie erhalten, wenn Sie den Anweisungen folgen, den Quellcode für die Android Open-Source-Projekt zum Download bereit. Die Schritte, die erforderlich sind, um erfolgreich zu downloaden, bauen und einen spezifischen Kernel auf dem Emulator ausgeführt sind wie folgt:

  • Holen Sie sich den Android-Kernel entweder indem Sie sich auf Repo-Manifest hinzufügen oder manuell durch Ausführen von:
    git clone https://android.googlesource.com/kernel/goldfish.git
  • Überprüfen Sie die korrekte verzweigen, um mit dem Emulator arbeitet, das heißt Goldfisch:
    git checkout -t origin/android-goldfish-2.6.29 -b goldfish
  • Erstellen Sie den Emulator-Konfiguration (QEMU-Emulator läuft Arm Code, das heißt ein Arm config):
    make ARCH=arm goldfish_defconfig
    • , wenn das nicht funktioniert, versuchen Sie make ARCH=arm goldfish_armv7_defconfig
  • Nun bauen Sie den Kernel, die Cross-Compilierung-Tools mit dem Open-Source-Projekt verteilt:
    make ARCH=arm CROSS_COMPILE=mydroid/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-
  • Der Kernel auf diese Weise gebaut sollte im arch / arm / boot-Ordner Ihres Kernel-Baum am Ende (wo Sie den Code aus git clone put)
  • Um den Emulator mit Ihrem Kernel laufen gibt es zwei Alternativen, entweder kopieren Sie sich in dem gebauten Kernel-Verzeichnis des Open-Source-Projektes, um den Standard-Kernel zu ersetzen. Die andere Möglichkeit ist, den Emulator mit dem Kernel-Option Set zu starten:
    emulator -kernel mydroid/kernel/common/arch/arm/boot/zImage

Beachten Sie, dass ich die Standardpfade in der obigen Beschreibung verwendet haben, müssen Sie sie ändern, was zu Ihrem Setup gilt. Es war ein einige Zeit seit dem letzten Mal, wenn ich diese getestet, aber ich denke, es sollte funktionieren.

Einige zusätzliche Informationen: In der Standard-Android Open-Source-Verteilung wird der Kernel als bereits aufgebauten binären im mydroid/prebuilt/android-arm/kernel Ordner und die Quellcode verteilt ist nicht enthalten. Die Kernel-Quelle wurde von dem Standard-Manifest aus zwei Gründen entfernt, wie ich es nehmen. Einer ist, dass es eine Menge Bandbreite und Speicherplatz für eine Plattformkomponente nimmt, die die meisten Leute nicht mit viel arbeiten. Der andere Grund ist, dass, da der Kernel mit dem Kernel-Build-System und nicht als Teil des AOSP Build-Systems aufgebaut ist es sinnvoll, sie getrennt zu halten macht. Der gemeinsame Zweig für den Kernel ist die von dem Emulator verwendet. Darüber hinaus gibt es Niederlassungen für experimentelle, msm (Qualcomm-Plattformen) und Omap (TI-Plattform) und vielleicht etwas mehr. Wenn Sie das Android-Kernel mit Hardware diese auch sein mag interessanter Sie verwenden mögen.

Andere Tipps

Nur ein paar Dinge aus BMB Beitrag zu korrigieren (was sehr nützlich für mich war, es sparte mein Projekt):

  • git clone git: //android.git.kernel.org/kernel/common.git (die kernel verpasst);
  • git checkout -t Herkunft / android-Goldfisch-2.6.29 -b Goldfisch (gleich);
  • machen ARCH = Arm goldfish_defconfig (idem);
  • machen ARCH = Arm CROSS_COMPILE = mydroid / prebuilt / linux-x86 / Toolchain / Arm-EABI-4.2.1 / bin / Arm-eabi- (idem)
  • Emulator -avd my_avd -kernel mydroid / kernel / common / arch / arm / boot / zImage (hier Ich habe Arbeit ein AVD in dem Befehl, dauerte es nicht ohne für mich).

Dies ist ein Update für BMB und Arnaud LM Antworten.
Es scheint, die Goldfische branchnames wurden als von 2011.03.03 geändert. Wenn die Goldfische Zweig Check-out, verwenden Sie diese:

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

Beachten Sie die fehlende 'o' in android-gldfish-2.6.29!

Hope dies spart Zeit für jemanden.

Ab dem Jahr 2012, das Herunterladen des Kernels ist gut auf source.google.com dokumentiert, aber ich fand Kompilieren es ein paar Versuche nahm. Hier sind die Befehle, die ich verwendet, um einen Kernel für die ARM-Emulator zu bauen:

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 &

Vielen Dank an alle, die diese ein beantwortet - ich in der Lage war von dieser Antwort mit Bits und Stücke zu tun. Amaund des ‚müssen Sie die AVD‘ war das letzte Stück, das mir Mühe gab.

Vollautomatische Android 8.1 Gast auf Ubuntu 17.10 host

# 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

Die out/ build-Verzeichnis dauert bis zu 90Gb, und der rest des Baumes über 40Gb, ohne CCACHE.

Etwa 1-2 Minuten nach Start der emulator, den home-Bildschirm zeigt:

und wenn Sie die EINGABETASTE drücken auf den host-Anschluss Android wurde gestartet, bekommen Sie eine shell auf dem Android-system auf Ihrem host-terminal:

enter image description here

Hinweise:

  • ./repo init -b MÜSSEN Punkt-zu-einem-tag. master Zweig ist immer gebrochen, und so waren -release Zweige.

    Die Liste der tags finden Sie unter: https://android.googlesource.com/platform/manifest oder Klonen, um das repo.

    Es gibt wahrscheinlich zwei Gründe, warum die Zweige sind immer kaputt:

    • Android ist entwickelt hinter verschlossenen Türen und code gelöscht.Also Google und OEM-Entwickler haben eine Tonne von Patches auf Oberseite der öffentlichkeit "master", und haben schon das problem behoben.

      Aus dem gleichen Grund ist es wahrscheinlich sinnlos, zu versuchen und Bericht alle build-Fehler auf dem master:Sie haben sich schon gemeldet und behoben.Auch ich wage Sie noch finden die richtige offiziellen Stelle zu melden build-Fehler.

    • repo sync auf einem ast einfach zieht was auch immer die Letzte version von allen 650 git repos macht AOSP für die gegebenen Zweig, ohne zu synchronisieren wie Submodule.Daher ist nichts garantiert, dass diese kompatibel sind.Tags jedoch fetch einem bestimmten tag von allen repos.

  • --depth 1 und sync -c --no-tags --no-clone-bundle waren ein Versuch, die schmerzhaft langsam-Klon schneller.Nicht sicher, wie erfolgreich es war.Siehe auch: AOSP-repo-sync-dauert zu lange

  • Wir verwenden lunch aosp_x86_64-eng anstelle von ARM, denn Sie läuft viel schneller durch host x86 virtualization extensions.

    Aufbau eines ARM-version stattdessen einfach verwenden, lunch aosp_arm-eng statt.

    Außerdem, die ARM-image ist fehlerhaft, möglicherweise aufgrund der Langsamkeit?Wenn die GUI gestartet wird (wenn man Glück hat), es zeigt "System-Benutzeroberfläche nicht mehr reagiert".Siehe auch: Prozess system ist nicht reagieren in android emulator

  • -show-kernel links das terminal zu einer seriellen, d.h.sehen Sie den Meldungen, und Holen Sie sich eine Schale am Ende, das ist sehr nützlich zum Debuggen Dinge.

  • type emulator zeigt, dass es nur ein alias für die emulator ohne Argumente. Führen Sie custom ROM auf Android Emulator fragt, wie es einige Argumente, die explizit aktivieren, ROM.

    Der emulator -help Ziele sind überraschend aufschlussreich:

    emulator -help
    emulator -help-build-images
    emulator -help-disk-images
    

    Sie können bestimmen, die genaue QEMU command line arguments gegeben mit:

    emulator -verbose | grep 'emulator: argv'
    

    wie bereits erwähnt auf: Wie um zu zeigen, welche Optionen übergeben werden, um QEMU für den Start android-emulator?

    Dieser zeigt einige benutzerdefinierte Optionen, wie z.B. -android-hw, so müssen Sie haben-Gabel-QEMU: QEMU vs Android-emulator für:Kommandozeilen-Optionen Die Quelle bewegt Standort alle 5 Minuten offenbar: Ändern von Android-emulator source code

Das ist einfach. Folgen Sie den Anweisungen unter http://source.android.com/download für das Abrufen und Kompilieren des Quellcodes für die ganze android. Das dauert eine Weile, aber es ist nicht so kompliziert.

Damit bauen, haben Sie Sie sind Ausgangs im <android>/out Verzeichnis. Dazu gehören neben den ROM-Images, ein Bündel von Werkzeugen auch einschließlich des Emulators. Mein Emulator ist bei <android>/out/host/linux-x86/bin/emulator. eine Umgebungsvariable ANDROID_PRODUCT_OUT gerade gesetzt benannt <android>/out/target/product/generic und dann den Emulator ohne Optionen wird die kompilierte ROM ausgeführt werden.

Ab Mai 2012 fand ich, dass Sie nicht die ‚goldfish_defconfig‘ für das Kompilieren des Kernels nutzen können. Sie müssen goldfish_armv7_defconfig verwenden‘. Dies würde erklären, warum JonnyLambada Methode der die Config aus dem Emulator Extrahieren (für den Kernel vorkompilierte) funktioniert, und es ist notwendig.

Die goldfish_defconfig konfiguriert den Kernel auf einen ARM 926 Prozessor laufen, aber der Emulator konfiguriert ist als Coretex A8 (die ein ARM V7 CPU) ausgeführt werden. So müssen Sie die neuere defconfig verwenden, wenn Sie es wollen arbeiten (oder ziehen Sie die Config aus dem Emulator).

Just FYI.

Die Art und Weise konnte ich das AOSP rom ich zusammengestellt booten war die system.img zu kopieren, die in ~ / .android / AVD / Froyo.avd / kompiliert wurde Aber, wenn ich die system.img extrahieren und fügen Sie die Wurzeln Version von su und Busybox, dann das system.img Remake, der Emulator bootet nicht. Ich versuche immer noch, dass ein Teil, um herauszufinden: S

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top