Quelqu'un a-t-il réussi à compiler le noyau Android Android et à le tester dans l'émulateur Android, et si oui, y a-t-il quelque chose de spécial qui doit être fait?)
La documentation du SDK est excellente, mais la documentation pour la compilation du noyau et la configuration d'une machine personnalisée dans l'émulateur a été difficile à trouver pour moi.
Depuis août 2009, le noyau ne fait plus partie du manifeste de référentiel standard que vous obtenez lorsque vous suivez les instructions pour télécharger le code source du projet open source Android. Les étapes nécessaires pour réussir télécharger, construire et exécuter un noyau spécifique sur l'émulateur sont les suivants:
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
Notez que j'ai utilisé les chemins par défaut dans la description ci-dessus, vous devez les changer pour ce qui s'applique à votre configuration. Cela fait un certain temps depuis la dernière fois que j'ai testé cela, mais je pense que cela devrait fonctionner.
Quelques informations supplémentaires: Dans la distribution standard Android open source, le noyau est distribué comme un binaire pré-construit dans le mydroid/prebuilt/Android-arm/kernel
dossier et le code source n'est pas inclus. La source du noyau a été supprimée du manifeste par défaut pour deux raisons à mon avis. La première est qu'il faut beaucoup de bande passante et d'espace disque pour un composant de plate-forme avec lequel la plupart des gens ne travailleront pas beaucoup. L'autre raison est que puisque le noyau est construit avec le système de construction du noyau et non en tant que partie du système de construction aosp, il est logique de le garder séparé. La branche commune pour le noyau est celle utilisée par l'émulateur. Il existe également des branches expérimentales, msm (plates-formes Qualcomm) et Omap (plate-forme TI) et peut-être d'autres. Si vous souhaitez utiliser le noyau Android avec du matériel, cela peut être plus intéressant pour vous.
Juste pour corriger certaines choses du post de BMB (qui m'a été très utile, cela a sauvé mon projet):
Depuis 2012, le téléchargement du noyau est bien documenté sur source.google.com, mais j'ai trouvé que la compilation a pris quelques essais. Voici les commandes que j'ai utilisées pour construire un noyau pour l'émulateur 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 &
Merci à tous ceux qui ont répondu à celle-ci - j'ai pu le faire avec des morceaux de cette réponse. Amaund's 'you need the AVD' a été le dernier morceau qui m'a posé problème.
Ceci est une mise à jour des réponses de BMB et Arnaud LM.
Il semble que les noms de branches des poissons rouges aient été modifiés en date du 2011/03/03. Lors de la vérification de la branche poisson rouge, utilisez ceci:
git checkout -t Origin/archive/Android-gldfish-2.6.29 -b goldfish
Notez le "o" manquant dans Android-gldfish-2.6.29!
J'espère que cela fait gagner du temps à quelqu'un.
Invité Android 8.1 entièrement automatisé sur l'hôte Ubuntu 17.10
# 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
Le répertoire de construction out/
Occupe environ 90 Go et le reste de l'arborescence environ 40 Go, à l'exception de CCACHE.
Environ 1 à 2 minutes après le démarrage de l'émulateur, l'écran d'accueil affiche:
et si vous appuyez sur Entrée sur le terminal hôte Android a été lancé à partir de, vous obtenez un shell sur le système Android sur votre terminal hôte:
Remarques:
./repo init -b
DOIT pointer vers une balise . master
la branche est toujours cassée, tout comme les -release
branches.
La liste des balises peut être trouvée à: https: //Android.googlesource.com/platform/manifest ou en clonant ce dépôt.
Il y a probablement deux raisons pour lesquelles les branches sont toujours cassées:
Android est développé derrière des portes closes et le code a chuté. Par conséquent, les développeurs Google et OEM ont déjà une tonne de cache en plus du "maître" public et ont déjà résolu le problème.
Pour la même raison, il est probablement inutile d'essayer de signaler toute erreur de génération sur le maître: elles ont déjà été signalées et corrigées. Je vous mets également au défi de trouver le bon endroit officiel pour signaler les échecs de construction.
repo sync
Sur une branche extrait simplement la dernière version de tous les dépôts 650 git constituant AOSP pour la branche donnée, sans les synchroniser comme des sous-modules. Rien ne garantit donc leur compatibilité. Les tags récupèrent cependant un tag spécifique de tous les repos.
--depth 1
Et sync -c --no-tags --no-clone-bundle
Étaient une tentative pour accélérer le clone douloureusement lent. Je ne sais pas à quel point c'était réussi. Voir aussi: La synchronisation du repo AOSP prend trop de temps
Nous utilisons lunch aosp_x86_64-eng
Au lieu de ARM car il s'exécute beaucoup plus rapidement en raison des extensions de virtualisation Host x86.
Pour créer une version ARM à la place, utilisez simplement lunch aosp_arm-eng
À la place.
De plus, l'image ARM est boguée, peut-être à cause de la lenteur? Lorsque l'interface graphique démarre (si vous êtes chanceux), elle affiche "L'interface utilisateur système ne répond pas". Voir aussi: Le système de processus ne répond pas dans l'émulateur Android
-show-kernel
Relie le terminal à une série, c'est-à-dire que vous voyez des messages de démarrage et obtenez un Shell à la fin, ce qui est très utile pour déboguer les choses.
type emulator
Montre qu'il ne s'agit que d'un alias au emulator
sans aucun argument. Exécutez ROM personnalisé sur l'émulateur Android vous demande comment passer des arguments pour sélectionner explicitement votre ROM.
Les cibles de l'émulateur -help
Sont étonnamment perspicaces:
emulator -help
emulator -help-build-images
emulator -help-disk-images
Vous pouvez déterminer les arguments de ligne de commande QEMU exacts donnés avec:
emulator -verbose | grep 'emulator: argv'
comme mentionné à: Comment montrer quelles options sont passées à QEMU lors du lancement de l'émulateur Android?
Cela montre certaines options personnalisées, par exemple -Android-hw
, Ils doivent donc avoir fourché QEMU: QEMU vs Android émulateur: options de ligne de commande La source se déplace l'emplacement toutes les 5 minutes apparemment: Modification du code source de l'émulateur Android
C'est facile. Suivez les instructions sur http://source.Android.com/download pour obtenir et compiler le code source pour tout Android. Cela prend du temps, mais ce n'est pas si compliqué.
En construisant cela, vous aurez votre sortie dans le <Android>/out
répertoire. Cela inclut, en plus des images ROM, un tas d'outils aussi, y compris l'émulateur. Mon émulateur est à <Android>/out/Host/linux-x86/bin/emulator
. Définissez simplement une variable d'environnement nommée Android_PRODUCT_OUT
à <Android>/out/target/product/generic
, puis exécuter l'émulateur sans aucune option exécutera votre ROM compilée.
Depuis mai 2012, j'ai constaté que vous ne pouvez pas utiliser le 'goldfish_defconfig' pour compiler le noyau. Vous devez utiliser goldfish_armv7_defconfig '. Cela expliquerait pourquoi la méthode de JonnyLambada pour extraire la configuration de l'émulateur (pour le noyau précompilé) fonctionne et est nécessaire.
Le goldfish_defconfig configure le noyau pour qu'il s'exécute sur un processeur ARM 926, mais l'émulateur est configuré pour fonctionner comme un Coretex A8 (qui est un ARM CPU V7) Vous devez donc utiliser la nouvelle configuration defconfig si vous voulez qu'elle fonctionne (ou extraire la configuration de l'émulateur).
Juste FYI.
La façon dont j'ai pu démarrer la rom AOSP que j'ai compilée était de copier le system.img qui a été compilé dans ~/.Android/avd/Froyo.avd/Mais, quand j'extrais le system.img et ajoute la version enracinée de su et busybox, puis refaire le system.img, l'émulateur ne démarre pas. J'essaie toujours de comprendre cette partie: S